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

2022-08-29 21:39:19 字數 2594 閱讀 3749

在預設情況下, 我們看到的對話方塊及其控制項的背景和字型顏色都是淺灰色的,為了美化介面我們可以使用mfc中的wm_ctlcolor訊息,它的響應函式是cwnd類的onctlcolor.。該函式宣告如下:

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

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

引數:pdc 指向當前要繪製的控制項的dc指標。

pwnd 指向當前要繪製的控制項

nctlcolor 指定了控制項的型別:

· ctlcolor_btn 按鈕控制項

· ctlcolor_dlg 對話方塊

· ctlcolor_edit 編輯控制項

· ctlcolor_listbox 列表框控制項

· ctlcolor_msgbox 訊息框

· ctlcolor_scrollbar 滾動條控制項

· ctlcolor_static 靜態控制項

該函式的返回值是個畫刷控制代碼,用於繪製指定控制項的背景顏色。

當乙個子控制項將要被繪製時,它都會向它的父視窗(通常是對話方塊)傳送乙個wm_ctlcolor來準備乙個裝置上下文,以便使用正確的顏色來繪製該控制項。如果想要改變控制項上的文字顏色,可以在改函式中呼叫cdc類中的settext函式來實現,改變字型背景顏色使用setbkcolor來實現,對應對話方塊物件來說,由於它是父視窗,會有多個子控制項向它請求顏色設定,因此onctlcolor函式會多次被呼叫。

在改變控制項的背景顏色之前,我們需要先完成對話方塊的建立,然後在為建立的對話方塊新增類,後續的onctlcolor函式就在這個類中響應,該函式的預設實現如下:

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

對應畫刷物件轉化為畫刷控制代碼的過程分析「operator hbrush」,我們在對話方塊類中新增私有型別的成員變數:m_brush,在建構函式中為其初始化為藍色畫刷,這個畫刷就是我們自己定義的,**如下:

m_brush.createsolidbrush(rgb(0,0,255))
**如下:

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

執行效果:

如果我們只想改變某一類或者某個控制項背景顏色的話,我們可以通過判斷onctlcolor響應函式中的第三個引數nctlcolor來判斷當前的控制項型別;若想修改某個具體的控制項背景顏色和文字顏色,我們可以通過pwnd所指的類物件成員函式getdlgctrid來獲得當前的控制項id,這裡給出繪製某個具體控制項的id背景顏色和字型顏色,**如下:

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

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

return hbr;

}

執行效果:

我們發現對應按壓式的button按鈕,是不起作用的,而對於radio button可以起作用。如果我們想修改按鈕式的button按鈕外觀,我們需要使用cbutton類的乙個成員函式drawitem,該函式宣告如下:

virtual void drawitem( lpdrawitemstruct lpdrawitemstruct );
引數:

lpdrawitemstruct 指向結構drawitemstruct的乙個長指標,該結構中記錄了要繪製的項的資訊以及繪製的風格。  

我們可以繼承cbutton類定義乙個我們自己的類,在自定義類中需要重寫drawitem函式。通過drawitem函式我們就可以

繪製自定義按鈕,

自定義的按鈕的風格需要設定為bs_ownerdraw才能生效。

使用步驟:

1.設定該button控制項的owner draw選項,使之具備bs_ownerdraw風格。

2.將button控制項關聯乙個成員變數,型別為自定義的類。

3.可以在對話方塊的oninitdialg函式中初始化成員變數,使之具備想要的外觀。

我們將button按鈕關聯為cbuttonst類,並在該button未啟用時將其設定成紅色背景和藍色字型顏色,該類在網路上可以找的類,具體設定**如下:

bool cdrawmaindlg::oninitdialog()

執行效果:

對於部分的控制項型別,使用mfc的訊息反射技術,更加簡單,關於訊息反射的學習,在其他博文介紹,關於控制項自繪4種技術和應用場景分析,參考「4種控制項自繪技術分析」

markdown改變字型顏色及背景顏色

color 效果 其他方法 color 或 color 效果 但是字型大小比主題的小 如圖,完成 小 這裡講乙個不完善的解決方法 typora支援這兩個標籤還有乙個標籤,像都不支援,就這兩個標籤也不支援樣式的修改,自己只能再在基本css中定義。線面所示,原來就有,自己加的。注意後面多有字型加下劃線,...

改變eclipse字型 背景顏色

配色方案詳細following annotations 注釋 107,147,186 deprecated members 不建議使用的成員 0,0,0 fields 字段 128,0,128 keyword return 關鍵字 return 255,0,0 keyword excluding r...

改變MFC控制項背景顏色

這裡講述兩種改變mfc控制項背景顏色的方法 方法一 用onctlcolor訊息函式,改變特定控制項的背景 首先在標頭檔案的類中定義cbush類的變數 brush 如語句 cbrush brush 然後在原始檔的建構函式中初始化 brush.createsolidbrush rgb 255,0,0 r...