西北工業(yè)大學(xué) 第8章利用CDC實(shí)現(xiàn)繪圖程序_第1頁
西北工業(yè)大學(xué) 第8章利用CDC實(shí)現(xiàn)繪圖程序_第2頁
西北工業(yè)大學(xué) 第8章利用CDC實(shí)現(xiàn)繪圖程序_第3頁
西北工業(yè)大學(xué) 第8章利用CDC實(shí)現(xiàn)繪圖程序_第4頁
西北工業(yè)大學(xué) 第8章利用CDC實(shí)現(xiàn)繪圖程序_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Visual C+Visual C+第第8章章 利用利用CDC類實(shí)現(xiàn)繪圖程序類實(shí)現(xiàn)繪圖程序?qū)W習(xí)目標(biāo):學(xué)習(xí)目標(biāo):n了解了解MFC類庫中實(shí)現(xiàn)繪圖功能的類類庫中實(shí)現(xiàn)繪圖功能的類: 設(shè)備環(huán)設(shè)備環(huán)境類境類(CDC,C Device Context類)類)n學(xué)會(huì)使用學(xué)會(huì)使用CDC類中文本的輸出函數(shù)類中文本的輸出函數(shù) (包括文本的字體、顏色和屬性控制)(包括文本的字體、顏色和屬性控制)n掌握掌握CDC類中繪制圖形的函數(shù)類中繪制圖形的函數(shù) (包括點(diǎn)、線、橢圓、矩形和弧等)(包括點(diǎn)、線、橢圓、矩形和弧等)n掌握掌握CDC類中各種繪圖工具類中各種繪圖工具(畫筆、畫刷)(畫筆、畫刷) 的使用的使用n掌握位圖的使用掌

2、握位圖的使用 Visual C+Visual C+ 主要內(nèi)容主要內(nèi)容 8.1 圖形繪制的基本知識(shí)圖形繪制的基本知識(shí) 8.2 CDC的文本輸出操作的文本輸出操作 8.3 CDC的繪圖操作的繪圖操作 8.4 Windows繪圖工具繪圖工具 8.5 位圖的加載與顯示位圖的加載與顯示Visual C+Visual C+8.1.18.1.1一個(gè)簡單的圖形程序一個(gè)簡單的圖形程序 MFC繪制圖形程序的過程:繪制圖形程序的過程: 首先首先利用利用MFC AppWizard向?qū)蓱?yīng)向?qū)蓱?yīng)用程序框架用程序框架(哪些類哪些類);編寫界面繪圖的代碼編寫界面繪圖的代碼,放到放到MFC應(yīng)用程序應(yīng)用程序架構(gòu)中。架構(gòu)中

3、。(注意添加代碼的位置(注意添加代碼的位置) )Visual C+Visual C+【例【例8-1】利用】利用MFC編寫一個(gè)簡單的繪圖程序編寫一個(gè)簡單的繪圖程序1.利用利用AppWizard生成應(yīng)用程序架構(gòu)生成應(yīng)用程序架構(gòu)(1)啟動(dòng))啟動(dòng)VC6.0,選擇選擇“File”菜單的菜單的“New”命令,在命令,在彈出的彈出的“New”對(duì)話框中選擇對(duì)話框中選擇“Project”選項(xiàng)卡。在該選項(xiàng)卡。在該選項(xiàng)卡的列表中選擇選項(xiàng)卡的列表中選擇“MFC AppWizard(exe)”項(xiàng),在項(xiàng),在“Project Name”編輯框中輸入要?jiǎng)?chuàng)建的工程名稱編輯框中輸入要?jiǎng)?chuàng)建的工程名稱SingleDraw,在在“Lo

4、cation”編輯框中設(shè)置工程的存編輯框中設(shè)置工程的存放位置,單擊放位置,單擊“OK”按鈕。按鈕。(2)在彈出的)在彈出的“MFC AppWizard-Step1” 對(duì)話框中選對(duì)話框中選擇擇“single document”,即應(yīng)用程序的類型為單文檔即應(yīng)用程序的類型為單文檔模式,然后單擊模式,然后單擊“Finish”按鈕。按鈕。(3)在彈出的)在彈出的“New Project information” 對(duì)話框中對(duì)話框中單擊單擊“OK”按鈕,完成應(yīng)用程序框架的創(chuàng)建。按鈕,完成應(yīng)用程序框架的創(chuàng)建。 Visual C+Visual C+ 2應(yīng)用程序架構(gòu)包含的主要類應(yīng)用程序架構(gòu)包含的主要類 該程序主要

5、包含的類有該程序主要包含的類有CAboutDlg關(guān)關(guān)于對(duì)話框類、于對(duì)話框類、CMainFrame主框架類、主框架類、CSingleDrawDoc文檔類、文檔類、CSingleDrawView視圖類。視圖類。 有關(guān)繪制功能的實(shí)現(xiàn),一般是在視圖類有關(guān)繪制功能的實(shí)現(xiàn),一般是在視圖類中完成,因此,這一章的實(shí)例都是對(duì)視中完成,因此,這一章的實(shí)例都是對(duì)視圖類圖類CSingleDrawView的操作。的操作。 Visual C+Visual C+ 3將代碼放到將代碼放到MFC的某個(gè)類的虛函數(shù)或消息映的某個(gè)類的虛函數(shù)或消息映射函數(shù)中射函數(shù)中 繪圖功能的實(shí)現(xiàn),一般要超載視圖類的繪圖功能的實(shí)現(xiàn),一般要超載視圖類的

6、OnDraw()虛函數(shù),虛函數(shù),打開打開WorkSpace的的ClassView選項(xiàng)卡,展開選項(xiàng)卡,展開CSingleDrawView視圖類,可以看到視圖類,可以看到該類中有一個(gè)虛該類中有一個(gè)虛函數(shù)函數(shù)OnDraw(),雙擊該函數(shù),就把光標(biāo)定位到該函數(shù)雙擊該函數(shù),就把光標(biāo)定位到該函數(shù)的實(shí)現(xiàn)處,在其中編寫代碼如下:的實(shí)現(xiàn)處,在其中編寫代碼如下: void CSingleDrawView:OnDraw(CDC* pDC)CSingleDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDC-TextOut(100,100,“在視圖類的在視圖類的 On

7、Draw虛函數(shù)中輸出的最簡單的一個(gè)圖虛函數(shù)中輸出的最簡單的一個(gè)圖 形程序形程序); Visual C+Visual C+4運(yùn)行程序運(yùn)行程序 編譯并運(yùn)行該程序(按編譯并運(yùn)行該程序(按Ctrl+F5熱鍵),熱鍵),在屏幕上顯示了一行文本。利用在屏幕上顯示了一行文本。利用MFC的應(yīng)用程序的應(yīng)用程序向?qū)?,我們僅寫了一行代碼,就完成了一個(gè)簡單向?qū)?,我們僅寫了一行代碼,就完成了一個(gè)簡單的圖形程序的圖形程序輸出文本圖形。輸出文本圖形。 Visual C+Visual C+8.1.2 圖形操作的接口圖形操作的接口GDI Windows中繪制的各種圖形(點(diǎn)、線、中繪制的各種圖形(點(diǎn)、線、圓、多邊形、矩形等)都是

8、與設(shè)備無關(guān)的圓、多邊形、矩形等)都是與設(shè)備無關(guān)的,即在屏幕的窗口內(nèi)繪圖與在打印機(jī)上繪圖即在屏幕的窗口內(nèi)繪圖與在打印機(jī)上繪圖是相似的。是相似的。 GDI(Graphic Device Interface)是是Windows提供的繪圖接口,它接收應(yīng)用程提供的繪圖接口,它接收應(yīng)用程序的繪圖請(qǐng)求(表現(xiàn)為序的繪圖請(qǐng)求(表現(xiàn)為GDI調(diào)用),并將它調(diào)用),并將它們傳送給相應(yīng)的設(shè)備驅(qū)動(dòng)程序,再由設(shè)備們傳送給相應(yīng)的設(shè)備驅(qū)動(dòng)程序,再由設(shè)備驅(qū)動(dòng)程序驅(qū)動(dòng)相應(yīng)的硬件設(shè)備,如打印機(jī)驅(qū)動(dòng)程序驅(qū)動(dòng)相應(yīng)的硬件設(shè)備,如打印機(jī)或顯示器輸出?;蝻@示器輸出。Visual C+Visual C+8.1.3 MFC中的中的CDC類類 1.

