改變MFC對話方塊背景色 控制項

2021-06-20 02:06:41 字數 2972 閱讀 1283

改變mfc對話方塊背景色、控制項內的字型顏色和背景色

中天數字

c 設定 dialog, group box, static text, check box, edit ctrl(disabled), combo box(disabled), radio button等背景色

編寫wm_ctlcolor訊息的對映函式onctlcolor(cdc *pdc, cwnd pwnd, uint nctlcolor)

加入如下**:

colorref backcolor = rgb(216, 231, 252) //office 2003背景色

pdc->setbkmode(transparent); 

//設定控制項背景透明

return createsolidbrush(backcolor); 

//建立背景刷子

---- 方法二:過載onpaint(),即wm_paint訊息。有關**如下(以上例工程為準):

void cexampledlgdlg::onpaint()

---- 方法三:過載onctlcolor (cdc* pdc, cwnd* pwnd, uint nctlcolor),即wm_ctlcolor訊息。具體 步驟如下(以上例工程為準):

---- ①在cexampledlgdlg的標頭檔案中,新增一cbrush的成員變數:

class cexampledlgdlg : public cdialog

;---- ②在oninitdialog()函式中新增如下**:

bool cexampledlgdlg::oninitdialog()

---- ③利用classwizard過載onctlcolor(…),即wm_ctlcolor訊息:

hbrush cexampledlgdlg::onctlcolor

(cdc* pdc, cwnd* pwnd, uint nctlcolor)

---- 方法四:還是過載onctlcolor (cdc* pdc, cwnd* pwnd, uint nctlcolor),即wm_ctlcolor訊息。 具體步驟如下(以上例工程為準):

---- 步驟①、②同上方法三中的步驟①、②。

---- 步驟③利用classwizard過載onctlcolor(…)(即wm_ctlcolor訊息)時則有些不同:

hbrush cexampledlgdlg::onctlcolor

(cdc* pdc, cwnd* pwnd, uint nctlcolor)

---- 編譯並執行即可。

---- 關於如何改變對話方塊背景顏色的問題,可能還有很多種不同方法可以實現,筆者在這僅舉出四種常見 的方法。其中方法三的程式設計似乎有點不太規範,方法四則要比方法三正統些,筆者這樣的對比舉例是為了 拓寬vc程式設計愛好者特別是初學者的程式設計思路,讀者可以根據實際情況選用其中的一種。如果再結合《軟體 報》2023年第5期中改變對話方塊上的控制項顏色,相信會使您的mfc應用程式"增色"不少。

另外一種就是用

bool cbpcallview::onerasebkgnd(cdc* pdc)

bool chardwaremessage::onerasebkgnd(cdc* pdc)

mfc改變控制項內的字型顏色和背景色

2010-11-26 13:25

在mfc類庫提供了cwnd::onctlcolor函式,在工作框架的子視窗被重畫時將呼叫該成員函式.因此可以過載wm_ctlcolor訊息的響應函式.此函式的原型:

afx_msg hbrush onctlcolor(cdc *pdc,cwnd *pwnd,uint nctlcolor);

引數nctlcolor用於指定控制項的型別,可以是:

.ctlcolor_btn

按鈕控制項

.ctlcolor_dlg

對話方塊.ctlcolor_edit

編輯框.ctlcolor_listbox

列表控制項

.ctlcolor_msgbox

訊息控制項

.ctlcolor_scrollbar滾動條控制項

.ctlcolor_static

靜態控制項

[程式實現]

假設你已有了名為my的對話方塊工程.你有了乙個static的控制項,id為idc_static1.

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

// todo: return a different brush if the default is not desired

return hbr;

}

如果要指定某個特定控制項可以這樣寫:id為idc_static1

if(pwnd->getdlgctrlid()==idc_static1)

else

return hbr;

【注】

black_brush:黑色

white_brush:白色

gray_brush:灰色

null_brush:透明

hollow_brush:透明

改變對話方塊的預設背景色

法一在對話方塊的wm paint訊息的響應處理函式onpaint 中進行繪製背景色。法二響應對話方塊的wm ctlcolor訊息,在訊息處理函式onctlcolor中進行繪製。onpaint法 1 新建乙個基於對話方塊的mfc應用程式changebgcolortest1。2 開啟changebgco...

MFC 控制項背景色

由於需要,要講groupbox控制項和文字控制項static的背景色設為一致。onctrlcolor中設定groupbox背景色 if pwnd getdlgctrlid idc g if pwnd getdlgctrlid idc static1 設定後效果 有個白色背景不符合要求 需要新增此句 ...

改變對話方塊背景色,對話方塊內文字的顏色與背景色

利用classwizard過載onctlcolor 即wm ctlcolor訊息 改變對話方塊背景色,文字顏色及背景色 hbrush selsamplesdlg onctlcolor cdc pdc,cwnd pwnd,uint nctlcolor todo 如果預設的不是所需畫筆,則返回另乙個畫筆...