MFC控制項背景重繪

2021-07-04 12:06:34 字數 1447 閱讀 2675

mfc中改變dialog背景色和控制項底色,一般採取過載onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor)。

onctlcolor是控制項視窗函式

,其畫刷控制代碼效果提示資訊函式

( afx_msg 

hbrush onctlcolor )構成:

返回值,onctlcolor必須返回乙個刷子控制代碼,該刷子將被用於畫出控制項的背景。

引數,pdc 包含了子視窗的顯示裝置環境的指標

。可能是臨時的。pwnd 包含了要求顏色的控制項的指標。可能是臨時的。 

nctlcolor 包含了下列值,

指定了控制項的型別

: ctlcolor_btn 按鈕控制項 · ctlcolor_dlg 對話方塊 · ctlcolor_edit 編輯控制項 · ctlcolor_listbox 列表框

控制項 · ctlcolor_msgbox訊息框

· ctlcolor_scrollbar 滾動條控制項 · ctlcolor_static 靜態框。

當要畫出乙個子控制項時,框架就呼叫這個成員函式。多數控制項將這個訊息傳送到它們的父視窗(通常是乙個對話方塊),為使用正確的顏色畫出控制項而準備pdc。

要改變文字的顏色,使用要求的紅、綠、藍色值(rgb)呼叫

settextcolor成員函式。

要改變單行編輯控制項的背景顏色,在ctlcolor_edit和ctlcolor_msgbox訊息**中設定刷子控制代碼,並在響應ctlcolor_edit的**中呼叫cdc::setbkcolor函式。

不會為下拉組合框中的列表框呼叫onctlcolor函式,因為下拉列表框實際上是組合框的子視窗,而不是視窗的子視窗。要改變下拉列表框的顏色,建立乙個ccombobox,在過載的onctlcolor中的nctlcolor引數中檢查ctlcolor_listbox。在這個處理函式中,為設定文字的背景必須使用setbkcolor成員函式。

原始白色的對話方塊與背景色不一致,通過過載onctlcolor改變空間背景色。

過載函式:

hbrush cdialog_***::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor)

case ctlcolor_edit:

}pdc->setbkmode(transparent); //設定背景為透明

// todo: 如果預設的不是所需畫筆,則返回另乙個畫筆

return m_secbg;

}

過載後的效果如下圖

MFC重繪按鈕背景

雖然不用mfc來開發,但是客戶還是讓我們用mfc,不多說,繼承cbutton重新實現類 pragma once include afxwin.h class cmybutton public cbutton include stdafx.h include cmybutton.h cmybutton...

MFC自繪控制項

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

MFC 視窗的重繪

根據視窗的大小的變化重繪視窗 新增 乙個視窗訊息 on wm size 注意是在dlg類中 例如有 clistctrl 這樣乙個控制項,給這個控制項新增了變數名之後,再 on wm size 對應的函式 onsize 裡面新增 if m clistonline.m hwnd null 在視窗初始化的...