9、 MFC中的中的CDC類類 CDC (C Device Context)類類它封裝了它封裝了GDI函數(shù)函數(shù)。所有的繪圖操作都是。所有的繪圖操作都是直接或間接運(yùn)用了直接或間接運(yùn)用了CDC的的成員函數(shù)成員函數(shù),這些函數(shù)有的是用來畫圖的,有的函數(shù)是,這些函數(shù)有的是用來畫圖的,有的函數(shù)是用來獲取或設(shè)置繪圖屬性。用來獲取或設(shè)置繪圖屬性。 在由在由AppWizard創(chuàng)建的創(chuàng)建的MFC應(yīng)用程序中,視圖類的應(yīng)用程序中,視圖類的OnDraw成員函數(shù)是一個(gè)處理圖形的函數(shù),它帶有一成員函數(shù)是一個(gè)處理圖形的函數(shù),它帶有一個(gè)指向設(shè)備環(huán)境對(duì)象的指針個(gè)指向設(shè)備環(huán)境對(duì)象的指針pDC,MFC的繪圖成大多的繪圖成大多都是通過都是

10、通過pDC這個(gè)指針來加以訪問的。這個(gè)指針來加以訪問的。 Visual C+Visual C+2設(shè)備描述表(設(shè)備描述表(Device Context) 設(shè)備描述表是設(shè)備描述表是Windows系統(tǒng)下的一系統(tǒng)下的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來保存顯示圖形所需要的個(gè)數(shù)據(jù)結(jié)構(gòu),用來保存顯示圖形所需要的各種參數(shù)值,如顯示顏色、顯示坐標(biāo)、顯各種參數(shù)值,如顯示顏色、顯示坐標(biāo)、顯示方式和背景顏色。示方式和背景顏色。Visual C+Visual C+CDCCDC類成員函數(shù)分類類成員函數(shù)分類 用途用途 位圖函數(shù)位圖函數(shù) 操作位圖和像素的函數(shù)操作位圖和像素的函數(shù) 剪裁函數(shù)剪裁函數(shù) 定義和操作剪裁設(shè)備邊界的函數(shù)定義和操作剪裁設(shè)備

11、邊界的函數(shù)坐標(biāo)函數(shù)坐標(biāo)函數(shù) 在物理設(shè)備和邏輯設(shè)備之間轉(zhuǎn)換的函數(shù)在物理設(shè)備和邏輯設(shè)備之間轉(zhuǎn)換的函數(shù) 設(shè)備描述表函數(shù)設(shè)備描述表函數(shù) 獲取有關(guān)獲取有關(guān)DCDC及其屬性信息的函數(shù)及其屬性信息的函數(shù)繪圖屬性函數(shù)繪圖屬性函數(shù) 為為DCDC獲取和設(shè)置顏色及模式的函數(shù)獲取和設(shè)置顏色及模式的函數(shù) 繪圖工具函數(shù)繪圖工具函數(shù) 枚舉在枚舉在DCDC中可用的筆和刷子的函數(shù)中可用的筆和刷子的函數(shù) 橢圓和多邊形函數(shù)橢圓和多邊形函數(shù)繪制橢圓和多邊形函數(shù)繪制橢圓和多邊形函數(shù)字體函數(shù)字體函數(shù) 獲取字體屬性的函數(shù)獲取字體屬性的函數(shù)線輸出函數(shù)線輸出函數(shù)在在DCDC上繪制線的函數(shù)上繪制線的函數(shù)映像函數(shù)映像函數(shù)創(chuàng)建、獲取和控制原點(diǎn),擴(kuò)展

12、窗口和視及為創(chuàng)建、獲取和控制原點(diǎn),擴(kuò)展窗口和視及為DCDC獲取和設(shè)置映像模式的函數(shù)獲取和設(shè)置映像模式的函數(shù)區(qū)域函數(shù)區(qū)域函數(shù) 填充區(qū)域和控制區(qū)域顏色的函數(shù)填充區(qū)域和控制區(qū)域顏色的函數(shù) 簡單繪圖函數(shù)簡單繪圖函數(shù)提供簡單矩形和圖標(biāo)的繪制特性函數(shù)提供簡單矩形和圖標(biāo)的繪制特性函數(shù) 文本函數(shù)文本函數(shù) 輸出文本并獲取輸出文本并獲取DCDC當(dāng)前選中的字體信息的函數(shù)當(dāng)前選中的字體信息的函數(shù) Visual C+Visual C+8.1.4 CDC的派生子類的派生子類CObjectCObjectCDCCDCCPaintDCCPaintDCCClientDCCClientDCCWindowDC CWindowDC C

13、MetaFileDCCMetaFileDCVisual C+Visual C+8.1.4 CDC的派生子類的派生子類 1派生類派生類CPaintDC(客戶區(qū)客戶區(qū))CPaintDC是從是從CDC派生出來的類,它代表了派生出來的類,它代表了應(yīng)用程序窗口的客戶區(qū)。一般用在應(yīng)用程序窗口的客戶區(qū)。一般用在CView類的類的OnDraw函數(shù)中進(jìn)行各種圖形處理,該函數(shù)聲函數(shù)中進(jìn)行各種圖形處理,該函數(shù)聲明為:明為:OnDraw(CDC* pDC)應(yīng)用程序窗口在每次創(chuàng)建及刷新時(shí)都會(huì)發(fā)送應(yīng)用程序窗口在每次創(chuàng)建及刷新時(shí)都會(huì)發(fā)送WM_PAINT消息,該消息將自動(dòng)調(diào)用響應(yīng)函消息,該消息將自動(dòng)調(diào)用響應(yīng)函數(shù)數(shù)OnDraw

14、(CDC* pDC ),),這個(gè)這個(gè)pDC指針就是指向指針就是指向CPaintDC對(duì)象的指針,在函數(shù)中就可以調(diào)用該類的成對(duì)象的指針,在函數(shù)中就可以調(diào)用該類的成員函數(shù)來繪制圖形了員函數(shù)來繪制圖形了。Visual C+Visual C+ 2派生類派生類CClientDC(客戶區(qū)客戶區(qū)) CClientDC類由類由CDC派生而來,派生而來, 也只能在客戶區(qū)也只能在客戶區(qū)繪圖繪圖。除了可以響應(yīng)。除了可以響應(yīng)WM_PAINT消息外,還可消息外,還可以響應(yīng)其他消息,包括用戶定義的消息。以響應(yīng)其他消息,包括用戶定義的消息。 在使用在使用CClientDC類進(jìn)行繪圖時(shí),一般要調(diào)用類進(jìn)行繪圖時(shí),一般要調(diào)用Get

