化了幾天研究Skin,在網(wǎng)上找了很多技術文章,綜合所有優(yōu)點實現(xiàn)了自己的Skin引擎(有點夸張)。包括Skin原理實現(xiàn)、JavaButton、JavaDialog、JavaSlider實現(xiàn),由于時間原因以及工作原因無法繼續(xù)完整實現(xiàn),拿出來供大家學習,也希望有對Java GUI、WIN32 API熟悉,有藝術細胞的人能夠添加其他支持(記得給俺Show一下)。本Skin由于沒有現(xiàn)成位圖資源,主要通過GDI方式實現(xiàn),也是偶擅長顯擺的。
使用技術:多態(tài)、模版、SubClassWindow、Hook、API(GDI)、一點點設計模式^_^
VS2005 MFC實現(xiàn)(核心多采用是API,很容易移植到WTL上)
思想:通過Hook截取所有窗口消息,在創(chuàng)建窗口時實現(xiàn)子類化并管理所有子類化對象,截取所有消息進行選擇處理(主要處理WM_PAINT消息實現(xiàn)自己繪制過程)。
為簡化處理,主要基于對話框?qū)崿F(xiàn),包括對話框Skin、按鈕(普通按鈕、多選框、單選框)Skin、Slider Skin。其他商業(yè)功能沒有實現(xiàn),因為沒有能力啊,只是興趣所好。通過兩個DLL導出的API函數(shù)即可實現(xiàn)Skin功能:
InstallSkin(AfxGetThread()
->
m_nThreadID);
//
?
對話框創(chuàng)建
UninstallSkin();
技術細節(jié)不多講,請看代碼,下面看看效果:
Skin前:

Skin后:

代碼下載
另:以后要研究.NET咯,來北京短短四個月思想變化好大,不知道一直呆在武漢會是什么樣子。10.2的火車回武漢繼續(xù)“讀書”,祝自己一路順風!
posted on 2006-09-28 21:22
萬連文 閱讀(2425)
評論(4) 編輯 收藏 引用 所屬分類:
小作品