用Visual C++生成基本圖形_第1頁
用Visual C++生成基本圖形_第2頁
用Visual C++生成基本圖形_第3頁
用Visual C++生成基本圖形_第4頁
用Visual C++生成基本圖形_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、3.5 用Visual C+生成基本圖形 VC+程序需要在屏幕或打印機上繪圖時,都要調(diào)用GDI(圖形設(shè)備接口)函數(shù)。 3.5.1 3.5.1 圖形設(shè)備接口(圖形設(shè)備接口(GDIGDI)GDI的工作原理大致如下:首先,Windows提供各種顯示卡及打印機的驅(qū)動程序;其次,各種GDI函數(shù)會自動參考被稱為設(shè)備環(huán)境的數(shù)據(jù)結(jié)構(gòu),而Windows則自動將設(shè)備環(huán)境結(jié)構(gòu)映射到相應(yīng)的物理設(shè)備,并且提供正確的輸入/輸出指令。GDI在處理速度上幾乎和直接進行視頻訪問一樣快,并且它還允許Windows的不同應(yīng)用程序共享顯示器。GDI包含了可用于繪制點、線、矩形、多邊形、橢圓、位圖以及文本的功能函數(shù)。為了方便使用,在V

2、C+中對其進行了封裝,形成了GDI對象類。 所有GDI對象類的抽象基類都是CGdiObject,而所有實際使用的GDI對象則是從CGdiObject派生出來的,以下是GDI對象類的列表: n CFontCFont字體,它是一種具有某種風格和尺寸的所有字符的完整集合,常常被當作資源存于磁盤中,其中有一些還要依賴某種設(shè)備。n CPenCPen畫筆,它是用來畫線和繪制有形邊框的。具體使用時,可以指定其顏色和寬度,也可以指定其線型,例如:實線、虛線或點線。n CBrushCBrush畫刷,通過定義一種位圖矩陣,用它可以對區(qū)域內(nèi)部進行填充。n CRgnCRgn區(qū)域,它是由多邊形、橢圓或者二者組合形成的一

3、種范圍,可以利用它來進行填充、裁剪以及鼠標點中測試。 n CBitmapCBitmap位圖,它是一種位圖矩陣,每一個顯示像素都對應(yīng)于其中的一個或多個位。位圖可以用來表示圖像,也可以用來創(chuàng)建刷子。n CPaletteCPalette調(diào)色板,它是一種顏色映射接口,允許一個應(yīng)用程序在不干擾其他應(yīng)用程序的前提下,充分利用輸出設(shè)備的顏色繪制能力。注意:調(diào)色板一般只在顏色數(shù)為256種或更少的情況下才使用。3.5.2 VC+繪圖方法用計算機繪圖與普通的手工繪圖類似,在OnDraw等函數(shù)中繪制圖形時,必須首先選擇好畫筆和畫刷等繪圖工具,確定好繪圖坐標及比例尺,然后根據(jù)需要選用適當?shù)睦L圖函數(shù)繪出圖形。因此,與繪

4、圖有關(guān)的圖形程序庫可以分為以下五類:繪圖工具選擇函數(shù)、坐標系統(tǒng)設(shè)置與轉(zhuǎn)換函數(shù)、繪圖模式與背景設(shè)置函數(shù)、繪圖函數(shù)區(qū)域填充函數(shù)。繪圖工具選擇函數(shù)n 選擇庫存繪圖工具選擇庫存繪圖工具函數(shù)原型是:virtual CGdiObject* SelectStockObject(int nIndex); nIndex是所要選入設(shè)備文本對象的庫存對象代碼,對于畫刷和畫筆,其值如表31所示。 例如,可以使用以下代碼選擇白色畫筆和黑色畫刷: pDC-SelectStockObject(WHITE_PEN); pDC-SelectStockObject(BLACK_BRUSH);宏代碼庫存對象宏代碼庫存對象BLACK

5、_BRUSH黑色畫刷NULL_BRUSH空畫刷(內(nèi)部不填充)DKGRAY_BRUSH深灰色畫刷WHITE_BRUSH白色畫刷GRAY_BRUSH灰色畫刷BLACK_PEN黑色畫刷HOLLOW_BRUSH透明窗口畫刷NULL_PEN空畫筆(什么也不畫)LTGRAY_BRUSH淺灰色畫刷WHITE_PEN白色畫筆表31 畫刷和畫筆的顏色代碼 1.可以先構(gòu)造畫筆對象,然后用函數(shù)CreatePen初始化。函數(shù)原型為:BOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor);其中,nPenStyle:畫筆風格,其值如表32。nWidth:畫筆的寬