15、ClientRect()函數(shù)來獲取客戶區(qū)域的大小。函數(shù)來獲取客戶區(qū)域的大小。Visual C+Visual C+ 3派生類派生類CWindowDC(整個(gè)窗口整個(gè)窗口) CWindowDC類直接從類直接從CDC派生,該類可以在派生,該類可以在顯示器的任意位置繪圖(包括客戶區(qū)和非客戶區(qū))顯示器的任意位置繪圖(包括客戶區(qū)和非客戶區(qū)) ,坐標(biāo)原點(diǎn)在整個(gè)窗口的左上角坐標(biāo)原點(diǎn)在整個(gè)窗口的左上角。由于使用。由于使用CWindowDC可以在整個(gè)窗口類繪圖,這給了程序可以在整個(gè)窗口類繪圖,這給了程序員很大的自由度,但使用不當(dāng)會(huì)帶來麻煩。員很大的自由度,但使用不當(dāng)會(huì)帶來麻煩。 在使用在使用CWindowDC進(jìn)行繪

16、圖時(shí),一般要調(diào)用進(jìn)行繪圖時(shí),一般要調(diào)用GetWindowRect函數(shù)來獲取整個(gè)應(yīng)用程序窗口區(qū)函數(shù)來獲取整個(gè)應(yīng)用程序窗口區(qū)域的大小。域的大小。 Visual C+Visual C+ 4派生類派生類CMetaFileDC(圖元文件)(圖元文件) CWindowDC類直接從類直接從CDC派生,該類用在創(chuàng)派生,該類用在創(chuàng)建與設(shè)備無關(guān)的并且可以回放的圖像時(shí)使用。建與設(shè)備無關(guān)的并且可以回放的圖像時(shí)使用。 Visual C+Visual C+8.2 VC的文本操作的文本操作 文本輸出函數(shù)文本輸出函數(shù) 文本屬性控制文本屬性控制 文本的字體文本的字體 文本處理實(shí)例文本處理實(shí)例Visual C+Visual C+

17、1 文本輸出函數(shù)文本輸出函數(shù)1 1)文本輸出函數(shù))文本輸出函數(shù)TextOutTextOut()()函數(shù)原型:函數(shù)原型: BOOL TextOut( HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString);功能功能:在屏幕的指定位置處顯示字符串。:在屏幕的指定位置處顯示字符串。參數(shù)說明:參數(shù)說明:hdchdc是設(shè)備環(huán)境句柄,是設(shè)備環(huán)境句柄,nXStartnXStart與與n Y S t a r tn Y S t a r t 為 指 定 正 文 開 始 繪 制 的 邏 輯 坐 標(biāo)為 指 定 正 文 開 始 繪 制 的 邏

18、 輯 坐 標(biāo) , , lpStringlpString是包含將繪制的正文字符串,是包含將繪制的正文字符串,cbStringcbString為為待輸出的文本中所含字符的個(gè)數(shù)待輸出的文本中所含字符的個(gè)數(shù)。Visual C+Visual C+2.在給定的矩形區(qū)域內(nèi)的文本輸出函數(shù)在給定的矩形區(qū)域內(nèi)的文本輸出函數(shù)BOOL ExtTextOut( int x, int y; /輸出的位置輸出的位置 UINT nOptions;/指定矩形的類型指定矩形的類型 LPCRECT lpRect;/輸出的字符的矩形區(qū)域輸出的字符的矩形區(qū)域 const CString& str;/欲輸出的字符欲輸出的字符 L

19、PINT lpDxWidths ;/字符間距字符間距);功能說明:功能說明:該函數(shù)用來在一個(gè)給定的矩形該函數(shù)用來在一個(gè)給定的矩形lpRect區(qū)區(qū)域內(nèi)輸出字符串域內(nèi)輸出字符串str,此矩形可以設(shè)置為透明的(此矩形可以設(shè)置為透明的(nOptions=ETO_OPAQUE)或不透明的,當(dāng)矩形或不透明的,當(dāng)矩形區(qū)域?yàn)椴煌该鲿r(shí),用當(dāng)前的背景色填充矩形。區(qū)域?yàn)椴煌该鲿r(shí),用當(dāng)前的背景色填充矩形。Visual C+Visual C+8.2.2 文本屬性控制文本屬性控制 1 設(shè)置文本的背景色函數(shù)設(shè)置文本的背景色函數(shù)SetBkColor()()缺省時(shí),文本和繪圖的背景顏色是白色。缺省時(shí),文本和繪圖的背景顏色是白色

20、。SetBkColor函數(shù)可以設(shè)置新的背景顏色,函數(shù)可以設(shè)置新的背景顏色,函數(shù)原型為:函數(shù)原型為: Virtual COLORREF SetBkColor(COLORREF crcolor); 其中,參數(shù)其中,參數(shù)crcolor用于指定新的背景顏色。用于指定新的背景顏色。例如:要將背景顏色設(shè)為紅色,可以用以下語例如:要將背景顏色設(shè)為紅色,可以用以下語句:句: SetBkColor(RGB(255,0,0);Visual C+Visual C+ 2控制文本的背景色控制文本的背景色可用函數(shù)可用函數(shù)SetBkMode來設(shè)置背景模式,它設(shè)置來設(shè)置背景模式,它設(shè)置當(dāng)前的背景模式并返回原來的背景模式,該函

21、數(shù)當(dāng)前的背景模式并返回原來的背景模式,該函數(shù)的原型為:的原型為: int SetBkMode(int nBkMode); 參數(shù)參數(shù)nkbmode指定背景模式,其值可以是指定背景模式,其值可以是OPAQUE或者或者TRANSPARENT,如果值為如果值為OPAQUE,則顯示時(shí)背景都改變?yōu)楫?dāng)前背景顏色。則顯示時(shí)背景都改變?yōu)楫?dāng)前背景顏色。如果值為如果值為TRANSPARENT,則不改變背景顏色則不改變背景顏色.Visual C+Visual C+ 3設(shè)置文本的排列方式設(shè)置文本的排列方式利用利用CDC的成員函數(shù)的成員函數(shù)SetTextAlign函數(shù)實(shí)現(xiàn)文函數(shù)實(shí)現(xiàn)文本的排列方式,函數(shù)原型為:本的排列方式

