一、使用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...