• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我的玻璃盒子

            WTL不完全窗口換膚技術

            2013-2-5:注意!示例代碼有嚴重的GDI內存泄露!請在實際使用過程中注意解決!這代碼是我5年前寫的了,當時可能沒有注意到,我有空更新一下源碼。

            本文介紹了基于WTL框架的一種換膚方法,可以實現(xiàn)對話框或框架窗口的換膚。

            給窗口換膚的方法有很多種,原理基本相同,無非就是對非客戶區(qū)的重繪。只不過在實現(xiàn)手段上有很多種方式。本文介紹的是其中一種較簡單和易于理解的方式。即對某個窗口句柄進行子類化操作,使該窗口的非客戶區(qū)繪制被我們的代碼所替換,從而實現(xiàn)換膚操作。

            下圖是我們進行換膚后的SDI窗口:
            效果圖

            下面就實現(xiàn)的主要步驟做一些簡單的說明:

            一、我們首先創(chuàng)建自己的換膚窗口類,繼承于CWindowImpl,并指定我們需要的窗體風格。例如:

            typedef CWinTraits<WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX> CXuTraits;
            class CXuSkinWindow : public CWindowImpl<CXuSkinWindow, CWindow, CXuTraits>


            二、然后我們需要處理一些關鍵的消息,例如WM_NCPAINT、WM_ACTIVATE、WM_NCACTIVATE、WM_NCHITTEST、WM_SIZE等等。

            三、我們還要提供一個方法,接收一個窗口的句柄,用于子類化換膚。例如:void EnableWindowFrame(HWND hWnd);

            四、當然,我們的換膚圖片、顏色繪制都離不開GDI。在我的示例程序里,封裝了圖片繪制的類,用于進行圖片拉伸繪制、去透明背景色繪制等方法。(源碼在我的blog中另外兩篇文章中也有公布)

            五、另外,圖片和顏色值都是從INI文件中讀取,這樣方便實現(xiàn)動態(tài)換膚。


            一些提示

            1、繪制窗口非客戶區(qū)主要分為四個部分:標題(需要拉伸繪制),左邊框,右邊框,底邊框。我們在非客戶區(qū)繪制消息中去分別繪制這四部分就好了。繪制的范圍需要根據(jù)當前窗口的大小來計算好。

            2、Windows標準主題、XP主題以及Vista窗口在繪制上有一些區(qū)別,主要是窗口的標題欄高度、邊框寬度有些不同,需要根據(jù)情況動態(tài)判斷,以適應各種主題下的顯示。

            示例工程(VC6 + WTL 7.0):Source Codes, Binary files and Theme files

            posted on 2008-01-17 22:51 深藍色系統(tǒng) 閱讀(2977) 評論(7)  編輯 收藏 引用 所屬分類: WTL

            評論

            # re: WTL不完全窗口換膚技術 2008-05-30 16:38 jom

            感謝你的代碼,3Q Very much.  回復  更多評論   

            # re: WTL不完全窗口換膚技術 2008-05-30 16:47 jom

            朋友,你好。運行以上源碼的時候出現(xiàn)下列錯誤,是不是我裝漏了什么?SDK,我都裝了。

            fatal error C1083: Cannot open include file: 'atlgdix.h': No such file or directory  回復  更多評論   

            # re: WTL不完全窗口換膚技術 2008-05-30 17:03 jom

            還有,運行以后的界面顯示重繪的部分。不知道是什么原因。  回復  更多評論   

            # re: WTL不完全窗口換膚技術 2008-05-30 17:03 jom

            還有,運行以后的界面顯示重繪的部分。不知道是什么原因。  回復  更多評論   

            # re: WTL不完全窗口換膚技術 2009-03-17 18:08 深藍色系統(tǒng)

            抱歉各位,今天才發(fā)現(xiàn)沒有把皮膚圖片文件提交上來。現(xiàn)在補上了。  回復  更多評論   

            # re: WTL不完全窗口換膚技術 2013-05-15 14:33 aeon

            標題欄更換文字有問題哦  回復  更多評論   

            # re: WTL不完全窗口換膚技術 2013-05-15 14:56 aeon

            您好、有QQ嗎、、加我
            411850446
            關于WTL不完全窗口換膚技術:請教一下  回復  更多評論   

            導航

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統(tǒng)計

            常用鏈接

            留言簿(75)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲第一永久AV网站久久精品男人的天堂AV | 中文精品99久久国产 | 天天综合久久一二三区| 色老头网站久久网| 久久精品无码专区免费东京热| 97精品国产97久久久久久免费| 99久久国产精品免费一区二区| 国内精品久久久久久久97牛牛 | 囯产精品久久久久久久久蜜桃| 欧美熟妇另类久久久久久不卡| 国产欧美一区二区久久| 久久久久99精品成人片三人毛片 | 中文字幕精品久久| 久久国产精品一国产精品金尊| 亚洲欧美精品伊人久久| 久久人人青草97香蕉| 久久成人影院精品777| 亚洲精品tv久久久久| 国产精品久久午夜夜伦鲁鲁| 人妻少妇精品久久| 99久久精品这里只有精品| 久久精品国产亚洲av麻豆蜜芽| 亚洲国产精品一区二区久久| 亚洲午夜久久久久妓女影院| 久久人人超碰精品CAOPOREN| 精品人妻久久久久久888| 超级97碰碰碰碰久久久久最新 | 天天爽天天爽天天片a久久网| 久久笫一福利免费导航 | 色综合久久夜色精品国产| 色噜噜狠狠先锋影音久久| 亚洲午夜久久久影院| 偷偷做久久久久网站| 久久精品国产欧美日韩| 伊人久久大香线焦综合四虎| AV色综合久久天堂AV色综合在| 久久久久亚洲AV无码观看| 四虎国产精品成人免费久久| 久久国产精品二国产精品| 9999国产精品欧美久久久久久| 日本精品久久久久中文字幕8|