22、,函數(shù)原型為: UINT SetTextAlign (UINT nFlags); 其中,其中,nFlags為文本的對(duì)齊方式,其值如下:為文本的對(duì)齊方式,其值如下:TA_LEFT 將點(diǎn)同邊界矩形的水平中心對(duì)齊將點(diǎn)同邊界矩形的水平中心對(duì)齊TA_BASELINES 將點(diǎn)同所選字體的基線對(duì)將點(diǎn)同所選字體的基線對(duì)TA_BOTTOM 將點(diǎn)同邊界矩形的底線對(duì)齊將點(diǎn)同邊界矩形的底線對(duì)齊 Visual C+Visual C+ 4設(shè)置文本的字體顏色設(shè)置文本的字體顏色 利用利用CDC的成員函數(shù)的成員函數(shù)SetTextColor函數(shù)實(shí)現(xiàn)設(shè)函數(shù)實(shí)現(xiàn)設(shè)置文本的字體顏色,函數(shù)原型為:置文本的字體顏色,函數(shù)原型為: virt

23、ual COLORREF SetTextColor( COLORREF crColor ); 其中,其中, crColor 為為RGB顏色值顏色值例如:將字體設(shè)為藍(lán)色例如:將字體設(shè)為藍(lán)色 SetTextColor(RGB(0,0,255);Visual C+Visual C+8.2.3文本的字體文本的字體 字體反映了字符外觀特性,如漢字有宋體、字體反映了字符外觀特性,如漢字有宋體、楷體、黑體等,西文也有字體如楷體、黑體等,西文也有字體如Arial、Roman等,等,同一個(gè)字符以不同的字體輸出時(shí)同一個(gè)字符以不同的字體輸出時(shí)外觀會(huì)不太一樣外觀會(huì)不太一樣。VC提供了豐富的字體控制提供了豐富的字體控制

24、功能,不僅功能,不僅可以使用可以使用Windows提供的字體,提供的字體,還可以自己創(chuàng)建字體還可以自己創(chuàng)建字體,這使得,這使得Windows下文下文本輸出具有很大的靈活性,可以最大限度地滿本輸出具有很大的靈活性,可以最大限度地滿足用戶對(duì)復(fù)雜文本的輸出要求。足用戶對(duì)復(fù)雜文本的輸出要求。Visual C+Visual C+8.2.3續(xù)續(xù)1 1使用庫存字體使用庫存字體 Windows系統(tǒng)本身提供了一些庫存字體,對(duì)于大多系統(tǒng)本身提供了一些庫存字體,對(duì)于大多數(shù)應(yīng)用程序,使用庫存字體即可完成基本的文本輸出功數(shù)應(yīng)用程序,使用庫存字體即可完成基本的文本輸出功能。能。 要想使用庫存字體,需要使用要想使用庫存字體

25、,需要使用CDC的成員函數(shù)的成員函數(shù)SelectStockObject()來完成,例如:來完成,例如: SelectStockObject(OEM_FIXED_FONT); 該語句把終端字體選入設(shè)備環(huán)境,這樣,用該語句把終端字體選入設(shè)備環(huán)境,這樣,用TextOut輸出文本時(shí),將使用輸出文本時(shí),將使用DOS命令窗口的字體。命令窗口的字體。其實(shí),每個(gè)設(shè)備環(huán)境都有一個(gè)缺省字體,對(duì)于顯示器其實(shí),每個(gè)設(shè)備環(huán)境都有一個(gè)缺省字體,對(duì)于顯示器而言,缺省字體就是而言,缺省字體就是SYSTEM_FONT系統(tǒng)字體,如系統(tǒng)字體,如果應(yīng)用程序不需要執(zhí)行很復(fù)雜的文本輸出,使用缺省果應(yīng)用程序不需要執(zhí)行很復(fù)雜的文本輸出,使用

26、缺省字體即可。字體即可。Visual C+Visual C+字體名稱字體名稱 說明說明ANSI_FIXED_FONANSI_FIXED_FONTT 基于基于WindowsWindows字符集的固定字寬的字體,通常使用字符集的固定字寬的字體,通常使用CourierCourier字體字體 ANSI_VAR_FONTANSI_VAR_FONT基于基于WindowsWindows字符集的變寬字體,通常使用字符集的變寬字體,通常使用Ms Sans SerifMs Sans Serif字體字體 DEVICE_DEFAULT_DEVICE_DEFAULT_FONTFONT特定設(shè)備的缺省字體。該字體取決于特定

27、設(shè)備的缺省字體。該字體取決于GDIGDI字體的映射程序如何字體的映射程序如何解釋字體請(qǐng)求,因此對(duì)于不同的設(shè)備,其字體寬度可能不同解釋字體請(qǐng)求,因此對(duì)于不同的設(shè)備,其字體寬度可能不同 OEM_FIXED_FONTOEM_FIXED_FONTWindowsWindows在在DOSDOS命令提示窗口中使用的字體,又稱終端字體,它命令提示窗口中使用的字體,又稱終端字體,它是一種固定寬度的字體,隨系統(tǒng)的不同而不同是一種固定寬度的字體,隨系統(tǒng)的不同而不同 SYSTEM_FONTSYSTEM_FONT系統(tǒng)字體,是基于系統(tǒng)字體,是基于windowswindows字符集的變寬字體。系統(tǒng)使用該字字符集的變寬字體。

28、系統(tǒng)使用該字體來顯示窗口的標(biāo)題、菜單和對(duì)話框中的文本。系統(tǒng)字符集總體來顯示窗口的標(biāo)題、菜單和對(duì)話框中的文本。系統(tǒng)字符集總是可用的,而其他字符集則需要安裝后才可使用是可用的,而其他字符集則需要安裝后才可使用 WindowsWindows庫存字體庫存字體Visual C+Visual C+8.2.3續(xù)續(xù)2 2使用自定義字體使用自定義字體 CFont類類 CreatePointFont(120, “Arial”, &dc);/初始初始化邏輯字體的函數(shù)化邏輯字體的函數(shù) dc.SelectObject(&font); /將新建的字體將新建的字體font選入設(shè)備環(huán)境選入設(shè)備環(huán)境Visual

29、 C+Visual C+8.2.3續(xù)續(xù)3下面為使用該函數(shù)的典型代碼:下面為使用該函數(shù)的典型代碼: CClientDC dc(this);/聲明客戶區(qū)設(shè)備環(huán)境變量聲明客戶區(qū)設(shè)備環(huán)境變量dc CFont font; /聲明邏輯字體變量聲明邏輯字體變量font font.CreatePointFont(120, “Arial”, &dc);/初始初始化邏輯字體化邏輯字體 CFont* def_font = dc.SelectObject(&font); /將將新建的字體新建的字體font選入設(shè)備環(huán)境選入設(shè)備環(huán)境 dc.TextOut(5, 5, Hello, 5); /以所建的字體顯

30、示以所建的字體顯示hello dc.SelectObject(def_font); /恢復(fù)舊字體恢復(fù)舊字體 font.DeleteObject(); /刪除所建立的字體刪除所建立的字體 Visual C+Visual C+8.2.4 文本處理實(shí)例文本處理實(shí)例 【例例8-2】利用】利用MFC編寫文本處理的應(yīng)用程序。編寫文本處理的應(yīng)用程序。 1程序功能描述程序功能描述 使用庫存字體和自定義字體,設(shè)置文本的前景色、使用庫存字體和自定義字體,設(shè)置文本的前景色、背景色、對(duì)齊方式、背景模式,利用背景色、對(duì)齊方式、背景模式,利用TextOut和和ExtTextOut函數(shù)在屏幕上輸出文本。函數(shù)在屏幕上輸出文本

31、。2利用利用MFC AppWizard(exe)創(chuàng)建程序步驟創(chuàng)建程序步驟(1)運(yùn)行)運(yùn)行VC6.0,在在File菜單中選擇菜單中選擇New命令,在打開的命令,在打開的New對(duì)話框中選中對(duì)話框中選中Projects標(biāo)簽,在左邊的列表框中選標(biāo)簽,在左邊的列表框中選擇擇MFC AppWizard(exe)選項(xiàng),在右邊的選項(xiàng),在右邊的Project name文本框中輸入工程名文本框中輸入工程名TextTest,并選擇合適的路徑。并選擇合適的路徑。Visual C+Visual C+【例【例8-2】續(xù)】續(xù)1(2)單擊)單擊OK按鈕,啟動(dòng)按鈕,啟動(dòng)AppWizard,在第在第一步中選擇一步中選擇Singl

