CG04VC++繪圖程序設(shè)計(jì)_第1頁
CG04VC++繪圖程序設(shè)計(jì)_第2頁
CG04VC++繪圖程序設(shè)計(jì)_第3頁
CG04VC++繪圖程序設(shè)計(jì)_第4頁
CG04VC++繪圖程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、本章內(nèi)容MFC上機(jī)操作步驟基本繪圖函數(shù) 編輯課件MFC上機(jī)操作步驟編輯課件關(guān)于工具Visual C+ 6.0是目前使用極為廣泛的可視化編程平臺。使用VC+語言開發(fā)的圖形,與使用Turbo C語言開發(fā)的圖形相比,不僅可以顯示真彩色,而且可以實(shí)現(xiàn)交互式繪圖。編輯課件Microsoft Foundation Class Library微軟基類庫MFC是以C+形式封裝的Windows API(Application Program Interface),包含了一百多個(gè)已經(jīng)定義好的常用類。 編輯課件MFC的上機(jī)操作過程啟動Microsoft Visual C+ 6.0從【File】菜單中選擇【New】命

2、令,彈出【New】對話框,切換到【Projects】選項(xiàng)卡。在左邊窗口中選擇MFC AppWizard(exe),在右邊的Projects name文本框中鍵入應(yīng)用程序名,這里輸入Test,在Location文本框中出現(xiàn)用于存放應(yīng)用程序的根目錄,這里設(shè)置為D:Test。其余保持默認(rèn)值。如圖所示。單擊【OK】按鈕。編輯課件編輯課件在對話框【MFC AppWizard-Step1】中,選中Single Document單選按鈕,其余保持默認(rèn)值,如圖所示。單擊【Finish】按鈕結(jié)束。編輯課件完成上述步驟后,應(yīng)用程序Test的框架即被生成,出現(xiàn)程序工作區(qū)。如圖所示。編輯課件在工作區(qū)的【ClassVi

3、ew】面板中顯示所創(chuàng)建的類和成員函數(shù) 編輯課件在【Resource View】面板中顯示所創(chuàng)建的資源 編輯課件在【FileView】面板中顯示源程序文件,主要包括程序源文件(*.CPP) 、頭文件(*.h) 和資源文件(*.ico、*.bmp等) 編輯課件從【ClassView】面板可以看出CTestApp是應(yīng)用的主函數(shù)類,用來處理消息。MFC中的數(shù)據(jù)是存儲在CTestDoc類文檔中結(jié)果的顯示是在CTestView類中文檔類負(fù)責(zé)管理和維護(hù)數(shù)據(jù)本身視圖類負(fù)責(zé)處理用戶鼠標(biāo)和鍵盤的操作編輯課件全部展開FileView面板后,顯示如圖的界面內(nèi)容后續(xù)的編程過程中一般使用的是CTestView類的Test

4、View.h頭文件和TestView.cpp源文件。編輯課件OnDraw(CDC* pDC)函數(shù)void CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDC定義為CDC類的指針。pDoc通過GetDocument()函數(shù)得到了指向文檔類CTestDoc的指針。編輯課件OnDraw(CDC* pDC)函數(shù)void CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(

5、pDoc)函數(shù)使pDoc指針有效。使用pDC指針,可以對CDC類的成員函數(shù)進(jìn)行操作。注意:OnDraw函數(shù)是由系統(tǒng)框架直接調(diào)用的,程序一運(yùn)行就會自動執(zhí)行。編輯課件!按鈕點(diǎn)擊工具條上的 “!”按鈕,就可以直接編譯、運(yùn)行程序盡管未編寫一句代碼,但Test程序已經(jīng)形成一個(gè)可執(zhí)行程序框架編輯課件基本繪圖函數(shù)在Windows平臺上,應(yīng)用程序的圖形設(shè)備接口(Graphics Device Interface,GDI)被抽象化為設(shè)備環(huán)境(Device Content,DC) 在微軟基類庫MFC中,CDC類是定義設(shè)備上下文對象的基類,所有繪圖函數(shù)都在CDC基類中定義。編輯課件CDC類結(jié)構(gòu)和GDI對象映射模式C

