MFC視窗各控制項的顏色和字型的設定

2021-06-16 05:31:32 字數 2272 閱讀 2439

很多人定義了基於mfc的程式專案,當設計介面使用控制項時,卻不知道如何對各控制項進行字型與顏色的設計;其實這些修改是需要動手新增**的,這方面的修改在控制項屬性裡是沒有現成的,這不同於.net定義的專案,它的是有直接屬性修改的。我在原文的基礎上做了修改與完善,也可參見原文

原文:1、改變對話方塊的底色

在對話方塊的類中新增乙個private : cbrush m_brush;的成員變數。在類的建構函式中新增如下**:

m_brush.createsolidbrush(rgb(0,0,255));     //初始化為藍色

為對話方塊新增乙個wm_ctlcolor訊息響應函式,專門為控制項著色的訊息響應函式,**如下:

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

當然,.h檔案裡也要對函式進行預定義的;此時,該對話方塊的背景色已經全為藍色了。

2、如果我們要設定某乙個對話方塊控制項的底色和文字顏色時只要將上面return m_brush;改為:

if (pwnd->getdlgctrlid()==idc_line_style)     /*如果控制項的名稱為

idc_line_style*/

return hbr;             /*否則的話返回系統預設的畫刷控制代碼*/

注意如果要設定單行edit的文字背景色,需要使用setbkcolor設定,而setbkmode即使為透明,文字的背景仍為系統的預設色。按鈕控制項好像不能實現,大家可以試試,是不是按鈕真的不能實現這些顏色變化。

3、利用上面的原理,在對話方塊控制項響應onpaint訊息時,將乙個靜態文字顯示所設定字型的文字。新增乙個靜態文字框,改名為idc_text。新增乙個字型成員變數private: cfont m_font;在對話方塊的建構函式中對字型進行初始化:m_font.createpointfont(200,"華文行楷");在2的return hbr;之前加入如下**:

if (pwnd->getdlgctrlid()==idc_text)   /*如果為id號所指的靜態文字框*/

注意,因為onpaint訊息響應函式是在控制項被繪製之前觸發的,它所返回的hbrush畫刷控制代碼,便攜帶了我們所設定的這些屬性。此時,靜態文字框的字型就變為你所需要的那種字型了。

4、如果要改變ok按鈕的文字顏色,靠上面的方式是不行的。我們需要建立乙個新的從cbutton類繼承的ctestbtn類,並新增乙個類的drawitem的虛函式,類與虛函式都可以用嚮導來定義,加入以下**:

// todo: add your code to draw the specified item

uint ustyle = dfcs_buttonpush;

// this code only works with buttons.

assert(lpdrawitemstruct->ctltype == odt_button);

// if drawing selected, add the pushed style to drawframecontrol.

if (lpdrawitemstruct->itemstate & ods_selected)

ustyle |= dfcs_pushed;

// draw the button frame.

::drawframecontrol(lpdrawitemstruct->hdc, &lpdrawitemstruct->rcitem,dfc_button, ustyle);

// get the button's text.

cstring strtext;

getwindowtext(strtext);

// draw the button text using the text color red.

colorref croldcolor = ::settextcolor(lpdrawitemstruct->hdc, rgb(255,0,0));/*設定按鈕的字型為紅色。將返回的原先的顏色暫時儲存

*/::drawtext(lpdrawitemstruct->hdc, strtext, strtext.getlength(),&lpdrawitemstruct->rcitem, dt_singleline|dt_vcenter|dt_center);

::settextcolor(lpdrawitemstruct->hdc, croldcolor);

然後,右鍵選擇ok按鈕,用嚮導建立乙個關聯的成員變數m_btntest,從新建立的ctestbtn類繼承。在ok按鈕的屬性頁-〉styles-〉owner draw選中,否則ok按鈕仍然繼承預設的cbutton類。

MFC視窗的顏色和字型的設定

1 改變對話方塊的底色 在對話方塊的類中新增乙個 private cbrush m brush 的成員變數。在類的建構函式中新增如下 m brush.createsolidbrush rgb 0,0,255 初始化為藍色 為對話方塊新增乙個wm ctlcolor訊息響應函式,專門為控制項著色的訊息響...

MFC視窗的顏色和字型的設定

1 改變對話方塊的底色 在對話方塊的類中新增乙個 private cbrush m brush 的成員變數。在類的建構函式中新增如下 m brush.createsolidbrush rgb 0,0,255 初始化為藍色 為對話方塊新增乙個wm ctlcolor訊息響應函式,專門為控制項著色的訊息響...

MFC字型(二)(控制項字型顏色)

改變edit字型顏色 1 cmydlg類中新增成員變數 cbrush m brush 2 oninitdialog中初進行設定 m brush.createsolidbrush rgb 0,255,255 3 新增訊息響應函式 onctlcolor if nctlcolor ctlcolor edi...