32、e Document單選按鈕。單選按鈕。(3)從第)從第2步到第步到第6步使用缺省選項(xiàng),最后生步使用缺省選項(xiàng),最后生成工程成工程TextTest。 3編輯視圖類編輯視圖類CTextTestView 中的中的OnDraw函函數(shù),實(shí)現(xiàn)文本的各種屬性控制及輸出。附數(shù),實(shí)現(xiàn)文本的各種屬性控制及輸出。附CTextTestView.txtVisual C+Visual C+8.3 CDC的繪圖操作的繪圖操作 8.3.1 畫點(diǎn)與畫線函數(shù)操作畫點(diǎn)與畫線函數(shù)操作 8.3.2 繪制封閉圖形繪制封閉圖形 8.3.3 設(shè)置繪圖參數(shù)設(shè)置繪圖參數(shù)8.3.4 繪圖模式繪圖模式 8.3.5 繪圖操作實(shí)例繪圖操作實(shí)例Visua

33、l C+Visual C+8.3.1 畫點(diǎn)與畫線函數(shù)操作畫點(diǎn)與畫線函數(shù)操作1畫點(diǎn)函數(shù)畫點(diǎn)函數(shù)SetPixel()() CDC的成員函數(shù)的成員函數(shù)SetPixel用來在指定位置上繪制一個(gè)用來在指定位置上繪制一個(gè)特定的像素點(diǎn),其原型為:特定的像素點(diǎn),其原型為:COLORREF SetPixel( POINT point, COLORREF crColor ); 其中參數(shù)其中參數(shù)point指定所繪制的點(diǎn),指定所繪制的點(diǎn),crColor指定畫點(diǎn)所指定畫點(diǎn)所用的顏色。用的顏色。例如:例如:pDC- SetPixel(CPoint(100,100),RGB(255,0,0);Visual C+Visual

34、 C+2畫直線函數(shù)畫直線函數(shù)LineTo( ) 畫直線時(shí)先用到畫直線時(shí)先用到MoveTo()函數(shù)函數(shù),將畫筆的坐將畫筆的坐標(biāo)移至某一點(diǎn)。標(biāo)移至某一點(diǎn)。例如:例如:MoveTo(20,20);); LineTo( )函數(shù)用于畫一條直線。函數(shù)用于畫一條直線。例如:例如:LineTo(100,100); 即從起點(diǎn)(即從起點(diǎn)(20,20)處畫一條直線至終點(diǎn))處畫一條直線至終點(diǎn)(100,100)處。)處。如何畫一個(gè)菱形?如何畫一個(gè)菱形?Visual C+Visual C+8.3.1 續(xù)續(xù)1 3畫弧線畫弧線 使用使用CDC的成員函數(shù)的成員函數(shù)Arc和和ArcTo,可以用缺省的筆畫一段不填可以用缺省的筆畫一

35、段不填充的橢圓弧。充的橢圓弧。Arc函數(shù)的原型如下:函數(shù)的原型如下: BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); 這兩個(gè)函數(shù)畫弧成功返回非這兩個(gè)函數(shù)畫弧成功返回非0,否則返回,否則返回0,函數(shù)中各參數(shù)的含義,函數(shù)中各參數(shù)的含義如下:如下:參數(shù)參數(shù)x1與與y1為包圍弧的矩形的左上角為包圍弧的矩形的左上角x、y坐標(biāo);坐標(biāo);x2與與y2為包圍弧為包圍弧的矩形的右下角的矩形的右下角x、

36、y坐標(biāo);坐標(biāo);x3與與y3為弧的起點(diǎn)為弧的起點(diǎn)x、y坐標(biāo);坐標(biāo);x與與y為弧的終點(diǎn)為弧的終點(diǎn)x、y坐標(biāo)。坐標(biāo)。 參數(shù)參數(shù)lpRect表示圍繞弧的矩形表示圍繞弧的矩形,它可以是,它可以是LPRECT 或或CRect對(duì)象,對(duì)象,ptStart表示弧的起點(diǎn)的表示弧的起點(diǎn)的CPoint 或或POINT對(duì)象,該點(diǎn)不必精確地位對(duì)象,該點(diǎn)不必精確地位于弧上;于弧上;PtEnd表示弧的終點(diǎn)表示弧的終點(diǎn)的的CPoint 或或POINT對(duì)象,該點(diǎn)不必精對(duì)象,該點(diǎn)不必精確地位于弧上。確地位于弧上。Visual C+Visual C+8.3.2 繪制封閉圖形繪制封閉圖形 Windows提供了提供了Rectangle、

37、Ellipse、RoundRect、Chord、Pie等五個(gè)函數(shù)用來繪制并填充圖形。等五個(gè)函數(shù)用來繪制并填充圖形。1畫矩形畫矩形BOOL Rectangle( int x1, int y1, int x2, int y2 );BOOL Rectangle( LPCRECT lpRect ); 此函數(shù)成功調(diào)用后返回非此函數(shù)成功調(diào)用后返回非0值,否則返回值,否則返回0。其中參數(shù)。其中參數(shù)(x1,y1)為指定矩形的左上角邏輯為指定矩形的左上角邏輯x與與y坐標(biāo);(坐標(biāo);(x2,y2)為指定矩形右下角為指定矩形右下角的邏輯的邏輯x與與y坐標(biāo)。參數(shù)坐標(biāo)。參數(shù)LpRect為一個(gè)矩形結(jié)構(gòu)的指針,用它來表示為一

38、個(gè)矩形結(jié)構(gòu)的指針,用它來表示矩形的四個(gè)角。矩形的四個(gè)角。2畫橢圓或圓畫橢圓或圓 使用使用CDC的成員函數(shù)的成員函數(shù)Ellipse,可以使用當(dāng)前筆繪制一個(gè)用當(dāng)前可以使用當(dāng)前筆繪制一個(gè)用當(dāng)前畫刷填充的橢圓或圓。其函數(shù)原型如下:畫刷填充的橢圓或圓。其函數(shù)原型如下:Visual C+Visual C+8.3.2 續(xù)續(xù)1BOOL Ellipse(int x1, int y1, int x2, int y2 );BOOL Ellipse( LPCRECT lpRect ); 這兩個(gè)函數(shù)畫橢圓成功后返回非這兩個(gè)函數(shù)畫橢圓成功后返回非0值,否則返回值,否則返回0。所畫橢圓高度為。所畫橢圓高度為y2-y1,寬度

39、為寬度為x2-x1。在該函數(shù)中,橢圓是由其外接矩形來確定的。外在該函數(shù)中,橢圓是由其外接矩形來確定的。外接矩形的中心與橢圓中心重合,矩形的長和寬和橢圓的長短軸相等。函接矩形的中心與橢圓中心重合,矩形的長和寬和橢圓的長短軸相等。函數(shù)中的參數(shù)與畫矩形的相仿,分別表示橢圓外接矩形的左上角和右下角數(shù)中的參數(shù)與畫矩形的相仿,分別表示橢圓外接矩形的左上角和右下角坐標(biāo)。坐標(biāo)。3畫圓角矩形畫圓角矩形BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 ); 該函數(shù)用于繪制一個(gè)圓角矩形,并用當(dāng)前的畫刷來填充該圓角矩該函數(shù)用于繪制一個(gè)圓角矩形