6、度(邏輯單位),crColor:畫筆的顏色。 2.畫筆對象初始化后,就可以調(diào)用CDC的成員函數(shù)SelectObject將畫筆選入設(shè)備文本對象。對于畫筆,SelectObject的原型為:CPen* SelectObject(CPen* pPen);其中,參數(shù)pPen是指向畫筆對象的指針。 定制畫筆定制畫筆畫筆風格含義畫筆風格含義PS_DASH劃線,即為虛線PS_INSIDEFRAME在邊界區(qū)域內(nèi)實筆畫線PS_DASHDOT點劃線PS_NULL空畫筆PS_DASHDOTDOT雙點劃線PS_SOLID實線PS_DOT點線 表32 畫筆風格與含義 畫刷風格:實心,網(wǎng)格,模式,空四種風格除空畫刷,其余

7、畫刷先構(gòu)造,再按下面方法之一初始化: (1) 純色填充圖形的內(nèi)部。函數(shù)原型為:BOOL CreateSolidBrush(COLORREF crColor); /crColor畫刷顏色(2) 影線模式來填充圖形的內(nèi)部。函數(shù)原型為BOOL CreateHatchBrush (int nIndex, COLORREF crColor);其中,參數(shù)nIndex用于指定影線模式,其值如表33。 定制畫刷定制畫刷陰影模式含義陰影模式含義HS_BDIAGONAL反斜線HS_FDIAGONAL斜線HS_CROSS十字線HS_HORIZONAL水平線HS_DIAGCROSS斜十字線HS_VERTICAL豎線表

8、33 影線模式 (3) 圖案模式來填充圖形的內(nèi)部。函數(shù)原型為:BOOL CreatePatternBrush (CBitmap* pBitmap);其中,參數(shù)pBitmap是指向位圖對象的指針。當用畫刷填充圖形時,圖形內(nèi)部將用位圖一個接一個地填充。初 始 化 完 畫 刷 對 象 之 后 , 就 可 以 調(diào) 用 C D C 的 成 員 函 數(shù)SelectObject將畫刷選入設(shè)備文本對象。對于畫刷,SelectObject的原型為:CBrush* SelectObject(CBrush* pBrush);其中,參數(shù)pBrush是指向畫刷對象的指針。SelectObject返回一個指向原先已選入設(shè)

9、備文本對象的畫刷對象的指針。如果在此之前沒有選擇過畫刷對象,則使用缺省畫刷。 坐標系統(tǒng)設(shè)置和轉(zhuǎn)換函數(shù) 邏輯坐標是指用戶使用CDC繪圖函數(shù)繪制圖形的坐標; 設(shè)備坐標是指計算機系統(tǒng)使用輸出設(shè)備(顯示器或打印機)來繪出圖形的坐標。 設(shè)備坐標是用戶不能改變的。設(shè)備坐標的原點總是在左上角。改變邏輯坐標與設(shè)備坐標的關(guān)系使用CDC的映射模式設(shè)置函數(shù)。 映射模式 映射模式用于定義邏輯坐標的單位與設(shè)備坐標間的關(guān)系。在缺省的映射模式下,邏輯坐標與設(shè)備坐標相同,坐標原點也在窗口左上角,以像素為單位,橫坐標隨光標向右移動而增加,縱坐標隨光標向下移動而增加。 Windows包含八種不同的映射模式(見表34),每種映射模

10、式在應(yīng)用程序中都有特定的用途。映射模式邏輯單位設(shè)備單位軸向MM_HIENGLISH10001英寸 X軸向右,Y軸向上MM_HIMETRIC1001毫米MM_LOENGLISH1001英寸MM_LOMETRIC101毫米MM_TWIPS14401英寸MM_TEXT1設(shè)備像素X軸向右,Y軸向下MM_ANISOTROPIC X和Y的比例可以不一致MM_ISOTROPIC X和Y的比例一致表34 Windows包含的八種映射模式 設(shè)置映射模式:函數(shù)原型為virtual int SetMapMode(int nMapMode);參數(shù)nMapMode為前面列出的八種映射模式之一。設(shè)備坐標轉(zhuǎn)換為邏輯坐標,函

11、數(shù)原型為:void DPtoLP(LPPOINT lpPoints, int nCount = 1);void DPtoLP(LPRECT lpRect);void DPtoLP(LPSIZE lpsize);參數(shù)lpPoints是指向POINT結(jié)構(gòu)或CPoint對象的數(shù)組,nCount表示數(shù)組中的點數(shù)。lpRect指向RECT結(jié)構(gòu)或CRect對象,使用這個參數(shù)表示將矩形區(qū)域的設(shè)備點轉(zhuǎn)換為邏輯點。lpsize指向SIZE結(jié)構(gòu)或CSize對象。邏輯坐標轉(zhuǎn)換為設(shè)備坐標,函數(shù)原型為:void LPtoDP(LPPOINT lpPoints, int nCount = 1);void LPtoDP(L

12、PRECT lpRect);void LPtoDP(LPSIZE lpsize);繪圖模式與背景設(shè)置函數(shù)n 設(shè)置繪圖模式n 繪圖模式指定Windows如何組合畫筆和顯示設(shè)備上的當前顏色的方式。線的繪制除了由畫筆的顏色和寬度決定外,也受當前繪圖模式的影響n改變繪圖模式的函數(shù)原型為: int SetROP2(int nDrawMode); 參數(shù)nDrawMode指定所要求的繪圖模式,其值如下表: 背景顏色設(shè)置函數(shù)原型為:virtual COLORREF SetBkColor(COLORREF crColor); 背景模式設(shè)置函數(shù)原型為:int SetBkMode(int nBkMode);參數(shù)nB

