




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Visual C+Visual C+第第8章章 利用利用CDC類實現(xiàn)繪圖程序類實現(xiàn)繪圖程序?qū)W習(xí)目標(biāo):學(xué)習(xí)目標(biāo):n了解了解MFC類庫中實現(xiàn)繪圖功能的類類庫中實現(xiàn)繪圖功能的類: 設(shè)備環(huán)設(shè)備環(huán)境類境類(CDC,C Device Context類)類)n學(xué)會使用學(xué)會使用CDC類中文本的輸出函數(shù)類中文本的輸出函數(shù) (包括文本的字體、顏色和屬性控制)(包括文本的字體、顏色和屬性控制)n掌握掌握CDC類中繪制圖形的函數(shù)類中繪制圖形的函數(shù) (包括點、線、橢圓、矩形和弧等)(包括點、線、橢圓、矩形和弧等)n掌握掌握CDC類中各種繪圖工具類中各種繪圖工具(畫筆、畫刷)(畫筆、畫刷) 的使用的使用n掌握位圖的使用掌
2、握位圖的使用 Visual C+Visual C+ 主要內(nèi)容主要內(nèi)容 8.1 圖形繪制的基本知識圖形繪制的基本知識 8.2 CDC的文本輸出操作的文本輸出操作 8.3 CDC的繪圖操作的繪圖操作 8.4 Windows繪圖工具繪圖工具 8.5 位圖的加載與顯示位圖的加載與顯示Visual C+Visual C+8.1.18.1.1一個簡單的圖形程序一個簡單的圖形程序 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編寫一個簡單的繪圖程序編寫一個簡單的繪圖程序1.利用利用AppWizard生成應(yīng)用程序架構(gòu)生成應(yīng)用程序架構(gòu)(1)啟動)啟動VC6.0,選擇選擇“File”菜單的菜單的“New”命令,在命令,在彈出的彈出的“New”對話框中選擇對話框中選擇“Project”選項卡。在該選項卡。在該選項卡的列表中選擇選項卡的列表中選擇“MFC AppWizard(exe)”項,在項,在“Project Name”編輯框中輸入要創(chuàng)建的工程名稱編輯框中輸入要創(chuàng)建的工程名稱SingleDraw,在在“Lo
4、cation”編輯框中設(shè)置工程的存編輯框中設(shè)置工程的存放位置,單擊放位置,單擊“OK”按鈕。按鈕。(2)在彈出的)在彈出的“MFC AppWizard-Step1” 對話框中選對話框中選擇擇“single document”,即應(yīng)用程序的類型為單文檔即應(yīng)用程序的類型為單文檔模式,然后單擊模式,然后單擊“Finish”按鈕。按鈕。(3)在彈出的)在彈出的“New Project information” 對話框中對話框中單擊單擊“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)于對話框類、于對話框類、CMainFrame主框架類、主框架類、CSingleDrawDoc文檔類、文檔類、CSingleDrawView視圖類。視圖類。 有關(guān)繪制功能的實現(xiàn),一般是在視圖類有關(guān)繪制功能的實現(xiàn),一般是在視圖類中完成,因此,這一章的實例都是對視中完成,因此,這一章的實例都是對視圖類圖類CSingleDrawView的操作。的操作。 Visual C+Visual C+ 3將代碼放到將代碼放到MFC的某個類的虛函數(shù)或消息映的某個類的虛函數(shù)或消息映射函數(shù)中射函數(shù)中 繪圖功能的實現(xiàn),一般要超載視圖類的繪圖功能的實現(xiàn),一般要超載視圖類的
6、OnDraw()虛函數(shù),虛函數(shù),打開打開WorkSpace的的ClassView選項卡,展開選項卡,展開CSingleDrawView視圖類,可以看到視圖類,可以看到該類中有一個虛該類中有一個虛函數(shù)函數(shù)OnDraw(),雙擊該函數(shù),就把光標(biāo)定位到該函數(shù)雙擊該函數(shù),就把光標(biāo)定位到該函數(shù)的實現(xiàn)處,在其中編寫代碼如下:的實現(xiàn)處,在其中編寫代碼如下: void CSingleDrawView:OnDraw(CDC* pDC)CSingleDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDC-TextOut(100,100,“在視圖類的在視圖類的 On
7、Draw虛函數(shù)中輸出的最簡單的一個圖虛函數(shù)中輸出的最簡單的一個圖 形程序形程序); Visual C+Visual C+4運行程序運行程序 編譯并運行該程序(按編譯并運行該程序(按Ctrl+F5熱鍵),熱鍵),在屏幕上顯示了一行文本。利用在屏幕上顯示了一行文本。利用MFC的應(yīng)用程序的應(yīng)用程序向?qū)?,我們僅寫了一行代碼,就完成了一個簡單向?qū)?,我們僅寫了一行代碼,就完成了一個簡單的圖形程序的圖形程序輸出文本圖形。輸出文本圖形。 Visual C+Visual C+8.1.2 圖形操作的接口圖形操作的接口GDI Windows中繪制的各種圖形(點、線、中繪制的各種圖形(點、線、圓、多邊形、矩形等)都是
8、與設(shè)備無關(guān)的圓、多邊形、矩形等)都是與設(shè)備無關(guān)的,即在屏幕的窗口內(nèi)繪圖與在打印機(jī)上繪圖即在屏幕的窗口內(nèi)繪圖與在打印機(jī)上繪圖是相似的。是相似的。 GDI(Graphic Device Interface)是是Windows提供的繪圖接口,它接收應(yīng)用程提供的繪圖接口,它接收應(yīng)用程序的繪圖請求(表現(xiàn)為序的繪圖請求(表現(xiàn)為GDI調(diào)用),并將它調(diào)用),并將它們傳送給相應(yīng)的設(shè)備驅(qū)動程序,再由設(shè)備們傳送給相應(yīng)的設(shè)備驅(qū)動程序,再由設(shè)備驅(qū)動程序驅(qū)動相應(yīng)的硬件設(shè)備,如打印機(jī)驅(qū)動程序驅(qū)動相應(yīng)的硬件設(shè)備,如打印機(jī)或顯示器輸出?;蝻@示器輸出。Visual C+Visual C+8.1.3 MFC中的中的CDC類類 1.
9、 MFC中的中的CDC類類 CDC (C Device Context)類類它封裝了它封裝了GDI函數(shù)函數(shù)。所有的繪圖操作都是。所有的繪圖操作都是直接或間接運用了直接或間接運用了CDC的的成員函數(shù)成員函數(shù),這些函數(shù)有的是用來畫圖的,有的函數(shù)是,這些函數(shù)有的是用來畫圖的,有的函數(shù)是用來獲取或設(shè)置繪圖屬性。用來獲取或設(shè)置繪圖屬性。 在由在由AppWizard創(chuàng)建的創(chuàng)建的MFC應(yīng)用程序中,視圖類的應(yīng)用程序中,視圖類的OnDraw成員函數(shù)是一個處理圖形的函數(shù),它帶有一成員函數(shù)是一個處理圖形的函數(shù),它帶有一個指向設(shè)備環(huán)境對象的指針個指向設(shè)備環(huán)境對象的指針pDC,MFC的繪圖成大多的繪圖成大多都是通過都是
10、通過pDC這個指針來加以訪問的。這個指針來加以訪問的。 Visual C+Visual C+2設(shè)備描述表(設(shè)備描述表(Device Context) 設(shè)備描述表是設(shè)備描述表是Windows系統(tǒng)下的一系統(tǒng)下的一個數(shù)據(jù)結(jié)構(gòu),用來保存顯示圖形所需要的個數(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)建、獲取和控制原點,擴(kuò)展
12、窗口和視及為創(chuàng)建、獲取和控制原點,擴(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)建及刷新時都會發(fā)送應(yīng)用程序窗口在每次創(chuàng)建及刷新時都會發(fā)送WM_PAINT消息,該消息將自動調(diào)用響應(yīng)函消息,該消息將自動調(diào)用響應(yīng)函數(shù)數(shù)OnDraw
14、(CDC* pDC ),),這個這個pDC指針就是指向指針就是指向CPaintDC對象的指針,在函數(shù)中就可以調(diào)用該類的成對象的指針,在函數(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)行繪圖時,一般要調(diào)用類進(jìn)行繪圖時,一般要調(diào)用Get
15、ClientRect()函數(shù)來獲取客戶區(qū)域的大小。函數(shù)來獲取客戶區(qū)域的大小。Visual C+Visual C+ 3派生類派生類CWindowDC(整個窗口整個窗口) CWindowDC類直接從類直接從CDC派生,該類可以在派生,該類可以在顯示器的任意位置繪圖(包括客戶區(qū)和非客戶區(qū))顯示器的任意位置繪圖(包括客戶區(qū)和非客戶區(qū)) ,坐標(biāo)原點在整個窗口的左上角坐標(biāo)原點在整個窗口的左上角。由于使用。由于使用CWindowDC可以在整個窗口類繪圖,這給了程序可以在整個窗口類繪圖,這給了程序員很大的自由度,但使用不當(dāng)會帶來麻煩。員很大的自由度,但使用不當(dāng)會帶來麻煩。 在使用在使用CWindowDC進(jìn)行繪
16、圖時,一般要調(diào)用進(jìn)行繪圖時,一般要調(diào)用GetWindowRect函數(shù)來獲取整個應(yīng)用程序窗口區(qū)函數(shù)來獲取整個應(yīng)用程序窗口區(qū)域的大小。域的大小。 Visual C+Visual C+ 4派生類派生類CMetaFileDC(圖元文件)(圖元文件) CWindowDC類直接從類直接從CDC派生,該類用在創(chuàng)派生,該類用在創(chuàng)建與設(shè)備無關(guān)的并且可以回放的圖像時使用。建與設(shè)備無關(guān)的并且可以回放的圖像時使用。 Visual C+Visual C+8.2 VC的文本操作的文本操作 文本輸出函數(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為為待輸出的文本中所含字符的個數(shù)待輸出的文本中所含字符的個數(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ù)用來在一個給定的矩形該函數(shù)用來在一個給定的矩形lpRect區(qū)區(qū)域內(nèi)輸出字符串域內(nèi)輸出字符串str,此矩形可以設(shè)置為透明的(此矩形可以設(shè)置為透明的(nOptions=ETO_OPAQUE)或不透明的,當(dāng)矩形或不透明的,當(dāng)矩形區(qū)域為不透明時,用當(dāng)前的背景色填充矩形。區(qū)域為不透明時,用當(dāng)前的背景色填充矩形。Visual C+Visual C+8.2.2 文本屬性控制文本屬性控制 1 設(shè)置文本的背景色函數(shù)設(shè)置文本的背景色函數(shù)SetBkColor()()缺省時,文本和繪圖的背景顏色是白色。缺省時,文本和繪圖的背景顏色是白色
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,則顯示時背景都改變?yōu)楫?dāng)前背景顏色。則顯示時背景都改變?yōu)楫?dāng)前背景顏色。如果值為如果值為TRANSPARENT,則不改變背景顏色則不改變背景顏色.Visual C+Visual C+ 3設(shè)置文本的排列方式設(shè)置文本的排列方式利用利用CDC的成員函數(shù)的成員函數(shù)SetTextAlign函數(shù)實現(xiàn)文函數(shù)實現(xiàn)文本的排列方式,函數(shù)原型為:本的排列方式
22、,函數(shù)原型為: UINT SetTextAlign (UINT nFlags); 其中,其中,nFlags為文本的對齊方式,其值如下:為文本的對齊方式,其值如下:TA_LEFT 將點同邊界矩形的水平中心對齊將點同邊界矩形的水平中心對齊TA_BASELINES 將點同所選字體的基線對將點同所選字體的基線對TA_BOTTOM 將點同邊界矩形的底線對齊將點同邊界矩形的底線對齊 Visual C+Visual C+ 4設(shè)置文本的字體顏色設(shè)置文本的字體顏色 利用利用CDC的成員函數(shù)的成員函數(shù)SetTextColor函數(shù)實現(xiàn)設(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等,等,同一個字符以不同的字體輸出時同一個字符以不同的字體輸出時外觀會不太一樣外觀會不太一樣。VC提供了豐富的字體控制提供了豐富的字體控制
24、功能,不僅功能,不僅可以使用可以使用Windows提供的字體,提供的字體,還可以自己創(chuàng)建字體還可以自己創(chuàng)建字體,這使得,這使得Windows下文下文本輸出具有很大的靈活性,可以最大限度地滿本輸出具有很大的靈活性,可以最大限度地滿足用戶對復(fù)雜文本的輸出要求。足用戶對復(fù)雜文本的輸出要求。Visual C+Visual C+8.2.3續(xù)續(xù)1 1使用庫存字體使用庫存字體 Windows系統(tǒng)本身提供了一些庫存字體,對于大多系統(tǒng)本身提供了一些庫存字體,對于大多數(shù)應(yīng)用程序,使用庫存字體即可完成基本的文本輸出功數(shù)應(yīng)用程序,使用庫存字體即可完成基本的文本輸出功能。能。 要想使用庫存字體,需要使用要想使用庫存字體
25、,需要使用CDC的成員函數(shù)的成員函數(shù)SelectStockObject()來完成,例如:來完成,例如: SelectStockObject(OEM_FIXED_FONT); 該語句把終端字體選入設(shè)備環(huán)境,這樣,用該語句把終端字體選入設(shè)備環(huán)境,這樣,用TextOut輸出文本時,將使用輸出文本時,將使用DOS命令窗口的字體。命令窗口的字體。其實,每個設(shè)備環(huán)境都有一個缺省字體,對于顯示器其實,每個設(shè)備環(huán)境都有一個缺省字體,對于顯示器而言,缺省字體就是而言,缺省字體就是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字體的映射程序如何字體的映射程序如何解釋字體請求,因此對于不同的設(shè)備,其字體寬度可能不同解釋字體請求,因此對于不同的設(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)題、菜單和對話框中的文本。系統(tǒng)字符集總體來顯示窗口的標(biāo)題、菜單和對話框中的文本。系統(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 文本處理實例文本處理實例 【例例8-2】利用】利用MFC編寫文本處理的應(yīng)用程序。編寫文本處理的應(yīng)用程序。 1程序功能描述程序功能描述 使用庫存字體和自定義字體,設(shè)置文本的前景色、使用庫存字體和自定義字體,設(shè)置文本的前景色、背景色、對齊方式、背景模式,利用背景色、對齊方式、背景模式,利用TextOut和和ExtTextOut函數(shù)在屏幕上輸出文本。函數(shù)在屏幕上輸出文本
31、。2利用利用MFC AppWizard(exe)創(chuàng)建程序步驟創(chuàng)建程序步驟(1)運行)運行VC6.0,在在File菜單中選擇菜單中選擇New命令,在打開的命令,在打開的New對話框中選中對話框中選中Projects標(biāo)簽,在左邊的列表框中選標(biāo)簽,在左邊的列表框中選擇擇MFC AppWizard(exe)選項,在右邊的選項,在右邊的Project name文本框中輸入工程名文本框中輸入工程名TextTest,并選擇合適的路徑。并選擇合適的路徑。Visual C+Visual C+【例【例8-2】續(xù)】續(xù)1(2)單擊)單擊OK按鈕,啟動按鈕,啟動AppWizard,在第在第一步中選擇一步中選擇Singl
32、e Document單選按鈕。單選按鈕。(3)從第)從第2步到第步到第6步使用缺省選項,最后生步使用缺省選項,最后生成工程成工程TextTest。 3編輯視圖類編輯視圖類CTextTestView 中的中的OnDraw函函數(shù),實現(xiàn)文本的各種屬性控制及輸出。附數(shù),實現(xiàn)文本的各種屬性控制及輸出。附CTextTestView.txtVisual C+Visual C+8.3 CDC的繪圖操作的繪圖操作 8.3.1 畫點與畫線函數(shù)操作畫點與畫線函數(shù)操作 8.3.2 繪制封閉圖形繪制封閉圖形 8.3.3 設(shè)置繪圖參數(shù)設(shè)置繪圖參數(shù)8.3.4 繪圖模式繪圖模式 8.3.5 繪圖操作實例繪圖操作實例Visua
33、l C+Visual C+8.3.1 畫點與畫線函數(shù)操作畫點與畫線函數(shù)操作1畫點函數(shù)畫點函數(shù)SetPixel()() CDC的成員函數(shù)的成員函數(shù)SetPixel用來在指定位置上繪制一個用來在指定位置上繪制一個特定的像素點,其原型為:特定的像素點,其原型為:COLORREF SetPixel( POINT point, COLORREF crColor ); 其中參數(shù)其中參數(shù)point指定所繪制的點,指定所繪制的點,crColor指定畫點所指定畫點所用的顏色。用的顏色。例如:例如:pDC- SetPixel(CPoint(100,100),RGB(255,0,0);Visual C+Visual
34、 C+2畫直線函數(shù)畫直線函數(shù)LineTo( ) 畫直線時先用到畫直線時先用到MoveTo()函數(shù)函數(shù),將畫筆的坐將畫筆的坐標(biāo)移至某一點。標(biāo)移至某一點。例如:例如:MoveTo(20,20);); LineTo( )函數(shù)用于畫一條直線。函數(shù)用于畫一條直線。例如:例如:LineTo(100,100); 即從起點(即從起點(20,20)處畫一條直線至終點)處畫一條直線至終點(100,100)處。)處。如何畫一個菱形?如何畫一個菱形?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 ); 這兩個函數(shù)畫弧成功返回非這兩個函數(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為弧的起點為弧的起點x、y坐標(biāo);坐標(biāo);x與與y為弧的終點為弧的終點x、y坐標(biāo)。坐標(biāo)。 參數(shù)參數(shù)lpRect表示圍繞弧的矩形表示圍繞弧的矩形,它可以是,它可以是LPRECT 或或CRect對象,對象,ptStart表示弧的起點的表示弧的起點的CPoint 或或POINT對象,該點不必精確地位對象,該點不必精確地位于弧上;于弧上;PtEnd表示弧的終點表示弧的終點的的CPoint 或或POINT對象,該點不必精對象,該點不必精確地位于弧上。確地位于弧上。Visual C+Visual C+8.3.2 繪制封閉圖形繪制封閉圖形 Windows提供了提供了Rectangle、
37、Ellipse、RoundRect、Chord、Pie等五個函數(shù)用來繪制并填充圖形。等五個函數(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為一個矩形結(jié)構(gòu)的指針,用它來表示為一
38、個矩形結(jié)構(gòu)的指針,用它來表示矩形的四個角。矩形的四個角。2畫橢圓或圓畫橢圓或圓 使用使用CDC的成員函數(shù)的成員函數(shù)Ellipse,可以使用當(dāng)前筆繪制一個用當(dāng)前可以使用當(dāng)前筆繪制一個用當(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 ); 這兩個函數(shù)畫橢圓成功后返回非這兩個函數(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ù)用于繪制一個圓角矩形,并用當(dāng)前的畫刷來填充該圓角矩該函數(shù)用于繪制一個圓角矩形
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)用于定義矩形四用于定義矩形四個角上的邊角內(nèi)切橢圓的寬度和高度個角上的邊角內(nèi)切橢圓的寬度和高度,值越大,圓角矩形的角就越明顯。,值越大,圓角矩形的角就越明顯。如果如果x3=x2-x1,并且并且y3=y2-y1,則所繪制的圓角矩形變?yōu)橐粋€橢圓。則所繪制的圓角矩形變?yōu)橐粋€橢圓。Visual C+Visual C+8.3.2 續(xù)續(xù)24 畫餅圖扇形畫餅圖扇形餅圖是一條
41、弧和從弧的兩個端點到中心的連線組成的圖形。餅圖是一條弧和從弧的兩個端點到中心的連線組成的圖形。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 畫弓形畫弓形弓形圖是一條橢圓弧和連接該弧線兩個端點的弦,并用當(dāng)前的畫弓形圖是一條橢圓弧和連接該弧線兩個端點的弦,并用當(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、用畫筆畫線時,它實際上是在畫筆像素和目使用畫筆畫線時,它實際上是在畫筆像素和目標(biāo)位置處原像素之間執(zhí)行一種按位布爾運算,稱為標(biāo)位置處原像素之間執(zhí)行一種按位布爾運算,稱為“光柵操光柵操作作”(Raster Operation),簡記為簡記為“ROP”。由于畫線操作由于畫線操作只涉及兩種像素(畫筆像素和目標(biāo)像素),所以這種布爾運只涉及兩種像素(畫筆像素和目標(biāo)像素),所以這種布爾運算又稱為算又稱為“二元光柵操作二元光柵操作”(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) 在畫線時在畫線時,如果繪圖模式為如果繪圖模式為R2_NOT,則畫出的線的顏色為原先則畫出的線的顏色為原先屏幕顏色的反色。這樣畫的線均可見,而且第二次畫同一條線屏幕顏色的反色。這樣畫的線均可見,而且第二次畫同一條線時,將自動擦除該線并恢復(fù)為當(dāng)前顯示顏色。時,將自動擦除該線并恢復(fù)為當(dāng)前顯示顏色。(2) R2_NOP繪圖模式等效于同時選擇繪圖
45、模式等效于同時選擇NULL畫筆和畫筆和NULL畫刷。畫刷。(3) 在在R2_XORPEN的操作模式下,用相同的參數(shù)兩次調(diào)用某一的操作模式下,用相同的參數(shù)兩次調(diào)用某一條繪圖命令時(包括文字輸出函數(shù)),其結(jié)果仍然保留原樣,條繪圖命令時(包括文字輸出函數(shù)),其結(jié)果仍然保留原樣,利用這種方式,我們可以實現(xiàn)圖形動畫效果。利用這種方式,我們可以實現(xiàn)圖形動畫效果。(4) 在畫虛線時,用于填充線間的空白顏色取決于當(dāng)前背景模式在畫虛線時,用于填充線間的空白顏色取決于當(dāng)前背景模式和背景顏色。和背景顏色。(5) 在在R2_NOTXORPEN的操作的操作模式下,其功能有二,第一,將模式下,其功能有二,第一,將同一直線
46、繪制兩次,將刪除該直線;第二,無論背景是何顏色,同一直線繪制兩次,將刪除該直線;第二,無論背景是何顏色,第一次繪制的直線總是可見的。第一次繪制的直線總是可見的。Visual C+Visual C+8.3.5 繪圖操作實例繪圖操作實例 【例【例8-3】一個演示繪圖模式與畫線的應(yīng)用程序?!恳粋€演示繪圖模式與畫線的應(yīng)用程序。1程序功能描述程序功能描述 利用繪圖模式實現(xiàn)利用繪圖模式實現(xiàn)“橡皮條橡皮條”功能的直線繪制功能的直線繪制。一般的繪圖軟件。一般的繪圖軟件(如(如AutoCAD),在畫直線時的操作方法是:當(dāng)按鼠標(biāo)左鍵時,準(zhǔn)備在畫直線時的操作方法是:當(dāng)按鼠標(biāo)左鍵時,準(zhǔn)備繪制直線,當(dāng)在屏幕移動鼠標(biāo)時,
47、在屏幕上畫一條直線,該直線開繪制直線,當(dāng)在屏幕移動鼠標(biāo)時,在屏幕上畫一條直線,該直線開始于原先按下鼠標(biāo)左鍵的位置,終止于當(dāng)前鼠標(biāo)移動到的位置。隨始于原先按下鼠標(biāo)左鍵的位置,終止于當(dāng)前鼠標(biāo)移動到的位置。隨著鼠標(biāo)的移動,該直線也在移動,但直線的起始點不動,類似于一著鼠標(biāo)的移動,該直線也在移動,但直線的起始點不動,類似于一個橡皮筋固定在一端,而在拉動它的另一端。個橡皮筋固定在一端,而在拉動它的另一端。2利用利用MFC AppWizard(exe)創(chuàng)建程序步驟創(chuàng)建程序步驟(1)生成應(yīng)用程序框架)生成應(yīng)用程序框架 利用應(yīng)用程序向?qū)Ю脩?yīng)用程序向?qū)FC AppWizard(exe)創(chuàng)建一個單文檔的應(yīng)用程
48、序創(chuàng)建一個單文檔的應(yīng)用程序框架,該工程的名稱為框架,該工程的名稱為MyDraw,向?qū)У拿總€步驟都使用缺省的。向?qū)У拿總€步驟都使用缺省的。Visual C+Visual C+【例【例8-3】續(xù)】續(xù)1(2)在視圖類)在視圖類CMyDraw添加數(shù)據(jù)成員添加數(shù)據(jù)成員在工程在工程MyDraw的工作區(qū)中,選擇的工作區(qū)中,選擇“ClassView”選項卡,在選項卡,在類名列表窗口中選擇視圖類類名列表窗口中選擇視圖類“CMyDrawView”,然后單擊鼠標(biāo)右然后單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇鍵,在彈出的快捷菜單中選擇“Add Member Variable”命令,則命令,則彈出圖彈出圖8.2所示的對話框
49、。在所示的對話框。在“Variable Type”編輯框中輸入編輯框中輸入bool,在在“Variable Name”編輯框中輸入編輯框中輸入m_IsDraw,選擇選擇Access(訪訪問控制屬性問控制屬性)為為Private(私有私有)。最后按。最后按“OK”按鈕,則在視圖類按鈕,則在視圖類CMyDrawView中添加了一個中添加了一個bool型的私有成員變量型的私有成員變量m_IsDraw,用于標(biāo)記是否開始繪制直線,當(dāng)該值為真時,代表開始畫直線,為用于標(biāo)記是否開始繪制直線,當(dāng)該值為真時,代表開始畫直線,為假時,代表停止畫直線。假時,代表停止畫直線。 另外,為了確定所畫線的起始點和終止點,需
50、要在視圖類中添加另外,為了確定所畫線的起始點和終止點,需要在視圖類中添加兩個兩個CPoint型的成員變量型的成員變量m_StartPoint和和m_EndPoint,前者存前者存放直線的起始點,后者存放直線的終止點,添加的方法同上。放直線的起始點,后者存放直線的終止點,添加的方法同上。Visual C+Visual C+圖圖8.2Visual C+Visual C+【例【例8-3】續(xù)】續(xù)2(3)對成員變量)對成員變量m_IsDraw進(jìn)行初始化進(jìn)行初始化 在視圖類在視圖類CMyDrawView的構(gòu)造函數(shù)中添加如下的的構(gòu)造函數(shù)中添加如下的代碼可以實現(xiàn)對數(shù)據(jù)成員的初始化。代碼可以實現(xiàn)對數(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)自動按鈕,光標(biāo)自動定位到定位到OnLButtonDown 實現(xiàn)處,在該消息映實現(xiàn)處,在該消息映射函數(shù)中添加后的代碼如下:射函數(shù)中添加后的代碼如下:void CMyDrawView:OnLButtonDown(UINT nFlags, CPoint point) m_IsDraw=true; /開始繪制直線開始繪制直線m_StartPoint=m_EndPoint=point; /開始開始畫線時起始點與終止點重合畫線時起
53、始點與終止點重合CView:OnLButtonDown(nFlags, point); Visual C+Visual C+【例【例8-3】續(xù)】續(xù)4(5)添加鼠標(biāo)移動的消息映射函數(shù))添加鼠標(biāo)移動的消息映射函數(shù) 與上一步類似,利用與上一步類似,利用ClassWizard為視圖類為視圖類CMyDrawView添添加擊鍵消息加擊鍵消息WM_MOUSEMOVE的消息映射函數(shù)的消息映射函數(shù)OnMouseMove(),并在該函數(shù)中添加代碼,以用于移動屏幕并在該函數(shù)中添加代碼,以用于移動屏幕上的圖形上的圖形(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ū)繪制三個菱形圖、利用繪圖
55、函數(shù)在客戶區(qū)繪制三個菱形圖形。形。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繪圖需要兩個要素:繪圖需要兩個要素:設(shè)備描述表設(shè)備描述表和和基本基本繪圖工具繪圖工具。設(shè)備描述表是由。設(shè)備描述表是由CDC類及其派生類類及其派生類來描述,它是一個來描述,它是一個畫圖的畫布,提供繪圖的場畫圖的
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)的繪圖工具不能滿足我們的需求時,就需要更改默認(rèn)繪圖工具,達(dá)到繪制豐富時,就需要更改默認(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 使用畫筆使用畫筆 畫筆是最簡單的一種繪圖工具,同時也是最重畫筆是最簡單的一種繪圖工具,同時也是最重要的一種繪圖對象。要的一種繪圖對象。在現(xiàn)實世界中在現(xiàn)實世界中,可以用不同的可以用不同的筆產(chǎn)生不同的線。這正如繪圖用的彩筆、不同顏筆產(chǎn)生不同
58、的線。這正如繪圖用的彩筆、不同顏色筆產(chǎn)生不同顏色的線。色筆產(chǎn)生不同顏色的線。Windows也是利用這種也是利用這種面向?qū)ο蟮拿枋鍪挛锏姆椒?,把筆作為一個對象,面向?qū)ο蟮拿枋鍪挛锏姆椒ǎ压P作為一個對象,和現(xiàn)實世界一樣,不同的筆產(chǎn)生不同的線。和現(xiàn)實世界一樣,不同的筆產(chǎn)生不同的線。 1 畫筆類畫筆類CpenCPen對象封裝了對象封裝了Windows GDI筆,并提供與筆,并提供與CPen對象一起工作的幾種方法。對象一起工作的幾種方法。Visual C+Visual C+8.4.2續(xù)續(xù)1 2畫筆工具的操作步驟畫筆工具的操作步驟(1)聲明)聲明CPen對象。對象。(2)初始化畫筆。)初始化畫筆。通過調(diào)
59、用通過調(diào)用CreatePen成員函數(shù)可以初始化筆,該函數(shù)的成員函數(shù)可以初始化筆,該函數(shù)的原型為:原型為:BOOL CreatePen( int nPenStyle, int nWidth,COLORREF crColor );(3)將新建的畫筆對象選進(jìn)設(shè)備場景中,同時保存原)將新建的畫筆對象選進(jìn)設(shè)備場景中,同時保存原畫筆對象的指針:畫筆對象的指針:pOldPen=pDC-SelectObject(&pen);(4)調(diào)用繪圖函數(shù)生成圖形。調(diào)用繪圖函數(shù)生成圖形。(5)選擇設(shè)備場景的原有筆對象。)選擇設(shè)備場景的原有筆對象。Visual C+Visual C+ 表表8.5 nPenStyle
60、的取值的取值筆樣式筆樣式說明說明PS_SOLID (0)創(chuàng)建創(chuàng)建實線筆實線筆PS_DASH (1)當(dāng)筆寬度為當(dāng)筆寬度為1時,創(chuàng)建時,創(chuàng)建虛線筆虛線筆PS_DOT (2)當(dāng)筆寬度為當(dāng)筆寬度為1時,創(chuàng)建時,創(chuàng)建點線筆點線筆PS_DASHDOT(3)當(dāng)筆寬度為當(dāng)筆寬度為1時,創(chuàng)建時,創(chuàng)建虛點線筆虛點線筆PS_DASHDOTDOT(4) 當(dāng)筆寬度為當(dāng)筆寬度為1時,創(chuàng)建時,創(chuàng)建交替直線和交替直線和雙點線的筆雙點線的筆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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車輛過戶協(xié)議書范文
- 信息技術(shù)與課堂互動的融合心得體會
- 二零二五工資合同范例
- 醫(yī)療機(jī)構(gòu)患者投訴的處理及干預(yù)流程
- 最高額循環(huán)借款合同范例
- 2024-2025年幼兒園課程改革實施計劃
- 博物館無障礙服務(wù)工作流程
- 小學(xué)音樂教育對兒童社交能力的促進(jìn)作用
- 2025年客戶滿意度提升方案與計劃
- 2025藥店安全生產(chǎn)工作標(biāo)準(zhǔn)
- 工業(yè)園物業(yè)服務(wù)項目管理規(guī)章制度
- 工程力學(xué) 第5版 課件 第2章 平面力系
- 金融門店經(jīng)理競聘
- 《步進(jìn)式拋雪機(jī)》
- 南京理工大學(xué)泰州科技學(xué)院《電路》2022-2023學(xué)年第一學(xué)期期末試卷
- 2023年中央戲劇學(xué)院招聘考試真題
- 2024年道路運輸安全生產(chǎn)管理制度樣本(5篇)
- 中醫(yī)體重管理
- 《煤礦電氣安全培訓(xùn)》課件
- 學(xué)校教師職稱評定量化評分細(xì)則
- 中國聚乙烯催化劑行業(yè)發(fā)展?fàn)顩r及需求規(guī)模預(yù)測研究報告(2024-2030版)
評論
0/150
提交評論