轉帖|使用教程|編輯:鮑佳佳|2021-07-22 14:54:11.353|閱讀 414 次
概述:上一節中主要講的是畫筆CPen的用法,前面也說了,GDI對象中最常用的就是畫筆和畫刷,本節就講講畫刷CBrush。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
上一節中主要講的是畫筆CPen的用法,前面也說了,GDI對象中最常用的就是畫筆和畫刷,本節就講講畫刷CBrush。
通過實例的方式來說明畫刷的用法。此實例要實現的功能是,對話框上有一個按鈕控件和一個圖片控件,點擊按鈕彈出顏色對話框,然后在顏色對話框中選擇顏色并點擊“確定”后,圖片控件中將顯示選擇的顏色。
其實此實例的功能,還可以通過重載對話框WM_CTLCOLOR消息的響應函數等方法來實現,但為講解畫刷的CBrush的使用,雞啄米采用了下面代碼中的方法。
以下是此實例的具體實施步驟:
1、創建一個基于對話框的MFC工程,名字設為“Example51”。
2、在自動生成的對話框模板IDD_EXAMPLE51_DIALOG中,刪除“TODO: Place dialog controls here.”添加一個按鈕控件和一個Picture控件,ID分別設為IDC_COLOR_SEL_BUTTON和IDC_COLOR_SHOW_STATIC,按鈕控件的Caption屬性設為“選擇顏色”,此時對話框模板如下圖所示:
3、為Picture控件IDC_COLOR_SHOW_STATIC添加CStatic變量,名稱設為m_picColor。
4、在對話框模板中雙擊“選擇顏色”按鈕,為其添加點擊消息的響應函數CExample51Dlg::OnBnClickedColorSelButton(),修改該函數的實現如下:
C++代碼
void CExample51Dlg::OnBnClickedColorSelButton() { // TODO: Add your control notification handler code here COLORREF color = RGB(255, 0, 0); // 顏色對話框的初始顏色 CColorDialog colorDlg(color); // 構造顏色對話框,初始顏色為紅色 CRect rectPicture; // 圖片控件的矩形區域坐標 CBrush newBrush; // 創建的新畫刷 CBrush *pOldBrush; // 舊畫刷的指針 CClientDC clientDC(this); // 構造客戶區的設備上下文對象 if (IDOK == colorDlg.DoModal()) // 顯示顏色對話框 { // 如果點擊了顏色對話框的“確定”按鈕,則執行以下操作 // 獲取顏色對話框中選擇的顏色 color = colorDlg.GetColor(); // 用選擇的顏色創建新畫刷 newBrush.CreateSolidBrush(color); // 獲取圖片控件矩形區域的屏幕坐標 m_picColor.GetWindowRect(&rectPicture); // 將圖片控件矩形區域的屏幕坐標轉換為其父窗口即對話框的客戶區坐標 ScreenToClient(&rectPicture); // 選擇新畫刷,并保存舊畫刷的指針到pOldBrush pOldBrush = clientDC.SelectObject(&newBrush); // 以新畫刷為圖片控件填充顏色 clientDC.Rectangle(rectPicture); // 恢復舊畫刷 clientDC.SelectObject(pOldBrush); // 刪除新畫刷 newBrush.DeleteObject(); } }
代碼中已經加了詳細的注釋,不過雞啄米覺得有必要再簡單介紹下CClientDC類。CClientDC類是CDC類的派生類,它生成的設備上下文對應于窗口的客戶區,另一個類CWindowDC也是CDC類的派生類,它對應的則包括客戶區和非客戶區,也就是說,CClientDC只能在客戶區繪圖,而CWindowDC可在客戶區和非客戶區繪圖。
講到這里,有人會問,到底什么是客戶區,什么是非客戶區?非客戶區包括窗口中的標題欄、菜單欄、狀態欄、滾動條、邊框等區域,客戶區就是除去非客戶區之外的區域。
5、編譯運行程序,在結果對話框中,點擊“選擇顏色”按鈕彈出顏色對話框,并選擇顏色后,效果如下圖:
本節教程除講了畫刷CBrush的使用外,還讓大家簡單溫習了顏色對話框的用法。
提醒大家,如果有什么函數或類的用法不是很清楚,均可以查閱MSDN。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: