re: 一道考驗你設計能力的C++編程題 Richard Wei 2012-06-12 10:38
@小明
為模式而模式當然不對,但是很多時候你會不自覺地用到設計模式,因為同類問題已經有了一種被大家證明是最合理的方案(模式)來解決。
上面的問題你有更好的解決方案嗎?
re: 一道考驗你設計能力的C++編程題 Richard Wei 2012-06-12 10:17
@sharkcc
涉及到很多模式, Template, Decorate, Composite, faced, Visitor等
嫌文字太多可以直接下載最后的源代碼看, 相信會有所收獲。
re: 生成DirectUI 控件樹的設計過程 Richard Wei 2012-06-11 18:12
@飯中淹
沒太看明白你說的問題, 但是我想對于UI來說很多東西是類似的,
就一個UI(窗口)本身是一棵遞歸的樹,內部有容器和控件,相當于樹的分支(node)和樹葉(leaf),并且可以無限遞歸, 這個層次很符合Composite模式,也很符合用XML來描述。
所以現在比較流行的UI框架(比如WPF, WEB頁面)都分2層來描述,一層是標記(markup). 比如WPF里的XAML, Web頁面里的HTML; 另外一層是代碼(code), 比如WPF里用C#, Web頁面里用javascript.
其實本質上code部分才是真正的實現,內部定義了所有的控件層次, 所以即使不依賴markup部分,我們同樣可以定義和操作所有的UI, 但是借助Markup可以讓我們更方便的生成和修改UI。
至于用不用Prototype模式不太重要,我這里的想法是讓控件有默認的風格屬性,而且這個默認風格屬性也是容易修改的。通過用Prototype,我可以在XML里定義默認的控件原型,程序初始化時用該原型來注冊控件就可以了。另外, 如果有些控件你覺得用不到,不去注冊就好了。 這種注冊機制, 對于支持插件(控件)也很方便,你覺得呢?
re: 一個優秀windows C++程序員的知識體系 Richard Wei 2012-06-11 08:39
@10年碼農
你說的我也明白,其實就是體力勞動和腦力勞動的差別,在中國體力不值錢,但是腦力勞動可以讓你滿足基本的生活需要外還有些閑錢。
另外,感覺國內其實大家都過得都比較累,無論是上面的官員,還是城市的中產房奴,或是底層的農民。
re: 一個優秀windows C++程序員的知識體系 Richard Wei 2012-06-11 08:29
@Peter Wang
是的,但是人家的知識更新要慢得多。
比如古代的一個廚師,到現代的話只要學下怎么用煤氣灶就可以繼續干活了。
但是如果是一個DOS程序員轉換到Windows開發就不那么容易了
re: 一個優秀windows C++程序員的知識體系 Richard Wei 2012-06-10 20:18
@CapaLin
其實任何一個稍微有點規模的程序,都是上述知識體系的結合,開發一個優秀的軟件尤其如此。
re: 高效、實用、安全的字符串,語法糖?奇技淫巧? Richard Wei 2012-06-08 08:39
依賴于編譯器的內存布局, 不敢用。
C++11新增了array類來替代C型的原始數組。
re: C++11新特性不完全測試 Richard Wei 2012-06-07 08:35
@周星星
是的, 不好意思,寫錯了,應該是VS11(Visual Studio 11 Beta)
多謝指正。
re: 試論C++類庫開發之難 Richard Wei 2012-05-30 18:19
的確,C++ STL提供的都是最基本的功能,上層應用的庫還是要自己封裝
re: MFC,一開始就錯了 Richard Wei 2012-05-30 18:14
哈哈,恭喜,博主終于醒悟了
re: OOP的黃昏 Richard Wei 2012-05-24 21:27
在C++11中沒有看到concept, 不知博主有啥看法?
re: 桌面上嵌入窗口(桌面日歷)原理探索 Richard Wei 2012-05-19 11:22
@請教一下
沒環境,讓客戶不要裝360吧 :)
re: 桌面上嵌入窗口(桌面日歷)原理探索 Richard Wei 2012-05-19 10:41
@請教一下
好像沒有你說的半透明失效問題,可以參照我上傳的測試代碼。
至于360是否攔截,我就不知道了, 理論上這個不是安全問題,不該攔截的。
re: 如何判斷一個C++對象是否在堆上 Richard Wei 2012-05-13 09:52
@Duwen
windows NT內核初始化時就有3個堆,且余留大小都是1MB,提交大小是8KB,其中一個是系統默認堆, 我們調用GlobalAlloc(),就是在默認堆里分配的內存。
C/C++ CRT會創建自己的堆,我們平時new對象,都是在該堆里分配的內存。所以我們一般看到的程序起碼有4個堆。
另外如果你用了COM組件(調用了::CoInitialize(NULL)), 他也會建立自己的2個堆,CoTaskMemAlloc() 和 SysAllocString()都在在里面分配的內存。
一般寫應用程序,理解到此就夠了,再深入就要看Windows內核的源代碼了。
re: 如何判斷一個C++對象是否在堆上 Richard Wei 2012-05-12 23:05
@Duwen
堆棧大小一般默認是1M,但是VC在編譯時是可以通過/STACK :reserve[,commit] 設置的
另外對象所在位置, 除了堆(Heap)和棧(Stack),還有靜態存儲區等
re: 如何判斷一個C++對象是否在堆棧上 Richard Wei 2012-05-12 22:49
@jk
有什么方法, 希望可以學習下。
re: 如何判斷一個C++對象是否在堆棧上 Richard Wei 2012-05-12 22:48
@Duwen
多謝指正,希望共同進步。
恩,可能表達不是很清楚,我上面說的堆棧其實指的就是棧(Stack)。
至于堆(Heap), 每個進程除了默認堆,還有其他的, 比如C/C++ CRT就會創建自己的堆,我們每次new對象,默認都是在該堆里進行的。所以如果我們寫程序時每個模塊(DLL)用靜態方式鏈接CRT,在DLL內new對象時都會在DLL自己的CRT堆上創建對象。
re: 如何判斷一個C++對象是否在堆棧上 Richard Wei 2012-05-12 14:31
re: QQ截圖時窗口自動識別的原理 Richard Wei 2012-05-07 16:03
更正下,用工具看了下QQ截圖時的全屏窗口,發現它沒有WS_EX_LAYERED屬性,也沒有WS_DISABLED屬性,所以QQ截圖在獲取最外層Popup窗口時應該不是用ChildWindowFromPointEx獲取的。 而應該是通過Z-Order從上到下枚舉(EnumWindows)所有可見并且非Transparent的Popup窗口, 這樣他們可以過濾掉自己的全屏窗口,找到第一個鼠標所在位置的Popup窗口,然后再用ChildWindowFromPointEx獲取里面的子窗口。
re: 一個高效的內存池實現 Richard Wei 2012-05-07 08:39
@ithaca
不好意思,有點誤導,應該是這本書,
《提高C++性能的編程技術》
re: 一個高效的內存池實現 Richard Wei 2012-05-06 09:35
@zgpxgame
是的,適用經常分配和釋放的同一類型的對象。
可變對象大小的內存池還要復雜的多,也沒有很通用的解決方案。
re: 引用計數的智能指針的實現與思考 Richard Wei 2012-05-05 22:35
@jk
不錯,我一直用自己寫的。
看來我落伍了,抓緊去學一下
re: 引用計數的智能指針的實現與思考 Richard Wei 2012-05-05 20:34
@陳梓瀚(vczh)
不錯, Boost的Shared_ptr功能更強大,但是很多公司不讓用。