40、,并用當(dāng)前的畫刷來填充該圓角矩形的內(nèi)部區(qū)域。其中參數(shù)形的內(nèi)部區(qū)域。其中參數(shù)(x1,y1)為指定矩形的左上角位置為指定矩形的左上角位置x與與y坐標(biāo);坐標(biāo);(x2,y2)為指定矩形右下角位置為指定矩形右下角位置x與與y坐標(biāo),坐標(biāo),(x3,y3)用于定義矩形四用于定義矩形四個(gè)角上的邊角內(nèi)切橢圓的寬度和高度個(gè)角上的邊角內(nèi)切橢圓的寬度和高度,值越大,圓角矩形的角就越明顯。,值越大,圓角矩形的角就越明顯。如果如果x3=x2-x1,并且并且y3=y2-y1,則所繪制的圓角矩形變?yōu)橐粋€(gè)橢圓。則所繪制的圓角矩形變?yōu)橐粋€(gè)橢圓。Visual C+Visual C+8.3.2 續(xù)續(xù)24 畫餅圖扇形畫餅圖扇形餅圖是一條

41、弧和從弧的兩個(gè)端點(diǎn)到中心的連線組成的圖形。餅圖是一條弧和從弧的兩個(gè)端點(diǎn)到中心的連線組成的圖形。CDC的成員函數(shù)的成員函數(shù)Pie可用于畫餅圖,函數(shù)原型如下:可用于畫餅圖,函數(shù)原型如下:BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); 該函數(shù)的參數(shù)與該函數(shù)的參數(shù)與Arc函數(shù)的參數(shù)的含義相仿,只不過函數(shù)的參數(shù)的含義相仿,只不過Pie函數(shù)畫的函數(shù)畫的是封閉圖形,是封閉圖形,Arc畫的是非封閉圖

42、形。各參數(shù)參見畫的是非封閉圖形。各參數(shù)參見8.3.1節(jié)介紹。節(jié)介紹。5 畫弓形畫弓形弓形圖是一條橢圓弧和連接該弧線兩個(gè)端點(diǎn)的弦,并用當(dāng)前的畫弓形圖是一條橢圓弧和連接該弧線兩個(gè)端點(diǎn)的弦,并用當(dāng)前的畫刷來填充其內(nèi)部區(qū)域的封閉圖形。刷來填充其內(nèi)部區(qū)域的封閉圖形。Chord原型如下:原型如下:BOOL Chord( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); 該函數(shù)參數(shù)與該函數(shù)參數(shù)與Pie函數(shù)參數(shù)的含義相仿。函數(shù)參數(shù)的含義相仿。 Visual C+Visual C+8.3.4 繪圖模式繪圖模式 當(dāng)當(dāng)Windows使

43、用畫筆畫線時(shí),它實(shí)際上是在畫筆像素和目使用畫筆畫線時(shí),它實(shí)際上是在畫筆像素和目標(biāo)位置處原像素之間執(zhí)行一種按位布爾運(yùn)算,稱為標(biāo)位置處原像素之間執(zhí)行一種按位布爾運(yùn)算,稱為“光柵操光柵操作作”(Raster Operation),簡記為簡記為“ROP”。由于畫線操作由于畫線操作只涉及兩種像素(畫筆像素和目標(biāo)像素),所以這種布爾運(yùn)只涉及兩種像素(畫筆像素和目標(biāo)像素),所以這種布爾運(yùn)算又稱為算又稱為“二元光柵操作二元光柵操作”(ROP2)。Windows定義了定義了16種種ROP2碼,用來表示畫筆像素和目標(biāo)像素各種不同的組合方式。碼,用來表示畫筆像素和目標(biāo)像素各種不同的組合方式。可以調(diào)用可以調(diào)用CDC的

44、成員函數(shù)的成員函數(shù)SetROP2改變繪圖模式,函數(shù)原型改變繪圖模式,函數(shù)原型為:為:int SetROP2(int nDrawMode); 參數(shù)參數(shù)nDrawMode指定所要求的繪圖模式指定所要求的繪圖模式 Visual C+Visual C+注意注意:(1) 在畫線時(shí)在畫線時(shí),如果繪圖模式為如果繪圖模式為R2_NOT,則畫出的線的顏色為原先則畫出的線的顏色為原先屏幕顏色的反色。這樣畫的線均可見,而且第二次畫同一條線屏幕顏色的反色。這樣畫的線均可見,而且第二次畫同一條線時(shí),將自動(dòng)擦除該線并恢復(fù)為當(dāng)前顯示顏色。時(shí),將自動(dòng)擦除該線并恢復(fù)為當(dāng)前顯示顏色。(2) R2_NOP繪圖模式等效于同時(shí)選擇繪圖

45、模式等效于同時(shí)選擇NULL畫筆和畫筆和NULL畫刷。畫刷。(3) 在在R2_XORPEN的操作模式下,用相同的參數(shù)兩次調(diào)用某一的操作模式下,用相同的參數(shù)兩次調(diào)用某一條繪圖命令時(shí)(包括文字輸出函數(shù)),其結(jié)果仍然保留原樣,條繪圖命令時(shí)(包括文字輸出函數(shù)),其結(jié)果仍然保留原樣,利用這種方式,我們可以實(shí)現(xiàn)圖形動(dòng)畫效果。利用這種方式,我們可以實(shí)現(xiàn)圖形動(dòng)畫效果。(4) 在畫虛線時(shí),用于填充線間的空白顏色取決于當(dāng)前背景模式在畫虛線時(shí),用于填充線間的空白顏色取決于當(dāng)前背景模式和背景顏色。和背景顏色。(5) 在在R2_NOTXORPEN的操作的操作模式下,其功能有二,第一,將模式下,其功能有二,第一,將同一直線