6、DC類的主要繪圖成員函數(shù)設(shè)備環(huán)境的調(diào)用和釋放VC+繪制圖形的幾種方法編輯課件CDC類結(jié)構(gòu)和GDI對象編輯課件1. CDC類編輯課件CDC類有4個(gè)派生類編輯課件CClientDC類顯示器客戶區(qū)設(shè)備上下文類CClientDC只能在窗口的客戶區(qū)(不包括邊框、標(biāo)題欄、菜單欄以及狀態(tài)欄的空白區(qū)域)進(jìn)行繪圖點(diǎn)(0,0)是客戶區(qū)的左上角其構(gòu)造函數(shù)調(diào)用GetDC函數(shù)其析構(gòu)函數(shù)調(diào)用ReleaseDC函數(shù)編輯課件CMetaFileDC類Windows圖元文件設(shè)備上下文類CMetaFileDC封裝了在一個(gè)Windows圖元文件中繪圖的方法圖元文件是一系列與設(shè)備無關(guān)的圖片的集合,由于它對圖像的保存比像素更精確,因而往

7、往在要求較高的場合下使用例如,AutoCAD中的圖像保存等。編輯課件CPaintDC類是成員函數(shù)OnPaint中使用的顯示器上下文類CPaintDC只在處理WM_PAINT消息中使用,用戶一旦獲得相關(guān)的CDC指針,就可以將它當(dāng)做任何設(shè)備環(huán)境(包括屏幕、打印機(jī))的指針來使用CPaintDC類的構(gòu)造函數(shù)會自動調(diào)用CWnd:BeginPaintCPaintDC類的析構(gòu)函數(shù)則會自動調(diào)用CWnd:EndPaint 編輯課件CWindowDC類整個(gè)窗口區(qū)域的顯示器設(shè)備上下文類,包括客戶區(qū)和非客戶區(qū)CWindowDC允許在窗口的任意位置中進(jìn)行繪圖,點(diǎn)(0,0)指整個(gè)窗口的左上角其構(gòu)造函數(shù)調(diào)用GetWindo

8、wDC其析構(gòu)函數(shù)調(diào)用ReleaseDC編輯課件關(guān)于DC的一些示例編輯課件1.HDCHDC hdc;hdc-=:GetDC(m_hWnd);MoveToEx(hdc,10,10,NULL);LineTo(hdc,20,20);:ReleaseDC(m_hWnd,hdc);編輯課件2.CDCCDC *Pdc=GetDC();pDC-MoveTo(10,10);pDC-LineTo(20,20);Pdc-ReleaseDC()編輯課件3.CClientDCCClientDC dc(this);dc.MoveTo(10,10);dc.LineTo(20,20);編輯課件4.CWindowDCCWind

