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

Skin后:

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