上一節(jié)中雞啄米主要講的是畫筆CPen的用法,前面也說了,GDI對象中最常用的就是畫筆和畫刷,本節(jié)就講講畫刷CBrush。
雞啄米依然是通過實例的方式來說明畫刷的用法。此實例要實現(xiàn)的功能是,對話框上有一個按鈕控件和一個圖片控件,點擊按鈕彈出顏色對話框,然后在顏色對話框中選擇顏色并點擊“確定”后,圖片控件中將顯示選擇的顏色。
其實此實例的功能,還可以通過重載對話框WM_CTLCOLOR消息的響應(yīng)函數(shù)等方法來實現(xiàn),但為講解畫刷的CBrush的使用,雞啄米采用了下面代碼中的方法。
以下是此實例的具體實施步驟:
1、創(chuàng)建一個基于對話框的MFC工程,名字設(shè)為“Example51”。
2、在自動生成的對話框模板IDD_EXAMPLE51_DIALOG中,刪除“TODO: Place dialog controls here.”靜態(tài)文本框,添加一個按鈕控件和一個Picture控件,ID分別設(shè)為IDC_COLOR_SEL_BUTTON和IDC_COLOR_SHOW_STATIC,按鈕控件的Caption屬性設(shè)為“選擇顏色”,此時對話框模板如下圖所示:
3、為Picture控件IDC_COLOR_SHOW_STATIC添加CStatic變量,名稱設(shè)為m_picColor。
4、在對話框模板中雙擊“選擇顏色”按鈕,為其添加點擊消息的響應(yīng)函數(shù)CExample51Dlg::OnBnClickedColorSelButton(),修改該函數(shù)的實現(xiàn)如下:
代碼中已經(jīng)加了詳細(xì)的注釋,不過雞啄米覺得有必要再簡單介紹下CClientDC類。CClientDC類是CDC類的派生類,它生成的設(shè)備上下文對應(yīng)于窗口的客戶區(qū),另一個類CWindowDC也是CDC類的派生類,它對應(yīng)的則包括客戶區(qū)和非客戶區(qū),也就是說,CClientDC只能在客戶區(qū)繪圖,而CWindowDC可在客戶區(qū)和非客戶區(qū)繪圖。
講到這里,有人會問,到底什么是客戶區(qū),什么是非客戶區(qū)?非客戶區(qū)包括窗口中的標(biāo)題欄、菜單欄、狀態(tài)欄、滾動條、邊框等區(qū)域,客戶區(qū)就是除去非客戶區(qū)之外的區(qū)域。
5、編譯運行程序,在結(jié)果對話框中,點擊“選擇顏色”按鈕彈出顏色對話框,并選擇顏色后,效果如下圖:
雞啄米提醒大家,如果有什么函數(shù)或類的用法不是很清楚,均可以查閱MSDN。最后祝大家學(xué)習(xí)工作順利,有事沒事多來雞啄米逛逛,呵呵。