9、owDC dc(this);dc.MoveTo(10,10);dc.LineTo(20,20);編輯課件5.獲取上級窗口CWindowDC dc(GetParent();dc.MoveTo(0,0);dc.LineTo(50,50);編輯課件5.獲取桌面CWindowDC dc(GetParent();dc.MoveTo(0,0);dc.LineTo(50,50);編輯課件2. 常用繪圖類編輯課件常用繪圖類編輯課件常用繪圖類CPoint類:存放點(diǎn)坐標(biāo)(x,y)。CRect類:存放矩形左上角頂點(diǎn)和右下角頂點(diǎn)的坐標(biāo)(top,left,right,bottom)Csize類:存放矩形的寬度和高度的坐

10、標(biāo)(cx,cy),其中cx為矩形的寬度,cy為矩形的高度。編輯課件3. 繪圖工具類編輯課件繪圖工具類編輯課件繪圖工具類CGdiObject類:GDI繪圖工具的基類,一般不能直接使用。CBitmap:封裝了一個(gè)GDI位圖,提供位圖操作的接口。CBrush類:封裝了GDI畫刷,可以選作設(shè)備上下文的當(dāng)前畫刷。畫刷用于填充圖形內(nèi)部。編輯課件繪圖工具類CFont:封裝了GDI字體,可以選作設(shè)備上下文中的當(dāng)前字體。CPallette:封裝了GDI調(diào)色板,提供應(yīng)用程序和顯示器之間的顏色接口。CPen:封裝了GDI畫筆,可以選作設(shè)備上下文的當(dāng)前畫筆。畫筆是用于繪制圖形邊界線。編輯課件映射模式把圖形顯示在屏幕坐

11、標(biāo)系中的過程稱為映射根據(jù)映射模式的不同可以分為邏輯坐標(biāo)設(shè)備坐標(biāo)邏輯坐標(biāo)的單位是米制尺度或其它與字體相關(guān)的尺度設(shè)備坐標(biāo)的單位是像素編輯課件映射模式模式代碼坐標(biāo)單位坐標(biāo)系特征MM_TEXT一個(gè)像素設(shè)備坐標(biāo)。屏幕左上角為坐標(biāo)原點(diǎn),X軸向右,Y軸向下。MM_LOMETRIC0.1mm邏輯坐標(biāo)。坐標(biāo)原點(diǎn)位置可以自由設(shè)置,X軸向右,Y軸向上。MM_HIMETRIC0.01mm邏輯坐標(biāo)。坐標(biāo)原點(diǎn)位置可以自由設(shè)置,X軸向右,Y軸向上。MM_LOENGLISH0.01inch邏輯坐標(biāo)。坐標(biāo)原點(diǎn)位置可以自由設(shè)置,X軸向右,Y軸向上。MM_HIENGLISH0.001inch邏輯坐標(biāo)。坐標(biāo)原點(diǎn)位置可以自由設(shè)置,X軸

12、向右,Y軸向上。編輯課件映射模式模式代碼坐標(biāo)單位坐標(biāo)系特征MM_TWIPS1/440inch或1/20點(diǎn)邏輯坐標(biāo)。坐標(biāo)原點(diǎn)位置可以自由設(shè)置,X軸向右,Y軸向上。MM_ISOTROPIC用戶自定義,X軸和Y軸比例相等邏輯坐標(biāo)。坐標(biāo)原點(diǎn)位置可以自由設(shè)置,X軸和Y軸方向自定義。MM_ANSIOTROPIC用戶自定義,X軸和Y軸比例獨(dú)立設(shè)置邏輯坐標(biāo)。坐標(biāo)原點(diǎn)位置可以自由設(shè)置,X軸和Y軸方向自定義。編輯課件映射模式在缺省情況下,一般使用的是設(shè)備坐標(biāo)系MM_TEXT,坐標(biāo)原點(diǎn)位于客戶區(qū)的左上角,X軸水平向右,Y軸垂直向下,坐標(biāo)基本單位為一個(gè)像素。 編輯課件1. 設(shè)置映射模式函數(shù)類屬:CDC:SetMapM

13、ode原型:virtual int SetMapMode(int nMapMode );返回值:原映射模式。參數(shù)說明:nMapMode是表2-1的模式代碼。編輯課件2. 設(shè)置窗口范圍函數(shù)類屬:CDC:SetWindowExt 原型:virtual CSize SetWindowExt ( int cx, int cy );返回值:原窗口范圍的CSize對象。參數(shù)說明:cx窗口x范圍的邏輯坐標(biāo),cy窗口y范圍的邏輯坐標(biāo)。編輯課件3. 設(shè)置視區(qū)范圍函數(shù)類屬:CDC:SetViewportExt 原型:virtual CSize SetViewportExt( int cx, int cy );返回

14、值:原視區(qū)范圍的CSize對象。參數(shù)說明:cx視區(qū)x范圍的邏輯坐標(biāo),cy視區(qū)范圍的邏輯坐標(biāo)。編輯課件4. 設(shè)置視區(qū)坐標(biāo)原點(diǎn)函數(shù)類屬:CDC:SetViewportOrg 原型:virtual CPoint SetViewportOrg( int x, int y );返回值:原視區(qū)原點(diǎn)的CPoint對象。參數(shù)說明:參數(shù)x,y是視區(qū)的新原點(diǎn)坐標(biāo)。 編輯課件CDC類的主要繪圖成員函數(shù) 編輯課件1. 繪制像素函數(shù)類屬:CDC:SetPixel 原型:COLORREF SetPixel(int x,int y,COLORREF crColor );設(shè)置某像素點(diǎn)的RGB值編輯課件1. 繪制像素函數(shù)參數(shù)說

15、明:SetPixel 函數(shù)中,COLORREF是32位顏色數(shù)據(jù)類型;第一和第二個(gè)參數(shù)x,y是像素點(diǎn)位置的邏輯坐標(biāo)值,第三個(gè)參數(shù)crColor是像素點(diǎn)的顏色值,COLORREF型變量可以利用RGB(bRed,bGreen,bBlue)來指定相應(yīng)的顏色值,每種顏色用一個(gè)字節(jié)表示,可以被設(shè)定為0255之間的任意值,0代表無色,255代表全色。 編輯課件2. 獲取像素顏色函數(shù)類屬:CDC:GetPixel 原型:COLORREF GetPixel(int x,int y)const;返回值:指定像素的RGB值。參數(shù)說明:得到指定像素的RGB顏色值編輯課件例4 在屏幕的(20,20)坐標(biāo)位置處繪制一個(gè)紅

16、色像素點(diǎn)。然后取出該像素點(diǎn)的顏色,在屏幕的(60,20)坐標(biāo)處繪制一個(gè)相同顏色的像素點(diǎn)。void CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);COLORREF c;pDC-SetPixel(20,20,RGB(255,0,0);c=pDC-GetPixel(20,20);pDC-SetPixel(60,20,c);編輯課件語句:COLORREF c;注釋:變量c用于存放像素點(diǎn)的顏色值語句:pDC-SetPixel(20,20,RGB(255,0,0);注釋:在屏幕的(20,20)坐標(biāo)位置

17、處,繪制一個(gè)紅色的像素點(diǎn)編輯課件語句: c=pDC-GetPixel(20,20);注釋: c保存該像素點(diǎn)的顏色語句: pDC-SetPixel(60,20,c);注釋:在像素點(diǎn)(60,20)處以顏色值c繪制一個(gè)像素點(diǎn)。編輯課件3. 畫筆函數(shù)畫筆是用來繪制直線、曲線或圖形的邊界線,是繪圖工具類之一畫筆通常具有線型、寬度和顏色三種屬性畫筆的線型通常有實(shí)線、虛線、點(diǎn)線、點(diǎn)劃線、雙點(diǎn)劃線、不可見線和內(nèi)框架線7種,這些線型都是以PS_為前綴的預(yù)定義標(biāo)識符編輯課件3. 畫筆函數(shù)默認(rèn)的畫筆是一個(gè)像素單位的黑色實(shí)線要想更換畫筆,可以在創(chuàng)建新畫筆對象后,將其選入設(shè)備上下文,就可使用新畫筆進(jìn)行繪圖。編輯課件畫筆

18、的風(fēng)格 風(fēng)格代碼線型寬度顏色PS_SOLID實(shí)線任意指定純色PS_DASH虛線1(不可任意指定)純色PS_DOT點(diǎn)線1(不可任意指定)純色PS_DASHDOT點(diǎn)劃線1(不可任意指定)純色PS_DASHDOTDOT雙點(diǎn)畫線1(不可任意指定)純色PS_NULL不可見線1(不可任意指定)純色PS_INSIDEFRAME內(nèi)框架線任意指定純色編輯課件(1)創(chuàng)建畫筆函數(shù)類屬:CPen:CreatPen 原型:BOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor);返回值:非零。參數(shù)說明:第一個(gè)參數(shù)nPenStyle是畫筆的風(fēng)格代碼第二個(gè)參數(shù)nWi

19、dth是畫筆的寬度第三個(gè)參數(shù)crColor是畫筆的顏色。編輯課件(2)選擇畫筆函數(shù)類屬:CPen:SelectObject 原型:Cpen *SelectObject(Cpen *pPen);返回值:被替代畫筆的指針。參數(shù)說明:參數(shù)pPen是Cpen類的被選中的新畫筆對象指針。本函數(shù)把原畫筆換成新畫筆,同時(shí)返回指向原畫筆的指針。編輯課件(3)刪除畫筆函數(shù)類屬:CGdiObject:DeleteObject 原型:BOOL DeleteObject( );返回值:非零。參數(shù)說明:畫筆使用完畢,把已成自由狀態(tài)的畫筆從系統(tǒng)內(nèi)存中清除。編輯課件(4)選擇一支庫畫筆函數(shù)類屬:CDC:SelectStoc

20、kObject 原型:virtual CGdiObject *SelectStockObject(int nIndex);返回值:被替代的CGdiObject類對象的指針。 編輯課件(4)選擇一支庫畫筆函數(shù)參數(shù)說明:參數(shù)nIndex是庫筆代碼Windows系統(tǒng)中準(zhǔn)備了一些使用頻率較高的畫筆,不需要創(chuàng)建,可以直接選用。同樣,使用完庫畫筆時(shí)也不需要調(diào)用DeleteObject()函數(shù)從內(nèi)存中刪除已使用過的畫筆。編輯課件三種常用庫筆 庫筆代碼含義BLACK_PEN寬度為1的黑筆實(shí)線筆WHITE_PEN寬度為1的白筆實(shí)線筆NULL_PEN透明筆編輯課件4. 畫刷函數(shù)VC+中的畫刷用于對圖形內(nèi)部進(jìn)行填充

21、,也是繪圖工具類之一在使用VC+的畫刷之前必須先創(chuàng)建或選擇畫刷對象。編輯課件畫刷函數(shù)創(chuàng)建實(shí)體畫刷函數(shù)BOOL CreateSolidBrush(COLORREF crColor );選擇畫刷函數(shù)CBrush *SelectObject(CBrush *pBrush );刪除畫刷函數(shù)BOOL DeleteObject( );編輯課件創(chuàng)建陰影畫刷函數(shù)BOOL CreateHatchBrush(int nIndex,COLORREF crColor);第一個(gè)參數(shù)nIndex是陰影樣式代碼第二個(gè)參數(shù)crColor是陰影線的顏色編輯課件常用陰影樣式陰影樣式代碼含義HS_BDIAGONAL45度下降線HS

22、_CROSS水平和垂直交叉線HS_DIAGCROSS45度十字交叉線HS_FDIAGONAL45度上升陰影線HS_HORIZONTAL水平陰影線HS_VERTIAL垂直陰影線編輯課件選擇一只庫畫刷函數(shù)virtual CGdiObject *SelectStockObject(int nIndex);編輯課件常用庫畫刷庫畫刷代碼含義對應(yīng)的RGBBLACK_BRUSH黑刷子0,0,0DKGRAY_BRUSH暗灰刷64,64,64GRAY_BRUSH灰色刷128,128,128LTGRAY_BRUSH淺灰刷192,192,192WHITE_BRUSH白刷255,255,255NULL_BRUSH透明

23、刷HOLLOW_BRUSH空心刷編輯課件5. 繪制直線函數(shù)設(shè)置直線的起點(diǎn)位置CPoint MoveTo(int x,int y);設(shè)置直線的終點(diǎn)位置BOOL LineTo (int x,int y);參數(shù)說明:采用起點(diǎn)閉區(qū)間,終點(diǎn)開區(qū)間的處理方法繪制直線的函數(shù)不指定直線的顏色,直線顏色可以通過畫筆函數(shù)來指定。編輯課件例5 從屏幕的(20,30)到(200,300)畫一條一像素寬的藍(lán)色直線。編輯課件void CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CPen MyPen,*OldPen;

24、 MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255); OldPen=pDC-SelectObject(&MyPen);pDC-MoveTo(20,30);pDC-LineTo(200,300);pDC-SelectObject(OldPen);/加色MyPen.DeleteObject();編輯課件pDC-MoveTo(20,30);移動畫筆到(20,30)pDC-LineTo(200,300);從(20,30)畫線到(200,300)pDC-SelectObject(OldPen);將線畫成藍(lán)色編輯課件6. 繪制矩形函數(shù)類屬:CDC:Rectangle 原型:B

25、OOL Rectangle(int x1,int y1,int x2,int y2);返回值:非零。參數(shù)說明:該函數(shù)使用當(dāng)前畫刷填充矩形內(nèi)部,并用當(dāng)前畫筆繪制矩形邊界線。編輯課件例6 繪制左上角點(diǎn)為(100,100),右下角點(diǎn)為(600,300)的矩形。矩形邊框?yàn)橐幌袼貙挼乃{(lán)色邊界線,內(nèi)部填充紅色 編輯課件void CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CPen MyPen,* OldPen; MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255); Old