46、繪制兩次,將刪除該直線;第二,無論背景是何顏色,同一直線繪制兩次,將刪除該直線;第二,無論背景是何顏色,第一次繪制的直線總是可見的。第一次繪制的直線總是可見的。Visual C+Visual C+8.3.5 繪圖操作實(shí)例繪圖操作實(shí)例 【例【例8-3】一個(gè)演示繪圖模式與畫線的應(yīng)用程序?!恳粋€(gè)演示繪圖模式與畫線的應(yīng)用程序。1程序功能描述程序功能描述 利用繪圖模式實(shí)現(xiàn)利用繪圖模式實(shí)現(xiàn)“橡皮條橡皮條”功能的直線繪制功能的直線繪制。一般的繪圖軟件。一般的繪圖軟件(如(如AutoCAD),在畫直線時(shí)的操作方法是:當(dāng)按鼠標(biāo)左鍵時(shí),準(zhǔn)備在畫直線時(shí)的操作方法是:當(dāng)按鼠標(biāo)左鍵時(shí),準(zhǔn)備繪制直線,當(dāng)在屏幕移動(dòng)鼠標(biāo)時(shí),

47、在屏幕上畫一條直線,該直線開繪制直線,當(dāng)在屏幕移動(dòng)鼠標(biāo)時(shí),在屏幕上畫一條直線,該直線開始于原先按下鼠標(biāo)左鍵的位置,終止于當(dāng)前鼠標(biāo)移動(dòng)到的位置。隨始于原先按下鼠標(biāo)左鍵的位置,終止于當(dāng)前鼠標(biāo)移動(dòng)到的位置。隨著鼠標(biāo)的移動(dòng),該直線也在移動(dòng),但直線的起始點(diǎn)不動(dòng),類似于一著鼠標(biāo)的移動(dòng),該直線也在移動(dòng),但直線的起始點(diǎn)不動(dòng),類似于一個(gè)橡皮筋固定在一端,而在拉動(dòng)它的另一端。個(gè)橡皮筋固定在一端,而在拉動(dòng)它的另一端。2利用利用MFC AppWizard(exe)創(chuàng)建程序步驟創(chuàng)建程序步驟(1)生成應(yīng)用程序框架)生成應(yīng)用程序框架 利用應(yīng)用程序向?qū)Ю脩?yīng)用程序向?qū)FC AppWizard(exe)創(chuàng)建一個(gè)單文檔的應(yīng)用程

48、序創(chuàng)建一個(gè)單文檔的應(yīng)用程序框架,該工程的名稱為框架,該工程的名稱為MyDraw,向?qū)У拿總€(gè)步驟都使用缺省的。向?qū)У拿總€(gè)步驟都使用缺省的。Visual C+Visual C+【例【例8-3】續(xù)】續(xù)1(2)在視圖類)在視圖類CMyDraw添加數(shù)據(jù)成員添加數(shù)據(jù)成員在工程在工程MyDraw的工作區(qū)中,選擇的工作區(qū)中,選擇“ClassView”選項(xiàng)卡,在選項(xiàng)卡,在類名列表窗口中選擇視圖類類名列表窗口中選擇視圖類“CMyDrawView”,然后單擊鼠標(biāo)右然后單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇鍵,在彈出的快捷菜單中選擇“Add Member Variable”命令,則命令,則彈出圖彈出圖8.2所示的對(duì)話框

49、。在所示的對(duì)話框。在“Variable Type”編輯框中輸入編輯框中輸入bool,在在“Variable Name”編輯框中輸入編輯框中輸入m_IsDraw,選擇選擇Access(訪訪問控制屬性問控制屬性)為為Private(私有私有)。最后按。最后按“OK”按鈕,則在視圖類按鈕,則在視圖類CMyDrawView中添加了一個(gè)中添加了一個(gè)bool型的私有成員變量型的私有成員變量m_IsDraw,用于標(biāo)記是否開始繪制直線,當(dāng)該值為真時(shí),代表開始畫直線,為用于標(biāo)記是否開始繪制直線,當(dāng)該值為真時(shí),代表開始畫直線,為假時(shí),代表停止畫直線。假時(shí),代表停止畫直線。 另外,為了確定所畫線的起始點(diǎn)和終止點(diǎn),需

50、要在視圖類中添加另外,為了確定所畫線的起始點(diǎn)和終止點(diǎn),需要在視圖類中添加兩個(gè)兩個(gè)CPoint型的成員變量型的成員變量m_StartPoint和和m_EndPoint,前者存前者存放直線的起始點(diǎn),后者存放直線的終止點(diǎn),添加的方法同上。放直線的起始點(diǎn),后者存放直線的終止點(diǎn),添加的方法同上。Visual C+Visual C+圖圖8.2Visual C+Visual C+【例【例8-3】續(xù)】續(xù)2(3)對(duì)成員變量)對(duì)成員變量m_IsDraw進(jìn)行初始化進(jìn)行初始化 在視圖類在視圖類CMyDrawView的構(gòu)造函數(shù)中添加如下的的構(gòu)造函數(shù)中添加如下的代碼可以實(shí)現(xiàn)對(duì)數(shù)據(jù)成員的初始化。代碼可以實(shí)現(xiàn)對(duì)數(shù)據(jù)成員的初始

51、化。CMyDrawView:CMyDrawView() m_IsDraw=false; /開始不繪制直線開始不繪制直線(4)添加鼠標(biāo)左鍵按下消息的映射函數(shù))添加鼠標(biāo)左鍵按下消息的映射函數(shù)選擇選擇View|ClassWizard命令,彈出命令,彈出MFC ClassWizard窗窗體,在體,在Class name 中選擇中選擇CMyDrawView,在在Messages中選擇中選擇WM_LBUTTONDOWN,然后單擊然后單擊“Add Function”按鈕,這樣就為視圖類添加了按鈕,這樣就為視圖類添加了WM_LBUTTONDOWN的消息處理函數(shù)的消息處理函數(shù)OnLButtonDown, 如下圖

52、所示。如下圖所示。Visual C+Visual C+圖圖8.3Visual C+Visual C+【例【例8-3】續(xù)】續(xù)3 最后,單擊最后,單擊“Edit Code”按鈕,光標(biāo)自動(dòng)按鈕,光標(biāo)自動(dòng)定位到定位到OnLButtonDown 實(shí)現(xiàn)處,在該消息映實(shí)現(xiàn)處,在該消息映射函數(shù)中添加后的代碼如下:射函數(shù)中添加后的代碼如下:void CMyDrawView:OnLButtonDown(UINT nFlags, CPoint point) m_IsDraw=true; /開始繪制直線開始繪制直線m_StartPoint=m_EndPoint=point; /開始開始畫線時(shí)起始點(diǎn)與終止點(diǎn)重合畫線時(shí)起

53、始點(diǎn)與終止點(diǎn)重合CView:OnLButtonDown(nFlags, point); Visual C+Visual C+【例【例8-3】續(xù)】續(xù)4(5)添加鼠標(biāo)移動(dòng)的消息映射函數(shù))添加鼠標(biāo)移動(dòng)的消息映射函數(shù) 與上一步類似,利用與上一步類似,利用ClassWizard為視圖類為視圖類CMyDrawView添添加擊鍵消息加擊鍵消息WM_MOUSEMOVE的消息映射函數(shù)的消息映射函數(shù)OnMouseMove(),并在該函數(shù)中添加代碼,以用于移動(dòng)屏幕并在該函數(shù)中添加代碼,以用于移動(dòng)屏幕上的圖形上的圖形(6)添加鼠標(biāo)左鍵彈起的消息映射函數(shù)添加鼠標(biāo)左鍵彈起的消息映射函數(shù) 與上一步類似,利用與上一步類似,利