13、kMode指定背景模式,其值可以為: OPAQUE:圖形背景為SetBkColor設(shè)置的當前背景顏色 TRANSPARENT:圖形背景為當前顯示設(shè)備上的顏色 繪圖函數(shù)(1)(1) 設(shè)置像素設(shè)置像素( (畫點畫點) )函數(shù)原型為:COLORREF SetPixel(int x,int y, COLORREF crColor);COLORREF SetPixel(POINT point, COLORREF crColor);像素點的位置由參數(shù)x和y或者point指定,crColor指定顏色。(2 2) 畫直線畫直線MoveTo函數(shù)的原型為:CPoint MoveTo(int x,int y);/當

14、前位置由參數(shù)x和y指定CPoint MoveTo(POINT point);/當前位置由point指定繪制直線函數(shù)原型為:BOOL LineTo(int x,int y);BOOL LineTo(POINT point);可以調(diào)用Polyline函數(shù)畫一系列直線。函數(shù)原型為:BOOL Polyline(LPPOINT lpPoints,int nCount);lpPoints指定包含線段頂點的POINT結(jié)構(gòu)數(shù)組,nCount指定數(shù)組中的點數(shù)。畫矩形有兩個CDC 成員函數(shù):Rectangle和RoundRect。函數(shù)Rectangle畫的是方角矩形函數(shù)RoundRect畫的是圓角矩形函數(shù)Rect

15、angle的原型為:BOOL Rectangle(int x1,int y1,int x2,int y2) ;BOOL Rectangle(LPCRECT lpRect) ;矩形區(qū)域由參數(shù)(x1,y1)和(x2,y2)或者lpRect指定。左上角坐標為(x1,y1),右下角坐標為(x2,y2)。函數(shù)RoundRect的原型為:BOOL RoundRect(int x1,int y1,int x2,int y2,intx3,int y3 ) ;BOOL RoundRect(LPCRECT lpRect,POINT point) ;矩形區(qū)域由參數(shù)(x1,y1)和(x2,y2)或者lpRect指定。

16、左上角坐標為(x1,y1),右下角坐標為(x2,y2)。矩形區(qū)域的圓角由(x3,y3)或者point確定,x3和y3分別指定圓角曲線的寬度和高度。 (4)(4) 畫弧畫弧畫弧函數(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ù)(x1,y1)和(x2,y2)或者lpRect定義(x1,y1)是邊界矩形的左上角坐標,(x

17、2,y2)是邊界矩形的右下角坐標。(x3,y3)或者ptStart是弧的起始點。(x4,y4)或者ptEnd是弧的終止點。此外,畫弧還可以使用CDC的成員函數(shù)ArcTo,函數(shù)原型為:BOOL ArcTo(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) ;BOOL ArcTo(LPCRECT lpRect,POINT ptStart, POINT ptEnd);函數(shù)ArcTo與Arc基本相同,不同之處在于ArcTo函數(shù)將當前位置更新為弧的終止點。 (5)(5) 畫橢圓和圓畫橢圓和圓函數(shù)原型為:BOOL Ellipse(int x1

18、,int y1,int x2,int y2) ;BOOL Ellipse (LPCRECT lpRect) ;參數(shù)(x1,y1)和(x2,y2)或者lpRect定義的是與橢圓相切的邊界矩形,矩形的左上角坐標是(x1,y1),右下角坐標是(x2,y2)。如果要畫圓而非橢圓,可以指定正方形為外切邊界矩形,此時x2-x1等于y2-y1。餅圖(Pie),多邊形(Polygon),樣條曲線(PolyBezier)等參見P.60區(qū)域填充的函數(shù)(1)(1) FillRectFillRect函數(shù)函數(shù)原型為:void FillRect(LPCRECT lpRect,CBrush* pBrush);參數(shù)lpRect用于指定要填充的矩形,pBrush指定用于填充的畫刷。(2)(2) FillRgnFillRgn函數(shù)函數(shù)原型為:void FillRgn(CRgn* pRgn,CBrush* pBrush);參數(shù)pRgn用于指定要填充的區(qū)域,pBrush指定用于填充的畫刷

溫馨提示

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

評論

0/150

提交評論