MFC自繪面板編寫 筆記一

2021-05-24 06:38:57 字數 1087 閱讀 2253

用了這麼長時間的mfc,感覺不錯是不錯,可是那個介面呀,真讓人難受啊.雖然在vs2008中有了提供,但是還是不理想,所以就想找個**庫,現在比較好用的(個人感覺)skinmagic,不過它不支援vs2008悲哀呀.所以打算自己寫乙個.

關於那些基礎知識和hook的知識我就不詳細說了,可以去

這裡來看下.雖然這個是用c#但還是讓我收穫不小

我們現在採用在要hook方式來給介面換膚,下面就來說一具體的步驟,

這裡用到的是vs2008,不採用vc 6.0這樣就可以直接要vs 2008中使用了.由於也可以讓別人來使用,所以我們就用dll的方式來換膚.

具體步驟:

1.新建乙個dll工程,這裡我命名的是"dll",選擇"帶靜態鏈結 mfc 的規則 dll(r)",然後完成

2.開啟工程的主要cpp檔案,我的是dll.cpp.然後新增乙個runhook函式

這個函式是我們的主要函式,它是我們的主入口,下面來看一下 hookproc 為個鉤子函式

這樣我們會發現cdrawedit這個是這個錯誤.cdrawedit是我們自定義的乙個edit類,它的主要功能是實現自繪edit框.下面是cdrawedit在**

把必要的函式在標頭檔案中宣告下,或者放在runhook 這個函式之前.

新增解除安裝鉤子函式

3.匯出函式

開啟dll.def,在下面新增

runhook

stophook

下面是整個dll.def的內容

然後編譯一下.本人測試通過

這樣我們就可以實現所有的"編輯框"的換膚.現在再新建乙個exe工程來測試一下我們dll是不是可以正常的使用

1.新建乙個exe工程新增到當前的工程中.這裡我選的是"基於對話方塊(d)"和"在靜態庫中使用 mfc(e) " .其它預設

2.在對話方塊中新增乙個"編輯框"

#pragma comment(lib,"../debug/dll.lib")

並在initinstance函式中新增**

編譯一下,本人用win 7旗艦版+vs 2008編譯通過

下面是程式的執行截圖

MFC自繪按鈕

1.建立乙個基於對話方塊的程式 2.在這裡,我是將 確定 按鈕重繪,拉大 確定 按鈕 如下 修改為自繪 3.新增位 件id為iidb bitmap1 4.新增類cmybutton基類為cbutton 後面兩個函式是我自己新增的,其中drawitem函式在基類中為虛函式,我們在派生類中過載,負責按鈕的...

MFC自繪控制項

1.c 中drawitem 函式不被呼叫的問題 自繪乙個cmybutton的時候,在drawitem 中改變了button的顏色,但是在程式執行時,drawitem 函式並沒有被執行,原因在於按鈕的型別並不是bs ownerdraw,所以我們需要把它改為 所有者繪製 解決方法 可以過載乙個presu...

MFC之自繪控制項

在描繪mfc介面時,mfc自帶的控制項樣式是絕對不滿足介面的需求的。所以我們就要在mfc自帶控制項基礎上對控制項樣式進行重繪。在採用自繪前介面樣式 採用自繪後介面樣式 是不是自繪控制項後看起來正常了很多?自繪控制項的步驟 我們以做乙個關閉按鈕為例 先建立乙個mfc類繼承自cbutton。給這個類新增...