54、用ClassWizard為視圖類為視圖類CMyDrawView添添加擊鍵消息加擊鍵消息WM_LBUTTONUP的消息映射函數(shù)的消息映射函數(shù)OnLButtonUp(),并在該函數(shù)中添加如下代碼,以用于停止并在該函數(shù)中添加如下代碼,以用于停止繪圖:繪圖:void CMyDrawView:OnLButtonUp(UINT nFlags, CPoint point) m_IsDraw=false; /停止繪制直線停止繪制直線CView:OnLButtonUp(nFlags, point); Visual C+Visual C+第四次上機(jī)題目第四次上機(jī)題目1、利用繪圖函數(shù)在客戶區(qū)繪制三個(gè)菱形圖、利用繪圖

55、函數(shù)在客戶區(qū)繪制三個(gè)菱形圖形。形。2、練習(xí)、練習(xí)P166頁例頁例8.3。Visual C+Visual C+8.4 Windows繪圖工具繪圖工具 8.4.1 8.4.1 繪圖工具分類繪圖工具分類8.4.2 8.4.2 使用畫筆使用畫筆 8.4.3 8.4.3 使用畫刷使用畫刷8.4.4 8.4.4 使用庫存工具使用庫存工具Visual C+Visual C+繪圖工具簡介繪圖工具簡介 VC繪圖需要兩個(gè)要素:繪圖需要兩個(gè)要素:設(shè)備描述表設(shè)備描述表和和基本基本繪圖工具繪圖工具。設(shè)備描述表是由。設(shè)備描述表是由CDC類及其派生類類及其派生類來描述,它是一個(gè)來描述,它是一個(gè)畫圖的畫布,提供繪圖的場畫圖的

56、畫布,提供繪圖的場地和環(huán)境地和環(huán)境。畫布一般是窗口的客戶區(qū),在該環(huán)。畫布一般是窗口的客戶區(qū),在該環(huán)境中有一套默認(rèn)的基本繪圖工具。比如在文本境中有一套默認(rèn)的基本繪圖工具。比如在文本操作中,字體就是一種繪圖工具。當(dāng)設(shè)備環(huán)境操作中,字體就是一種繪圖工具。當(dāng)設(shè)備環(huán)境所提供的默認(rèn)的繪圖工具不能滿足我們的需求所提供的默認(rèn)的繪圖工具不能滿足我們的需求時(shí),就需要更改默認(rèn)繪圖工具,達(dá)到繪制豐富時(shí),就需要更改默認(rèn)繪圖工具,達(dá)到繪制豐富多彩圖形的目的。多彩圖形的目的。 Visual C+Visual C+8.4.1繪圖工具的分類繪圖工具的分類 Windows的繪圖工具包括畫筆、的繪圖工具包括畫筆、畫刷、字體、位圖、

57、調(diào)色板和區(qū)域畫刷、字體、位圖、調(diào)色板和區(qū)域。在在MFC中這些繪圖工具被封裝到相中這些繪圖工具被封裝到相應(yīng)的類中。這些繪圖工具中,字體應(yīng)的類中。這些繪圖工具中,字體在文本操作中已講,本書主要學(xué)習(xí)在文本操作中已講,本書主要學(xué)習(xí)畫筆和畫刷,其余工具自己查閱相畫筆和畫刷,其余工具自己查閱相關(guān)資料進(jìn)行學(xué)習(xí)。關(guān)資料進(jìn)行學(xué)習(xí)。 Visual C+Visual C+8.4.2 使用畫筆使用畫筆 畫筆是最簡單的一種繪圖工具,同時(shí)也是最重畫筆是最簡單的一種繪圖工具,同時(shí)也是最重要的一種繪圖對(duì)象。要的一種繪圖對(duì)象。在現(xiàn)實(shí)世界中在現(xiàn)實(shí)世界中,可以用不同的可以用不同的筆產(chǎn)生不同的線。這正如繪圖用的彩筆、不同顏筆產(chǎn)生不同

58、的線。這正如繪圖用的彩筆、不同顏色筆產(chǎn)生不同顏色的線。色筆產(chǎn)生不同顏色的線。Windows也是利用這種也是利用這種面向?qū)ο蟮拿枋鍪挛锏姆椒?,把筆作為一個(gè)對(duì)象,面向?qū)ο蟮拿枋鍪挛锏姆椒?,把筆作為一個(gè)對(duì)象,和現(xiàn)實(shí)世界一樣,不同的筆產(chǎn)生不同的線。和現(xiàn)實(shí)世界一樣,不同的筆產(chǎn)生不同的線。 1 畫筆類畫筆類CpenCPen對(duì)象封裝了對(duì)象封裝了Windows GDI筆,并提供與筆,并提供與CPen對(duì)象一起工作的幾種方法。對(duì)象一起工作的幾種方法。Visual C+Visual C+8.4.2續(xù)續(xù)1 2畫筆工具的操作步驟畫筆工具的操作步驟(1)聲明)聲明CPen對(duì)象。對(duì)象。(2)初始化畫筆。)初始化畫筆。通過調(diào)

59、用通過調(diào)用CreatePen成員函數(shù)可以初始化筆,該函數(shù)的成員函數(shù)可以初始化筆,該函數(shù)的原型為:原型為:BOOL CreatePen( int nPenStyle, int nWidth,COLORREF crColor );(3)將新建的畫筆對(duì)象選進(jìn)設(shè)備場景中,同時(shí)保存原)將新建的畫筆對(duì)象選進(jìn)設(shè)備場景中,同時(shí)保存原畫筆對(duì)象的指針:畫筆對(duì)象的指針:pOldPen=pDC-SelectObject(&pen);(4)調(diào)用繪圖函數(shù)生成圖形。調(diào)用繪圖函數(shù)生成圖形。(5)選擇設(shè)備場景的原有筆對(duì)象。)選擇設(shè)備場景的原有筆對(duì)象。Visual C+Visual C+ 表表8.5 nPenStyle

60、的取值的取值筆樣式筆樣式說明說明PS_SOLID (0)創(chuàng)建創(chuàng)建實(shí)線筆實(shí)線筆PS_DASH (1)當(dāng)筆寬度為當(dāng)筆寬度為1時(shí),創(chuàng)建時(shí),創(chuàng)建虛線筆虛線筆PS_DOT (2)當(dāng)筆寬度為當(dāng)筆寬度為1時(shí),創(chuàng)建時(shí),創(chuàng)建點(diǎn)線筆點(diǎn)線筆PS_DASHDOT(3)當(dāng)筆寬度為當(dāng)筆寬度為1時(shí),創(chuàng)建時(shí),創(chuàng)建虛點(diǎn)線筆虛點(diǎn)線筆PS_DASHDOTDOT(4) 當(dāng)筆寬度為當(dāng)筆寬度為1時(shí),創(chuàng)建時(shí),創(chuàng)建交替直線和交替直線和雙點(diǎn)線的筆雙點(diǎn)線的筆PS_NULL(5)創(chuàng)建創(chuàng)建空(不可見)筆空(不可見)筆PS_INSIDEFRAME(6) 創(chuàng)建在創(chuàng)建在Windows GDI矩形邊界內(nèi)矩形邊界內(nèi)繪制形狀的筆繪制形狀的筆Visual C+Visual C+8.4.2續(xù)續(xù)2 3畫筆工具

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論