版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、4.1.1 基本的文本輸出 基本的文本或圖形的輸出要通過DC設(shè)備環(huán)境進行。VC中CDC類是定義設(shè)備環(huán)境的基類,它封裝了170多個成員函數(shù),包括文本輸出函數(shù)和繪圖函數(shù)。另外CDC還派生了CClientDC、CWindowDC、CPaintDC、CMetaFileDC等類,以滿足不同的用途需要。 4.1 文本輸出4.1.1 基本的文本輸出4.1 文本輸出輸出文本或繪圖三個步驟CDC在一個定義的函數(shù)中輸出文本或繪圖三個步驟: 1、 調(diào)用文本輸出或繪圖函數(shù)之前,先獲取設(shè)備環(huán)境對象;常用函數(shù):CWnd:GetDC()格式:CDC *GetDC();功能:獲取當(dāng)前窗口的設(shè)備環(huán)境對象的指針。典型用法: CD
2、C *pDC=GetDC();/獲取當(dāng)前窗口的設(shè)備環(huán)境對象指針。注:OnDraw函數(shù)忽略此步,因為它已由AppWizard自動生成了這個部分,并把對象地址傳遞給了該函數(shù)的pDC對象指針形參。 輸出文本或繪圖三個步驟 2、 調(diào)用文本輸出或繪圖函數(shù)時,要正確地引用設(shè)備環(huán)境;如要在客戶區(qū)的(100,100)位置輸出字符串“馬到成功!”的典型代碼如下:pDC-TextOut(100,100,” 馬到成功!”);常用的文本輸出函數(shù):CDC:TextOut格式:virtual BOOL TextOut(int x,int y,LPCTSTR lpszString,int nCount);BOOL Text
3、Out(int x,int y,const CString &str);功能:用所選字體在指定位置輸出字符串,原點在字符單元左上角。返回:若函數(shù)調(diào)用成功,返回真,否則返回假。 2、 調(diào)用文本輸出或繪圖函數(shù)時,要正確地引用設(shè)備環(huán) 3、 釋放設(shè)備環(huán)境常用函數(shù):CWnd:ReleaseDC()格式:int ReleaseDC(CDC *pDC);功能:釋放設(shè)備環(huán)境。返回:若調(diào)用成功,則返回非0,否則返回0。參數(shù):pDC-指向要釋放的設(shè)備環(huán)境對象 設(shè)備環(huán)境使用完畢立即釋放是一個良好的編程習(xí)慣,首先因為CDC類對象占用龐大的內(nèi)存;其次在同一時刻Windows中最多可以有5個顯示設(shè)備環(huán)境可用,所有的應(yīng)用程
4、序不得不共享這一寶貴資源。 在另一個函數(shù)中輸出文本或繪圖同樣要遵循以上三步。 3、 釋放設(shè)備環(huán)境4.1.2 設(shè)置文本顏色及背景顏色 1、 設(shè)置文本顏色文本顏色是指輸出字體的顏色。VC定義了表示顏色的數(shù)據(jù)類型COLORREF??梢酝ㄟ^調(diào)用RGB宏命令,對其參數(shù)賦值來獲得不同的顏色。CDC:SetTextColor成員函數(shù)用于設(shè)置文本本身的顏色,該函數(shù)說明如下:格式:virtual COLORREF SetTextColor(COLORREF crColor);功能:設(shè)置當(dāng)前文本顏色。返回:先前文本的RGB顏色值。參數(shù):crColor-指定當(dāng)前文本的RGB顏色值4.1.2 設(shè)置文本顏色及背景顏色S
5、etTextColor使用舉例:用MFC AppWizard(exe)工程創(chuàng)建一SDI MFC Windows應(yīng)用程序。要求-當(dāng)在客戶區(qū)單擊MOUSE時,用黃色在(100,100)處顯示“馬到成功!”字符串。程序片斷如下: / CDC *pDC=GetDC();/獲取當(dāng)前窗口設(shè)備環(huán)境的指針 CString str= 馬到成功!; COLORREF rColor,oColor; rColor=RGB(255,255,0);/黃色 oColor=pDC-SetTextColor(rColor);/保存原來的文本顏色,并當(dāng)前文本設(shè)置為黃色 pDC-TextOut(100,100,str);/顯示文本
6、 pDC-SetTextColor(oColor);/恢復(fù)原來的文本顏色 ReleaseDC(pDC);/釋放設(shè)備環(huán)境 /本例完整程序見CH4D工程。SetTextColor使用舉例: 2、 設(shè)置文本背景顏色文本在屏幕上輸出要占據(jù)一定的區(qū)域,這個區(qū)域用包含文本的矩形區(qū)域來定義。在這個區(qū)域內(nèi)除去文本本身的筆劃占據(jù)的部分以外的其它空隙部分就是文本的背景。 文本背景顏色是指用來填充文本輸出區(qū)域內(nèi)空隙部分的顏色。文本背景模式是指文本背景顏色填充文本背景的方式。CDC:SetBkColor成員函數(shù)用于設(shè)置文本的背景顏色,該函數(shù)說明如下:格式:virtual COLORREF SetBkColor(COL
7、ORREF crColor);功能:設(shè)置當(dāng)前文本背景顏色。返回:先前文本的背景顏色值。參數(shù):crColor-指定當(dāng)前文本背景顏色值 2、 設(shè)置文本背景顏色CDC:SetBkMode成員函數(shù)用于設(shè)置文本背景模式,該函數(shù)說明如下:格式:int SetBkMode (int nBkMode);功能:設(shè)置當(dāng)前背景模式。返回:先前的背景模式。參數(shù):nBkMode-指定當(dāng)前的背景模式 它有兩個取值:OPAQUE-不透明(缺省時為該值) 顯示時,背景用當(dāng)前背景色TRANSPARENT-透明 顯示時,不改變背景色(調(diào)用SetBkColor函數(shù)無效)CDC:SetBkMode成員函數(shù)用于設(shè)置文本背景模式,該Se
8、tBkColor使用舉例:用MFC AppWizard(exe)工程創(chuàng)建一SDI MFC Windows應(yīng)用程序。要求-當(dāng)在客戶區(qū)單擊MOUSE時,用黃色在(100,100)處顯示“馬到成功!”字符串,字符串背景用紅色顯示。程序片斷如下:/CDC *pDC=GetDC();CString str= 馬到成功!;int nBkMode;COLORREF rColor,oColor; rColor=RGB(255,255,0);/黃色oColor=pDC-SetTextColor(rColor); nBkMode=pDC-SetBkMode(OPAQUE);/保存原來的背景模式,并且當(dāng)前背景設(shè)置為
9、不透明SetBkColor使用舉例: pDC-SetBkColor(RGB(255,0,0);/設(shè)置當(dāng)前背景顏色為紅色 pDC-TextOut(100,100,str);/顯示文本 pDC-SetTextColor(oColor);/恢復(fù)原來的文本顏色 pDC-SetBkMode(nBkMode);/恢復(fù)原來的背景模式 ReleaseDC(pDC);/釋放設(shè)備環(huán)境 pDC-SetBkColor(RGB(255,0,0)4.2.1 字體的基本知識 一、關(guān)于字體的術(shù)語1、字模(typeface):指基本的字符設(shè)計,它由筆劃寬度(stroke width)及襯線(serif)決定。注:襯線(印ser
10、if)指主筆劃結(jié)尾時的細線,如字母“H”的上下四條短而細的橫線。有些字體不帶襯線(sans serif)。 sans-prep.無。2、字體(font):具有相同字模和尺寸的完整字符集。字體尺寸用來指定字符所占區(qū)域的大小,可以用mm、inch或“點”來衡量。點是印刷中采用的最小度量單位(1英寸=72dots=25.4mm)。4.2 字體4.2.1 字體的基本知識4.2 字體目前有四種基本類型的字體:光柵字體/點陣字體(raster font) 每個字符均以固定圖形形式存儲在字庫中,它是與設(shè)備相關(guān)的字體。矢量字體/向量字體(Vector font) 是把字符分解為一系列直線段而存儲起來。True
11、Type字體 字符的原型是一系列直線和曲線繪制命令的集合。它是一種所見即所得的字體。OpenType字體 它不但可以定義TrueType字體,還可以定義手寫字體。 矢量字體、TrueType字體、OpenType字體是與設(shè)備無關(guān)的字體。目前有四種基本類型的字體:3、字體屬性:有許多屬性,主要有字樣、風(fēng)格和尺寸三種。字樣是字符書寫和顯示時表現(xiàn)出的特定模式,如漢字有宋體、楷體、仿宋、黑體、隸書、幼圓等多種字樣。字體風(fēng)格主要表現(xiàn)字體的粗細和是否傾斜等特點。字體尺寸用來指定字符所占區(qū)域的大小,可以用mm、inch或“點”來衡量。對于漢字,還用“號”數(shù)表示字體的尺寸,字號越大,字體尺寸越?。ㄈ纾何逄栕值?/p>
12、尺寸比四號字的尺寸要?。?。二、TEXTMETRIC結(jié)構(gòu)Windows很多字體的功能都是以TEXTMETRIC結(jié)構(gòu)定義的,該結(jié)構(gòu)定義中的成員可以較準確地描述字體的各種屬性。 如果需要更精確地對字體高度和寬度進行計算就需要使用CDC:GetTextMetrics( LPTEXTMETRIC lpMetrics) 成員函數(shù),該函數(shù)將會填充TEXTMETRIC結(jié)構(gòu)。 3、字體屬性:有許多屬性,主要有字樣、風(fēng)格和尺寸三種。TEXTMETRIC結(jié)構(gòu)定義:typedef struct tagTEXTMETRIC short int tmHeight;/高度 short int tmAscent;/上升高度
13、short int tmDescent;/下降高度 short int tmInternalLeading;/字符單元內(nèi)部插入 short int tmExternalLeading;/字符單元外部插入 short int tmAveCharWidth;/平均字符寬度 short int tmMaxCharWidth;/最大字符寬度 short int tmWeight;/字體權(quán)重 short int tmOverhang;/延伸量 short int tmDigitizedAspectX;/設(shè)備水平特性 short int tmDigitizedAspectY;/設(shè)備垂直特性TEXTMETR
14、IC結(jié)構(gòu)定義: BYTE tmFirstChar;/第一個字符 BYTE tmLastChar;/最后一個字符 BYTE tmDefaultChar;/缺省字符 BYTE tmBreakChar;/中斷字符 BYTE tmItalic;/斜體 BYTE tmUnderlined;/下劃線 BYTE tmStruckOut;/刪除線 BYTE tmPitchAndFamily;/字體間距和字體類型 BYTE tmCharSet;/字符集TEXTMETRIC; 該結(jié)構(gòu)常用成員有:tmHeight、tmAscent、tmDescent、tmInternalLeading、tmExternalLead
15、ing、tmAveCharWidth等。 BYTE tmFirstChar;/第一個字符第4講邊框窗口、與視文本、字體、圖形輸出課件4.2.2邏輯字體/自定義字體程序員可以的創(chuàng)建的字體有兩種:庫存字體(標準字體)和邏輯字體(自定義字體/非庫存字體)。邏輯字體是對理想字體的一種描述方式。使用邏輯字體輸出文字時,系統(tǒng)自動地將邏輯字體映射為最匹配的系統(tǒng)庫存字體。用戶可使用CFont:CreateFont或LOGFONT/CFont:CreateFontIndirect創(chuàng)建邏輯字體。CFont類繼承關(guān)系如下:CObject CGdiObject CFont圖:CFont類的繼承關(guān)系CGdiObject
16、圖形對象類是各種Windows GDI(圖形設(shè)備接口類)的基類,Gdi對象類的派生類除了字體外,還包括畫筆、畫刷、區(qū)域、調(diào)色板等。CFont(字體類)封裝了一組Windows GDI字體,同時提供了一組成員函數(shù)處理這些字體。4.2.2邏輯字體/自定義字體一、創(chuàng)建邏輯字體的結(jié)構(gòu)和函數(shù)1、LOGFONT結(jié)構(gòu)LOGFONT結(jié)構(gòu)typedef struct tagLOGFONTLONG lfHeight; /字體高度,等于零為缺省高度LONG lfWidth; /字體平均寬度LONG lfEscapement; /出口矢量與X軸間的角度(0.1度)LONG lfOrientation;/ 字符基線與X
17、軸間的角度。LONG lfWeight;/字體粗細BYTE lfItalic;/ 是否為斜體。BYTE lfUnderline;/ 是否有下劃線。BYTE lfStrikeOut;/ 是否帶刪除線。 BYTE lfCharSet;/ 指定字符集合BYTE lfOutPrecision;/ 字符輸出精度。一、創(chuàng)建邏輯字體的結(jié)構(gòu)和函數(shù)BYTE lfClipPrecision ;/裁剪精度BYTE lfQuality ;/輸出質(zhì)量BYTE lfPitchAndFamily ;/字體間距和字體類型BYTE lfFacename ;/指定字體的字樣名LOGFONTBYTE lfClipPrecision
18、 ;/裁剪精度2、CFont:CreateFont-創(chuàng)建邏輯字體(法1)格式:BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );功能:創(chuàng)建并初
19、始化一個CFont對象。返回:調(diào)用成功,返回非0值。該函的參數(shù)和LOGFONT中的各成員有一一對應(yīng)的關(guān)系。本函數(shù)適合于字體有多個屬性要進行設(shè)定的情況。2、CFont:CreateFont-創(chuàng)建邏輯字體(法1)3、CFont:CreateFontIndirect-創(chuàng)建邏輯字體(法2)使用時首先定義LOGFONT結(jié)構(gòu)的有關(guān)成員創(chuàng)建所需的字體,然后調(diào)用CFont:CreateFontIndirect產(chǎn)生該字體。CFont:CreateFontIndirect函數(shù)說明如下:格式:BOOL CreateFontIndirect(const LOGFONT* lpLogFont);功能:以lpLogFon
20、t指向LOGFONT結(jié)構(gòu)中給出的字體屬性初始化一個CFont對象。返回:調(diào)用成功,返回非0值。參數(shù):lpLogFont-指向LOGFONT結(jié)構(gòu)的指針。3、CFont:CreateFontIndirect-創(chuàng)建二、使用邏輯字體1、邏輯字體創(chuàng)建步驟Step 1:用CFont類定義字體對象;Step 2:調(diào)用CFont:CreateFont函數(shù)(或LOGFONT/ CFont:CreateFontIndirect)建立自定義的邏輯字體;Step 3:調(diào)用CDC:SelectObject函數(shù)將上一步構(gòu)造的GDI字體對象選入當(dāng)前設(shè)備環(huán)境,并保存原來的GDI字體對象;CDC:SelectObject函數(shù)使
21、用格式:格式:virtual CFont* SelectObject(CFont* pFont);功能:將一個字體對象選入當(dāng)前設(shè)備環(huán)境,新選字體對象將代替同一類型的先前對象。返回:被代替字體對象的指針。參數(shù):pFont-指向要選擇的CFont對象的指針。Step 4:字體使用結(jié)束后,恢復(fù)當(dāng)前設(shè)備環(huán)境原來的GDI字體對象。二、使用邏輯字體2、邏輯字體使用舉例使用CFont:CreateFont創(chuàng)建邏輯字體程序例:程序清單: /CFont MyFont,*OldFont;CString str=馬到成功!;pDC-SetTextColor(RGB(0,0,255);MyFont.CreateFon
22、t(150, /字體高度,等于零為缺省高度30, /字體平均寬度200,/字符串傾斜20度 ,出口矢量與X軸間的角度(0.1度)0, / 字符基線與X軸間的角度。FW_HEAVY, /字體粗細TRUE,/是否為斜體。TRUE, / 是否有下劃線。2、邏輯字體使用舉例0, / 是否帶刪除線。 GB2312_CHARSET, / 指定字符集合OUT_DEFAULT_PRECIS,/字符輸出精度。 CLIP_DEFAULT_PRECIS, /裁剪精度DRAFT_QUALITY, /輸出質(zhì)量FIXED_PITCH, /字體間距和字體類型MyFont“/指定字體的字樣名);/創(chuàng)建邏輯字體OldFont=
23、pDC-SelectObject(&MyFont);/將創(chuàng)建的邏輯字體選入當(dāng)前DC,保存原來的字體pDC-TextOut(0,150,str); pDC-SelectObject(OldFont);/恢復(fù)DC中原來的字體0, / 是否帶刪除線。 三、使用標準字體任何語種的Windows都支持六種庫存字體/標準字體,它們分別是:SYSTEM_FONT(系統(tǒng)字體)、ANSI_FIXED_FONT(固定系統(tǒng)字體)、ANSI_VAR_FONT(可變系統(tǒng)統(tǒng))、DEVICE_DEFAULT_FONT(與設(shè)備相關(guān)字體)、OEM_FIXED_FONT(與OEM相關(guān)字體)、SYSTEM_FIXED_FONT(固
24、定寬度的系統(tǒng)字體)。用戶可直接選用這些標準字體??梢哉{(diào)用CDC:SelectStockObject成員函數(shù)選用標準字體對象,該函數(shù)使用說明如下:格式:virtual CGdiObject* SelectStockObject(int nIndex);功能:選擇預(yù)定義的庫存字體、畫筆或畫刷所對應(yīng)的CGdiObject對象。 返回:調(diào)用成功則返回指向被替換的CGdiObject對象的指針,否則返回NULL。 三、使用標準字體參數(shù):nIndex-指定預(yù)定義的對象。 nIndex取值可以是下列對象之一: SYSTEM_FONT(系統(tǒng)字體) ANSI_FIXED_FONT(固定系統(tǒng)字體) ANSI_VA
25、R_FONT(可變系統(tǒng)統(tǒng)) DEVICE_DEFAULT_FONT(與設(shè)備相關(guān)字體) OEM_FIXED_FONT(與OEM相關(guān)字體) SYSTEM_FIXED_FONT(固定寬度的系統(tǒng)字體) BLACK_PEN(黑色畫筆) NULL_PEN(空畫筆) WHITE_PEN(白色畫筆)參數(shù):nIndex-指定預(yù)定義的對象。 BLACK_BRUSH(黑色畫刷) DKGRAY_BRUSH(深灰畫刷) HOLLOW_BRUSH(中空畫刷) LTGRAY_BRUSH(淺灰畫刷) NULL_BRUSH(空畫刷) WHITE_BRUSH(白色畫刷) BLACK_BRUSH(黑色畫刷)標準字體使用舉例:依次調(diào)
26、用六種標準字體顯示“The road of success!”。 程序片段如下:/int nFonts6=SYSTEM_FONT, ANSI_FIXED_FONT, ANSI_VAR_FONT, DEVICE_DEFAULT_FONT, OEM_FIXED_FONT, SYSTEM_FIXED_FONT;CString str=The road of success!;pDC-SetTextColor(RGB(0,0,255);標準字體使用舉例:依次調(diào)用六種標準字體顯示“The roadfor(int i=0;iSelectStockObject(nFontsi); pDC-TextOut(2
27、00,40*(i+2),str);for(int i=0;iSetPixel(50,50,RGB(0,0,255);則點(50,50)被畫為蘭色。4.3圖形輸出4.3.1基本圖形顯示4.3圖形輸出CDC:MoveTo/LineTo格式:CPoint MoveTo(int x,int y); CPoint MoveTo(POINT point);功能:將當(dāng)前位置移到(x,y)或point參數(shù)指定的點。返回:將先前位置(x,y)坐標返回給Cpoint對象。格式:BOOL LineTo(int x,int y); BOOL LineTo(POINT point);功能:從當(dāng)前位置向指定點繪制一條直線
28、,但不包括指定的點。返回:若調(diào)用成功,則返回非0。例:在OnDraw函數(shù)中,添加如下語句pDC-MoveTo(10,10);pDC-LineTo(500,200);則繪制一條從(10,10)到(500,200)的直線。CDC:MoveTo/LineToCDC:CDC:Arc格式:BOOL Arc(int x1,y1,int x2,int y2,int x3,int y3,int x4,int y4); BOOL Arc(LPCRECT lpRect,POINT ptStart,POINT ptEnd);功能:繪制一個橢圓弧。所畫弧是由指定的限定矩形所定義的橢圓的一部分。返回:若調(diào)用成功,則返回
29、非0。參數(shù):x1-限定矩形左上角的邏輯x坐標。 y1-限定矩形左上角的邏輯y坐標。 x2-限定矩形右下角的邏輯x坐標。 y2-限定矩形右下角的邏輯y坐標。 x3-弧起點的邏輯x坐標(不一定在弧上)。 y3-弧起點的邏輯y坐標(不一定在弧上)。 x4-弧終點的邏輯x坐標(不一定在弧上)。 y4-弧終點的邏輯y坐標(不一定在弧上)。CDC:CDC:ArclpRect-指定限定矩形(以邏輯單位計),可以是一個CRect對象或指向RECT結(jié)構(gòu)的指針。ptStart-指定弧起點的邏輯(x,y)坐標,可以是一個POINT結(jié)構(gòu)或一個CPoint對象。ptEnd-指定弧終點的邏輯(x,y)坐標,可以是一個PO
30、INT結(jié)構(gòu)或一個CPoint對象。 例:在OnDraw函數(shù)中,添加如下語句pDC-Arc(40,100,80,120,10,110,60,105);則繪制一條橢圓弧。其中,(10,110)為橢圓弧起點的邏輯坐標,(60,105)為橢圓弧終點的邏輯坐標。lpRect-指定限定矩形(以邏輯單位計),可以是一個CReCDC:Ellipse格式:BOOL Ellipse(int x1,y1,int x2,int y2); BOOL Ellipse(LPCRECT lpRect);功能:繪制一個橢圓。返回:若調(diào)用成功,則返回非0。例:在OnDraw函數(shù)中,添加如下語句pDC-Ellipse(100,20
31、0,400,300);pDC-Ellipse(100,300,300,500);則在矩形區(qū)(100,200,400,300)繪制一個橢圓,在正方形區(qū)(100,300,300,500)繪制一個圓。CDC:EllipseCDC:Rectangle格式:BOOL Rectangle(int x1,int y1,int x2,int y2); BOOL Rectangle(LPCRECT lpRect);功能:使用當(dāng)前畫刷繪制一個矩形。返回:若調(diào)用成功,則返回非0。例:在OnDraw函數(shù)中,添加如下語句 pDC-Rectangle(200,20,300,60);則繪制一個矩形(200,20,300,6
32、0)。 CDC:RectangleCDC:Polygon格式:BOOL Polygon(LPPOINT lpPoints,int nCount);功能:繪制一個多邊形。返回:若調(diào)用成功,則返回非0。 參數(shù):lpPoints-指向POINT結(jié)構(gòu)或CPoint對象數(shù)組。每個數(shù)組元素定義一個多邊形的頂點。nCounts-指定數(shù)組的頂點數(shù)。例:在OnDraw函數(shù)中,添加如下語句 POINT point3=400,160,490,220,350,210; pDC-Polygon(point,3);則繪制一個三角形。CDC:PolygonCDC:Chord格式:BOOL Chord(int x1,y1,i
33、nt x2,int y2,int x3,int y3,int x4,int y4); BOOL Chord LPCRECT lpRect,POINT ptStart,POINT ptEnd);功能:繪制一個帶弦的橢圓弧,即由橢圓弧和線段構(gòu)成的封閉圖形。返回:若調(diào)用成功,則返回非0。參數(shù):X1,y1-弦的限定矩形左上角的邏輯x,y坐標。X2,y2-弦的限定矩形右下角的邏輯x,y坐標。X3,y3-弦起點的邏輯x,y坐標。X4,y4-弦終點的邏輯x,y坐標。lpRect-指定限定矩形,可以是一個CRect對象或指向RECT結(jié)構(gòu)的指針。ptStart-指定弧起點,可以是一個CPoint對象或指向POI
34、NT結(jié)構(gòu)。ptEnd-指定弧終點,可以是一個CPoint對象或指向POINT結(jié)構(gòu)。 (x3,y3)和(x4,y4)可以是矩形內(nèi)的一點,也可以是矩形外的一點CDC:ChordExample:在OnDraw函數(shù)中,添加如下語句 pDC-Chord(100,20,300,300,130,100,250,250);則繪制一條帶弦的橢圓弧。CDC:Pie格式:BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); BOOL Pie(LPRECT lpRect,POINT ptStart,PONT ptEnd);功能:繪制一個餅
35、圖,即繪制橢圓弧并且弧的兩個端點與圓心相連。返回:若函數(shù)調(diào)用成功,則返回非0。參數(shù):x1-限定矩形左上角的邏輯x坐標。y1-限定矩形左上角的邏輯y坐標。x2-限定矩形右下角的邏輯x坐標。y2-限定矩形右下角的邏輯y坐標。Example:在OnDraw函數(shù)中,添加如下語句 x3-弧起點的邏輯x坐標。y3-弧起點的邏輯y坐標。x4-弧終點的邏輯x坐標。y4-弧終點的邏輯y坐標。lpRect-指定限定矩形,可以是一個CRect對象或指向RECT結(jié)構(gòu)的指針。ptStart-指定弧起點,可以是一個CPoint對象或指向POINT結(jié)構(gòu)。ptEnd-指定弧終點,可以是一個CPoint對象或指向POINT結(jié)構(gòu)
36、。(x3,y3)和(x4,y4)可以是矩形內(nèi)的一點,也可以是矩形外的一點。Example:在OnDraw函數(shù)中,添加如下語句 pDC-Pie(100,100,400,300,130,100,250,250);則繪制一條橢圓弧并且弧的兩個端點與圓心相連。 x3-弧起點的邏輯x坐標。CDC:RoundRect格式:BOOL RoundRect(int x1,int y1,int x2,int y2,int x3,int y3); BOOL RoundRect(LPCRECT lpRect,POINT point);功能:繪制一個圓角的矩形。返回:若調(diào)用成功則返回非0。參數(shù):x1-矩形左上角的邏輯x
37、坐標。y1-矩形左上角的邏輯y坐標。x2-矩形右下角的邏輯x坐標。y2-矩形右下角的邏輯y坐標。x3-橢圓邏輯寬度。y3-橢圓邏輯高度。lpRect-指定限定矩形的邏輯坐標??梢允且粋€CRect對象或指向RECT結(jié)構(gòu)的指針。CDC:RoundRectpoint-x坐標指定橢圓的邏輯寬度,y坐標指定橢圓的邏輯高度。Example:在OnDraw函數(shù)中,添加如下語句 pDC-RoundRect(100,100,400,300,50,50);則繪制一個圓角矩形(100,100,400,300)。其中圓角用直徑為50邏輯單位的圓與該矩形的四個角內(nèi)切得到。CDC:PolyBezier(*)格式:BOOL
38、 PolyBezier(const POINT *lpPoint,int nCount);功能:繪制一段或多段Bezier樣條(Spline)。返回:若調(diào)用成功則返回非0。參數(shù):lpPoint-指向一個POINT結(jié)構(gòu)的數(shù)組,其中包含樣條的端點和控制點。nCount-指定lpPoints數(shù)組中的點數(shù),必須比畫的樣條數(shù)大1。3次Bezier曲線需要2個控制點和一個終點,還要一個起點,即4個點決定一段Bezier曲線。point-x坐標指定橢圓的邏輯寬度,y坐標指定橢圓的邏輯高Example:在OnDraw函數(shù)中,添加如下語句 POINT pt7=40,30,160,60,270,100,300,2
39、20, 300,220,200,120,400,20; pDC-PolyBezier(pt,7); 則在7個點間繪制一段貝塞爾樣條曲線。Example:在OnDraw函數(shù)中,添加如下語句 二、CDC的派生類 CDC有幾個常用的派生類:CPaintDC、CClientDC、CwindowDC。它們的用法有比較細微的差別。1、CPaintDC類CPaintDC類(繪制設(shè)備環(huán)境類)適用于重畫圖形。即該類僅在OnPaint消息處理函數(shù)中使用。說明:這里OnPaint函數(shù)是由重畫消息WM_PAINT(即窗口被重畫時產(chǎn)生此消息)來響應(yīng)的。CPaintDC類構(gòu)造器:格式:CPaintDC(CWnd *pDC
40、);功能:構(gòu)造一個CPaintDC對象。典型用法1: CPaintDC dc(this); 以上代碼的含義是在當(dāng)前窗口中創(chuàng)建CPaintDC對象(即獲取當(dāng)前窗口的設(shè)備環(huán)境)。當(dāng)使用ClassWizard類向?qū)г鎏鞼M_PAINT消息的OnPaint消息處理函數(shù)時,此代碼將自動產(chǎn)生。 二、CDC的派生類典型用法2: CPaintDC *pDC=new CPaintDC(this); delete pDC;Example:用MFC AppWizard創(chuàng)建一SDI程序;選擇ClassWizard-Messages-WM_PAINT-Add Function-Edit Code,在OnPaint函數(shù)中
41、,添加紅色部分的語句 。CPaintDC dc(this); / device context for painting/ TODO: Add your message handler code here/ Do not call CView:OnPaint() for painting messagesCRect rc;GetClientRect(&rc);dc.Ellipse(&rc);典型用法2:則用CPaintDC對象繪制一個橢圓,該橢圓充滿用戶區(qū)窗口(內(nèi)切于用戶區(qū)邊界)。說明:由于CPaintDC、CClientDC、CWindowDC類均有自動釋放設(shè)備環(huán)境的能力(由相應(yīng)類的銷毀器完
42、成),所以釋放設(shè)備環(huán)境這一步也省略不寫了。但CDC類無此能力,所以必須要釋放設(shè)備環(huán)境這一步。2、CClientDC類CClientDC類的使用比較隨意,它可以在何時候使用(一般常用它來進行實時作圖)。CClientDC類構(gòu)造器:格式:CClientDC(CWnd *pDC);功能:構(gòu)造一個CClientDC對象。典型用法:CClientDC dc(this);以上代碼的含義是在當(dāng)前窗口用戶區(qū)中創(chuàng)建CClientDC對象。這里的代碼要由程序員增添。則用CPaintDC對象繪制一個橢圓,該橢圓充滿用戶區(qū)窗口(Example:用MFC AppWizard創(chuàng)建一SDI程序;選擇ClassWizard-
43、Messages-WM_LBUTTONDOWN-Add Function-Edit Code,在OnLButtonDown函數(shù)中添加下面語句 CClientDC dc(this);CRect myrc;GetClientRect(&myrc);dc.Ellipse(&myrc);則單擊MOUSE時,將繪制一個橢圓,該橢圓充滿用戶區(qū)窗口(內(nèi)切于用戶區(qū)邊界)。3、CWindowDC類CWindowDC類的使用與CClientDC類很相似,也可以在任何時候使用。但CWindowDC類所不同的是:它可以在整個應(yīng)用程序的窗口上畫圖,該類也許適用于一些游戲程序和其它特殊的一些應(yīng)用程序。Example:用M
44、FC AppWizard創(chuàng)建一SDICWindowDC類構(gòu)造器:格式:CWindowDC(CWnd *pDC);功能:構(gòu)造一個CWindowtDC對象。典型用法:CWindowDC dc(this);以上代碼一般要由程序員增添。dc對象可用于存取CWnd對象的全部屏幕區(qū)域,包括用戶區(qū)和非用戶區(qū)。程序例:用Win32 Application創(chuàng)建一SDI程序。單擊MOUSE時,繪制一個橢圓,該橢圓充滿應(yīng)用程序窗口。程序見CH4GA工程的EXGA.CPP文件。 程序清單:/exga.cpp#includeCWindowDC類構(gòu)造器:class CMinApp:public CWinApppublic
45、:virtual BOOL InitInstance();class CMainFrame:public CFrameWndprotected:afx_msg void OnLButtonDown(UINT nFlags,CPoint point);DECLARE_MESSAGE_MAP();BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_LBUTTONDOWN()END_MESSAGE_MAP()class CMinApp:public CWinAppvoid CMainFrame:OnLButtonDown(UINT nFlags,CPoint p
46、oint)CWindowDC dc(this);CRect myrc;GetWindowRect(&myrc); /獲取應(yīng)用程序窗口坐標賦給myrcdc.Ellipse(myrc);CFrameWnd:OnLButtonDown(nFlags,point);BOOL CMinApp:InitInstance()CMainFrame *pFrame=new CMainFrame;pFrame-Create(0,_T(Another Minimal MFC Program);pFrame-ShowWindow(SW_SHOWMAXIMIZED);pFrame-UpdateWindow();this
47、-m_pMainWnd=pFrame;return TRUE; CMinApp MyApp;void CMainFrame:OnLButtonDown程序例:用MFC AppWizard創(chuàng)建一SDI程序。單擊MOUSE時,在客戶區(qū)繪制一些圖形。void CCH4GBView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCClientDC dc(this);dc.SetPixel(5,5,RGB(0,0,0);dc.MoveTo(10,
48、10);dc.LineTo(300,200);dc.Arc(40,100,80,120,10,110,60,105);dc.Ellipse(100,200,400,300); dc.Ellipse(100,300,300,500);dc.Rectangle(200,10,300,50);程序例:用MFC AppWizard創(chuàng)建一SDI程序。單POINT pt3=400,160,490,220,350,210;dc.Polygon(pt,3);CView:OnLButtonDown(nFlags, point);4.3.2 GDI對象 MFC中的CDC類提供了在顯示器、打印機上繪圖的方法。MFC
49、還提供用于繪圖的工具GDI對象類(又稱圖形對象類)。CGdiObject類是圖形對象類的基類,它派生了CPen(畫筆類)、CBrush(畫刷類)、CFont(字體類)、CBitmap(位圖類)等具體的繪圖工具。GDI對象分自定義的GDI對象和庫存的GDI對象兩種(后者使用CDC:SelectStockObject將庫存的GDI選入當(dāng)前DC:)。POINT pt3=400,160,490,2使用GDI對象繪圖(或輸出文本:見創(chuàng)建邏輯字體一節(jié))一般步驟:Step 1:定義GDI對象(如CPen對象、CBrush對象等);Step 2:用相應(yīng)GDI對象的函數(shù)創(chuàng)建GDI對象(如CPen:CreateP
50、en、CBrush:CreateSolidBrush等);Step 3:調(diào)用CDC:SelectObject函數(shù)將上一步構(gòu)造的GDI對象選入當(dāng)前設(shè)備環(huán)境,并保存原來的GDI對象;Step 4:繪圖結(jié)束后,恢復(fù)當(dāng)前設(shè)備環(huán)境原來的GDI對象。 一、CPen類(畫筆)CPen類是MFC繪圖的筆,它有風(fēng)格、寬度、顏色等屬性。程序員可以通過調(diào)用CPen類成員函數(shù)生成畫筆的方法來決定圖形線條的寬度、顏色和顯示風(fēng)格,如虛線,實線,點劃線等。CPen類常用成員函數(shù)介紹:1、CPen:CPen格式:CPen(int nPenStyle,int nWidth,COLORREF crColor);功能:構(gòu)造并初始化
51、一個CPen對象。使用GDI對象繪圖(或輸出文本:見創(chuàng)建邏輯字體一節(jié))一般步驟參數(shù):nPenStyle-指定畫筆風(fēng)格,可取如下值: PS_SOLID 實線Creates a solid pen.( _)PS_DASH 虛線,寬度必須為一Creates a dashed pen. Valid only when the pen width is 1 or less, in device units.( -)PS_DOT 點線,寬度必須為一Creates a dotted pen. Valid only when the pen width is 1 or less, in device unit
52、s.( .)PS_DASHDOT 點劃線,寬度必須為一Creates a pen with alternating dashes and dots. Valid only when the pen width is 1 or less, in device units. .( _._._._)PS_DASHDOTDOT 雙點劃線,寬度必須為一Creates a pen with alternating dashes and double dots. Valid only when the pen width is 1 or less, in device units.( _._._._)PS_
53、NULL 空線,使用時什么也不會產(chǎn)生Creates a null pen.PS_INSIDEFRAME內(nèi)框線( _)參數(shù): nWidth-指定畫筆寬度。 crColor-畫筆的顏色。2、CPen:CreatePen格式:BOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor);功能:用指定風(fēng)格、寬度和顏色屬性創(chuàng)建一個(邏輯)畫筆。返回:若調(diào)用成功,則返回非0。參數(shù):同1。3、CPen:CreatePenIndirect格式:BOOL CreatePenIndirect(LPLOGPEN lpLogPen);功能:創(chuàng)建一個畫筆,其風(fēng)格、寬
54、度和顏色由lpLogPen參數(shù)指定。返回:若調(diào)用成功,則返回非0。參數(shù):lpLogPen-指向LOGLEN結(jié)構(gòu)的指針,該結(jié)構(gòu)中包含有關(guān)畫筆屬性的信息。 nWidth-指定畫筆寬度。 LOGPEN結(jié)構(gòu)說明如下:typedef struct tagLOGPEN WORD lopnStyle;/ 筆的風(fēng)格 POINT lopnWidth; / x表示筆的寬度(邏輯單位),若設(shè)為0,則寬度為一個象素寬 COLORREF lopnColor;/ 筆的顏色,為RGB顏色值 LOGPEN;程序例:CPen:CreatePen使用舉例。 LOGPEN結(jié)構(gòu)說明如下:程序例:LOGPEN/CPen:CreateP
55、enIndirect使用舉例。在OnDraw函數(shù)中,添加如下語句CPen hPen;CPen *pPen;LOGPEN logPen;/定義邏輯筆結(jié)構(gòu)變量POINT Width=20,0;logPen.lopnStyle=PS_SOLID;/實線logPen.lopnWidth=Width;/線寬為20logPen.lopnColor=RGB(0,255,0);/綠色hPen.CreatePenIndirect(&logPen);/ 創(chuàng)建畫筆pPen=pDC-SelectObject(&hPen);pDC-Ellipse(110,70,300,260);/畫圓pDC-SelectObject(
56、pPen);則繪制一條綠色圓環(huán)。程序例:LOGPEN/CPen:CreatePenIndi 在繪圖中,不同的線段往往要求設(shè)置成不同的顏色,這時就需要創(chuàng)建多支畫筆進行繪圖。如,設(shè)置四支畫筆的程序段可以寫成如下形式:CClientDC *pdc=new CClientDC(this);CPen *pen1=new CPen(PS_SOLID,1,0XEE); CPen *pen2=new CPen(PS_SOLID,1,0X005E00);CPen *pen3=new CPen(PS_SOLID,1,0XEE0000); CPen *pen4=new CPen(PS_SOLID,1,0X00FF0
57、0);程序例:使用多支筆繪制層次線段圖案。(*) 本例使用正弦函數(shù)和余弦函數(shù)。首先通過A=K(1+rsin(n)使A的值依正弦規(guī)律變換其大小,然后再利用X=Acos()和Y=Asin()計算各畫線始點和終點坐標(Xi,Yi)并畫線。該圖案由線組成,且線的起點和終點坐標均按三角函數(shù)規(guī)律變化。 在繪圖中,不同的線段往往要求設(shè)置成不同的顏色,這時就需 本例程序運行結(jié)果: 圖:多支筆繪制層次線段圖案效果圖 二、CBrush類(畫刷)畫刷是在畫封閉曲線時用來填充的顏色,畫刷的作用是用于填充封閉圖形。例如當(dāng)你畫圓形或方形時系統(tǒng)會用當(dāng)前的畫刷對內(nèi)部進行填充。畫刷有三個屬性(畫刷三要素):填充色、填充圖案、和
58、填充風(fēng)格。畫刷可利用CBrush對象創(chuàng)建,CBrush類常見成員函數(shù)介紹: 1、CBrush:CreateSolidBrush格式:BOOL CreateSolidBrush(COLORREF crColor);功能:用指定的顏色創(chuàng)建一個固定顏色的畫刷。返回:若調(diào)用成功,則返回非0。參數(shù):crColor-指定畫刷的顏色。 二、CBrush類(畫刷)進2、CBrush: CreateHatchBrush 格式:BOOL CreateHatchBrush(int nIndex,COLORREF crColor);功能:創(chuàng)建指定顏色和和陰影線的畫刷。返回:若調(diào)用成功,則返回非0。參數(shù):nIndex-
59、指定畫刷的陰影線風(fēng)格,可取如下值:HS_BDIAGONALDownward hatch (left to right) at 45 degrees( :45度向下影線)HS_CROSSHorizontal and vertical crosshatch(+ + + +:水平和垂直交叉影線)HS_DIAGCROSSCrosshatch at 45 degrees (X X X X:45度交叉影線)HS_FDIAGONALUpward hatch (left to right) at 45 degrees(/ / / /:45度向上影線)進2、CBrush: CreateHatchBrush HS
60、_HORIZONTALHorizontal hatch(- - - -:水平影線)。HS_VERTICALVertical hatch(| | | |:垂直影線) crColor-指定畫刷的顏色。 3 、CBrush:CBrush格式1:CBrush(COLORREF crColor);功能:用指定顏色構(gòu)造并創(chuàng)建一個畫刷。參數(shù):crColor-指定畫刷的顏色。格式2:CBrush(int nIndex,COLORREF crColor);功能:用指定風(fēng)格和顏色構(gòu)造并創(chuàng)建一個畫刷。 HS_HORIZONTALHorizontal hat參數(shù):nIndex-指定畫刷的風(fēng)格,取值同上。 crColo
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化活動策劃方案范文
- 現(xiàn)代企業(yè)如何依賴云平臺優(yōu)化數(shù)據(jù)審核流程
- 游戲類直播平臺的用戶行為分析與優(yōu)化策略研究
- 現(xiàn)代舞臺背景屏技術(shù)革新與發(fā)展
- 環(huán)保材料在辦公環(huán)境建設(shè)中的應(yīng)用
- 生產(chǎn)過程中的危機應(yīng)對與風(fēng)險化解
- 未來十年電動汽車市場預(yù)測與展望
- 生態(tài)系統(tǒng)服務(wù)在商業(yè)地產(chǎn)開發(fā)中的應(yīng)用
- 現(xiàn)代網(wǎng)絡(luò)技術(shù)企業(yè)管理的重要支撐
- 18《書湖陰先生壁》說課稿-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計規(guī)范
- 養(yǎng)老護理員培訓(xùn)老年人日常生活照料
- 黑龍江省哈爾濱市八年級(下)期末化學(xué)試卷
- 各種抽油泵的結(jié)構(gòu)及工作原理幻燈片
- 學(xué)習(xí)弘揚雷鋒精神主題班會PPT雷鋒精神我傳承爭當(dāng)時代好少年P(guān)PT課件(帶內(nèi)容)
- 社區(qū)獲得性肺炎的護理查房
- 體育賽事策劃與管理第八章體育賽事的利益相關(guān)者管理課件
- 專題7閱讀理解之文化藝術(shù)類-備戰(zhàn)205高考英語6年真題分項版精解精析原卷
- 《生物資源評估》剩余產(chǎn)量模型
- 2022年廣東省10月自考藝術(shù)概論00504試題及答案
- 隧道二襯承包合同參考
評論
0/150
提交評論