C 自繪控制項基礎

2021-06-18 13:46:30 字數 1148 閱讀 5851

由於我們對控制項的功能、外觀的需求,公共控制項並不能很好地滿足這一點,所以我們就得自繪控制項。

自繪控制項有許多方法,比如:處理wm_paint訊息設定owndraw風格,處理wm_ctlcolor訊息,

之前見過有網友發表過自定義繪製的方法,但目前我只了解前面這幾個方法,日後有機會再補充。

處理wm_paint訊息

這個應該是最容易想到的方法。在windowproc()函式中處理wm_paint訊息,這可能出現一些瑣事,比如創裝置上下文,決定控制項的位置等。這理就不詳細解釋,具體可以看《window程式設計》。

設定owndraw風格

這個方法也就是所有者繪製方法。它是用於開發自定義控制項最普通的技術,因為在呈現控制項的那一刻,windows就已經填寫了裝置上下文,決定控制項大小和位置等,不必像處理wm_paint訊息那樣什麼都要自已過一遍。

這個方法是要過載drawitem()函式,函式注意與ondrawitem()區分開。當我們過載drawitem()函式時,它是在它的宿主類的ondrawitem()中被呼叫的。

我們可以在presubclasswindow()函式中設定控制項的bs_ownerdraw屬性,不過這會去掉其它的屬性。

比如自繪乙個cmybutton:

void cmybutton::presubclasswindow()

處理wm_ctlcolor訊息

這個方法只提供改變控制項的顏色,並且不提供控制項本身之外的更多功能。

與訊息對應的onctlcolor()函式,其返回值是乙個刷子控制代碼,該刷子將被用於畫出控制項的背景。當要畫出乙個子控制項時,框架就呼叫這個成員函式。

其類別有如下幾種:

ctlcolor_btn 按鈕控制項

ctlcolor_dlg 對話方塊

ctlcolor_edit 編輯框

ctlcolor_listbox 列表框

ctlcolor_msgbox 訊息框

ctlcolor_scrollbar 滾動條

ctlcolor_static 靜態文字

自繪GroupBox控制項

下面顯示的是效果圖 然後是 其中有一些解釋 using system using system.collections.generic using system.componentmodel using system.diagnostics using system.text using syste...

MFC自繪控制項

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

MFC Button控制項自繪

vc下的介面著實難看 有時候我們不得不自己進行控制項的繪製 以前 一直不理解最近再次看了學了一遍終於明白了一點 與大家分享下.需要源 的q我 尋找一起學vc的朋友 比如說我們要改變乙個編輯框的背景 我們響應wm ctlcolor函式 進行onctlcolor進行修改但是對與 button控制項就不行...