?? 10.6.1 改變整個對話框及其上子控件的背景色.txt
字號:
10.6.1 改變整個對話框及其上子控件的背景色
下面為 Graphic程序的設(shè)置對話框( CSettingDlg對象)捕獲 WM CTLCOLOR消息,即添加該消息的響
應處理,該響應函數(shù)的默認代碼如例 10-25所示。
例 10-25
HBRUSH CSettingDlg : :OnCtlColor(CDC* pDC , 'CWnd* pWnd, UINT nCtlColor)
{ HBRUSH hbr = CDialog : :OnCtlColor(pDC , pWnd, nCtlColor) ;
// TODO : Change any attributes of the DC here
// TODO : Return a different brush if the default is not desired
return hbr;
可以看到,在 OnCtlColor這個消息響應函數(shù)中,首先調(diào)用對話框基類: CDialog的 OnCtlColor函數(shù),
返回一個畫刷句柄 (hbr),然后該函數(shù)直接返回這個畫刷句柄。之后,系統(tǒng)就會使用這個畫刷句柄
來繪制對話框及其子控件的背景。如果想要改變對話框的背景色,只需要自定義一個畫刷,然后讓
OnCtlColor函數(shù)返回這個畫刷句柄即可。
因此,首先為 CSetting Dl g類定義一個 CBrush類型的私有成員變量: m_brush,井在其構(gòu)造函數(shù)
中利用 CreateSolidBrush函數(shù)將該畫刷初始化為一個藍色的畫刷,初始化代碼為:
m_brush.CreateSolidBrush (RGB(O , O, 255));
然后,在 OnCtlColor響應函數(shù)返回時返回上述自定義的畫刷: m_brush,即該函數(shù)的代碼修改為如
例 10-26所示代碼。
例 10-26
HBRUSH CSettingDlg : :OnCtlColor(CDC* pDC , CWnd* pWnd , UINT nCtlColor)
{
HBRUSH hbr = CDialog: :OnCtlColor(pDC , pWnd , nCtlColor);
// TODO : Change any attr工 butes of the DC here
// TODO: Return a different brush if the default is not desired
/ / return hbr ;
return m_brush;
Build并運行 Graphic程序,打開設(shè)置對話框,可以看到對話框和控件的背景都變成了藍色(如圖
10.23所示)。這是因為在該對話框繪制時,會調(diào)用 OnCtlColor函數(shù)繪制整個對話框的背景,即用 m
brush畫刷來繪制對話框背景。當繪制其子控件時,也是調(diào)用這個 OnC t1Cólor函數(shù),也是用 m brush
這個畫刷來繪制背景的。因此,我們看到子控件和對話
框的背景都是藍色。至于該對話框上兩個按鈕的背景為什么沒有改變,稍后再介紹。
圖 10.23設(shè)置對話框及其子控件的背景色
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -