MFC 修改字型的顏色

2021-08-31 23:49:22 字數 1872 閱讀 5468

一、使用onctlcolor修改

2、cwnd::onctlcolor描述

(1)、類嚮導—>訊息—>新增wm_ctlcolor訊息。

(2)、手動新增。

a、.h檔案中新增控制代碼刷子的宣告

afx_msg hbrush onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor);
b、.cpp新增onctlcolor()訊息對映
begin_message_map(cdialogtab1, cdialog)

…………

on_wm_ctlcolor()//

…………

end_message_map()

c、在.cpp檔案新增函式的實現
enum edittextcolor
edittextcolor = red;
hbrush cdialogtab1::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor)

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

return hbr;

}

(1)、函式原型

afx_msg hbrush onctlcolor(

cdc* pdc,

cwnd* pwnd,

uint nctlcolor );

引數含義:

pdc:包含指向子視窗的顯示上下文的指標。可能是暫時的。

pwnd:包含乙個指向請求顏色的控制項的指標。可能是暫時的。

nctlcolor:包含以下值之一,指定控制項的型別:

ctlcolor_btn-----button control(按鈕控制項)

ctlcolor_dlg-----dialog box(視窗)

ctlcolor_edit-----edit control

ctlcolor_listbox-----list-box control

ctlcolor_msgbox -----message box

ctlcolor_scrollbar -----scroll-bar control

ctlcolor_static -----static control

之前遇到修改edit控制項,但是onctlcolor()沒有呼叫的情況,找了好多解決方法,要不是太複雜就是效果不好(會閃爍)。

onctlcolor()一般在視窗需要更新的時候被呼叫。比如最小化後最大化、視窗被遮蓋後重新顯示,或呼叫視窗的invalidate 函式使視窗無效、或在程式剛啟動的時候。

基於以上,因為setwindowtextw( )會呼叫onctlcolor(),所以可以用下面這個笨方法解決。

//用於呼叫onctlcolor更新字型的顏色,取當前的內容與游標位置

cstring editstr;

int editstartchar,editendchar;

((cedit*)getdlgitem(cpublic::g_editcstartid+i-1))->getsel(editstartchar,editendchar);

((cedit*)getdlgitem(cpublic::g_editcstartid+i-1))->getwindowtextw(editstr);

((cedit*)getdlgitem(cpublic::g_editcstartid+i-1))->setwindowtextw(editstr);

((cedit*)getdlgitem( cpublic::g_editcstartid+i-1 ))->setsel(editstartchar,editendchar,false);

MFC修改Button背景顏色和字型顏色

afx msg void ondrawitem int nidctl,lpdrawitemstruct lpdrawitemstruct 修改button背景顏色和字型顏色 void cskindlg ondrawitem int nidctl,lpdrawitemstruct lpdrawitem...

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

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

MFC對話方塊美化(文字顏色 字型 背景顏色修改)

mfc預設介面太寒磣我已經無力吐槽了,最近稍微做了一些美化的內容,主要是對話方塊背景顏色的修改,控制項文字大小 字型 顏色的修改,多種配色使得對話方塊風格活潑不少。修改前後對比圖 如下,僅列出需要修改的函式 virtualmeterdlg.cpp 實現檔案 bool cvirtualmeterdlg...