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