26、Pen=pDC-SelectObject(&MyPen);編輯課件CBrush MyBrush,*OldBrush;MyBrush.CreateSolidBrush(RGB(255,0,0);OldBrush=pDC-SelectObject(&MyBrush);pDC-Rectangle(100,100,600,300);/畫矩形pDC-SelectObject(OldPen); /恢復(fù)原始畫筆MyPen.DeleteObject();pDC-SelectObject(OldBrush); /恢復(fù)原始畫刷MyBrush.DeleteObject();編輯課件7. 繪制橢圓函數(shù)類屬:CDC:E

27、llipse 原型:BOOL Ellipse(int x1,int y1,int x2,int y2);返回值:非零。參數(shù)說明:Ellipse函數(shù)中,參數(shù)x1,y1是限定橢圓范圍的外接矩形左上角點(diǎn)的坐標(biāo);參數(shù)x2,y2是限定橢圓范圍的外接矩形右下角點(diǎn)的坐標(biāo)注意VC+中沒有專門的畫圓函數(shù),只是把圓繪制為長半軸和短半軸相等的橢圓。Ellipse函數(shù)使用當(dāng)前畫刷填充橢圓內(nèi)部,并用當(dāng)前畫筆繪制橢圓邊界線。編輯課件例7 將一個(gè)圓繪制在視區(qū)中央,圓的形狀依據(jù)視區(qū)形狀而定。當(dāng)窗口的形狀發(fā)生改變時(shí),圓的形狀也隨之改變。坐標(biāo)系的中點(diǎn)位于屏幕中心,X軸向右,Y軸向上。圓的邊界為一像素寬的藍(lán)色邊界線,內(nèi)部填充為紅色

28、。編輯課件void CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect Rect; /定義矩形對象GetClientRect(&Rect); /獲得當(dāng)前窗口的客戶區(qū)大小pDC-SetMapMode(MM_ANISOTROPIC); /設(shè)置MM_ANISOTROPIC映射模式 pDC-SetWindowExt(Rect.Width(),-Rect.Height(); /設(shè)置窗口范圍編輯課件pDC-SetViewportExt(Rect.right,-Rect.bottom); /設(shè)置視

29、區(qū)范圍pDC- SetViewportOrg(Rect.right/2,Rect.bottom/2); /設(shè)置視口原點(diǎn)編輯課件CPen MyPen,*OldPen; MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255); OldPen=pDC-SelectObject(&MyPen);CBrush MyBrush,*OldBrush;MyBrush.CreateSolidBrush(RGB(255,0,0);OldBrush=pDC-SelectObject(&MyBrush);pDC-Ellipse(-Rect.right/2, -Rect.bottom/2,Rec

30、t.right/2,Rect.bottom/2);pDC-SelectObject(OldPen); /藍(lán)邊MyPen.DeleteObject();pDC-SelectObject(OldBrush); /填充紅色MyBrush.DeleteObject(); 編輯課件8. 繪制圓弧函數(shù)BOOL Arc(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);參數(shù)說明:Arc函數(shù)中參數(shù)x1,y1是限定圓弧范圍的外接矩形左上角點(diǎn)坐標(biāo)參數(shù)x2,y2是限定圓弧范圍的外接矩形右下角點(diǎn)坐標(biāo)參數(shù)x3,y3為圓弧起點(diǎn)坐標(biāo),該參數(shù)不一定嚴(yán)格位于圓弧上

31、參數(shù)x4,y4為圓弧終點(diǎn)坐標(biāo),該參數(shù)也不一定嚴(yán)格位于圓弧上圓弧按逆時(shí)針方向繪制的。該函數(shù)使用當(dāng)前畫筆繪制圓弧邊界線。由于圓弧可能不封閉,所以圓弧不進(jìn)行填充。編輯課件例8 繪制第一象限內(nèi)的橢圓弧void CTestView:OnDraw(CDC* pDC) CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CPen MyPen,* OldPen; MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255); OldPen=pDC-SelectObject(&MyPen); pDC-Arc(100,100,600,300,1

32、00,200, 350,600); pDC-SelectObject(OldPen); MyPen.DeleteObject();編輯課件9. 繪制多邊形函數(shù)BOOL Polygon(LPPOINT lpPoints,int nCount);參數(shù)說明:第一個(gè)參數(shù)lpPoints指定多邊形頂點(diǎn)數(shù)組中每一個(gè)頂點(diǎn)是一個(gè)POINT結(jié)構(gòu)或CPoint對象第二個(gè)參數(shù)nCount指定多邊形數(shù)組中的頂點(diǎn)個(gè)數(shù)該函數(shù)用當(dāng)前畫筆繪制多邊形邊界線,用當(dāng)前畫刷填充多邊形內(nèi)部。編輯課件例9 繪制四個(gè)頂點(diǎn)分別位于視區(qū)上部中點(diǎn)、右部中點(diǎn)、下部中點(diǎn)和左部中點(diǎn)的菱形。邊界線為藍(lán)色,內(nèi)部用紅色填充編輯課件void CTestVie

33、w:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);CRect Rect;GetClientRect(&Rect); /獲得客戶區(qū)CPen PenBlue(PS_SOLID, 5, RGB(0, 0, 255); /定義粗藍(lán)色畫筆,繪制邊界線CPen* OldPen=pDC-SelectObject(&PenBlue); /選取畫筆CBrush BrushRed(RGB(255, 0, 0); /定義紅色畫刷,填充多邊形內(nèi)部CBrush* OldBrush = pDC-SelectObject(&BrushR

34、ed); /選取畫刷編輯課件CPoint p4; /定義多邊形頂點(diǎn)數(shù)組p0.x=Rect.left+Rect.Width()/2; p0.y=Rect.top; /計(jì)算頂部中點(diǎn)p1.x=Rect.right; p1.y=Rect.top+Rect.Height()/2; /計(jì)算右部中點(diǎn)編輯課件p2.x=p0.x; p2.y=Rect.bottom; /計(jì)算下部中點(diǎn)p3.x=Rect.left; p3.y=p1.y; /計(jì)算左部中點(diǎn)pDC-Polygon(p, 4);/繪制多邊形pDC-SelectObject(OldPen);/畫筆勾邊pDC-SelectObject(OldBrush);/畫刷填充編輯課件10. 填充函數(shù)void FillRect(LPCRECT lpRect,CBrush *pBrush);參數(shù)說明:第一個(gè)參數(shù)lpRect指定矩形,是一個(gè)Rect結(jié)構(gòu)或CRect對象第二個(gè)參數(shù)pBrush指定畫刷對象指針。該函數(shù)將用當(dāng)前畫刷填充矩形內(nèi)部,但不畫邊界線。編輯課件例10 繪制(100,100)和(400,200)確定的紅色矩形。編輯課件void CTestView:OnDraw(

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論