圖形設(shè)備接口-畫筆與畫刷 ppt課件_第1頁
圖形設(shè)備接口-畫筆與畫刷 ppt課件_第2頁
圖形設(shè)備接口-畫筆與畫刷 ppt課件_第3頁
圖形設(shè)備接口-畫筆與畫刷 ppt課件_第4頁
圖形設(shè)備接口-畫筆與畫刷 ppt課件_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 圖形與圖像編程根底圖形與圖像編程根底本章主要學(xué)習(xí)內(nèi)容:本章主要學(xué)習(xí)內(nèi)容:圖形處置的根本原理:圖形處置的根本原理:圖形設(shè)備接口圖形設(shè)備接口設(shè)備環(huán)境設(shè)備環(huán)境GDIGDI坐標(biāo)系坐標(biāo)系映射方式映射方式運(yùn)用畫筆和畫刷繪制圖形運(yùn)用畫筆和畫刷繪制圖形文本與字體文本與字體位圖、圖標(biāo)和光標(biāo)位圖、圖標(biāo)和光標(biāo)6.3 繪制根本圖形WindowsWindows中的根本圖形包括點(diǎn)、直線、圓、圓中的根本圖形包括點(diǎn)、直線、圓、圓弧、矩形、橢圓等?;?、矩形、橢圓等。MFCMFC把繪制這些圖形的函數(shù)把繪制這些圖形的函數(shù)封裝在封裝在CDCCDC類中。類中。繪圖通常編寫繪圖通常編寫C C* *ViewView類的類的OnDraw(

2、CDC OnDraw(CDC * *pDC)pDC)函數(shù),其中參數(shù)函數(shù),其中參數(shù)pDCpDC指當(dāng)前設(shè)備環(huán)境指針。指當(dāng)前設(shè)備環(huán)境指針。補(bǔ)充:橡皮筋技術(shù)利用SetROP2函數(shù) 先了解先了解SetROP2SetROP2函數(shù)的兩個參數(shù)函數(shù)的兩個參數(shù)R2_NOTR2_NOT與與R2_NOTXORPENR2_NOTXORPEN的運(yùn)用效果,以下為該兩種繪畫方式的運(yùn)用效果,以下為該兩種繪畫方式舉例:舉例:R2_NOTXORPENR2_NOTXORPEN繪畫方式繪畫方式他用紅色畫筆在黑色背景上畫一條直線,顯示紅色,但他用紅色畫筆在黑色背景上畫一條直線,顯示紅色,但他再用這只筆在剛畫的直線上重畫一遍,就相當(dāng)于把開

3、他再用這只筆在剛畫的直線上重畫一遍,就相當(dāng)于把開場畫的紅線擦除掉了,劃線的地方顯示為背風(fēng)光。場畫的紅線擦除掉了,劃線的地方顯示為背風(fēng)光。 R2_NOTR2_NOT繪畫方式繪畫方式同樣有在同一個地方畫兩次相當(dāng)于什么都沒畫的功能,同樣有在同一個地方畫兩次相當(dāng)于什么都沒畫的功能,不過不過R2_NOTR2_NOT繪畫方式第一次畫的時候顯示顏色并不是繪畫方式第一次畫的時候顯示顏色并不是他選定的畫筆顏色,而是默許的顏色。他選定的畫筆顏色,而是默許的顏色。 顏色一個彩色象素的顯示需求顏色空間的支持,常一個彩色象素的顯示需求顏色空間的支持,常用的顏色空間有用的顏色空間有RGB。RGB顏色空間選用紅顏色空間選用

4、紅(R)、綠綠(G)、藍(lán)、藍(lán)(B)三種基色分量,經(jīng)過對這三種基色不三種基色分量,經(jīng)過對這三種基色不同比例的混合,可以得到不同的彩色效果。同比例的混合,可以得到不同的彩色效果。在在MFC中,中,CDC運(yùn)用的是運(yùn)用的是RGB顏色空間,其中,顏色空間,其中,COLORREF是用來表示是用來表示RGB顏色的一個顏色的一個32位的數(shù)位的數(shù)據(jù)類型。它可以用以下的十六進(jìn)制表示一個據(jù)類型。它可以用以下的十六進(jìn)制表示一個RGB值:值:0 x00bbggrr,其中,其中bb、gg、rr分別表示藍(lán)、綠、分別表示藍(lán)、綠、紅紅3個顏色分量的十六進(jìn)制值。個顏色分量的十六進(jìn)制值。顏色在詳細(xì)操作在詳細(xì)操作RGB顏色時,可運(yùn)用

5、以下的宏操作:顏色時,可運(yùn)用以下的宏操作:GetBValue、GetGValue、GetRValue來獲得其來獲得其中各個顏色分量值。中各個顏色分量值。如:如:int nRed=GetBValue(color);RGB可以將指定的三個分量值轉(zhuǎn)換成一個可以將指定的三個分量值轉(zhuǎn)換成一個32位的位的RGB顏色值。顏色值。如:如:COLORREF color=RGB(nRed,nGreen,nBlue);顏色和顏色對話框MFC的的CColorDialog類為運(yùn)用程序提供了顏色選類為運(yùn)用程序提供了顏色選擇通用對話框,構(gòu)造函數(shù)如下:擇通用對話框,構(gòu)造函數(shù)如下:CColorDialog(COLORREF c

6、lrInit=0,DWORD dwFlags=0,CWnd * pParentWnd=NULL);其中,其中,clrInit指定選擇的默許顏色值,默以為指定選擇的默許顏色值,默以為RGB(0,0,0)黑色。黑色。pParentWnd指定對話框的父窗口指定對話框的父窗口指針。指針。dwFlags指定對話框外觀和功能指定對話框外觀和功能(見教材見教材P209)。當(dāng)對話框單擊當(dāng)對話框單擊OK退出時,可調(diào)用以下成員函數(shù)獲得相退出時,可調(diào)用以下成員函數(shù)獲得相應(yīng)的顏色。應(yīng)的顏色。COLORREF GetColor() const;void SetCurrentColor(COLORREF clr);sta

7、tic COLORREF * GetSavedCustomColors()輸出文本與畫點(diǎn)/設(shè)置文本的前風(fēng)光設(shè)置文本的前風(fēng)光pDC-SetTextColor(RGB(255,0,255); pDC-SetTextColor(RGB(255,0,255); /輸出文本輸出文本pDC-TextOut(20,20,Point); pDC-TextOut(20,20,Point); /以不同的顏色畫點(diǎn)以不同的顏色畫點(diǎn)pDC-SetPixel(100,20,RGB(255,0,0); pDC-SetPixel(100,20,RGB(255,0,0); pDC-SetPixel(110,20,RGB(0,2

8、55,0);pDC-SetPixel(110,20,RGB(0,255,0);pDC-SetPixel(120,20,RGB(0,0,255); pDC-SetPixel(120,20,RGB(0,0,255); 畫直線、矩形與橢圓/畫直線畫直線pDC-MoveTo(20,90);pDC-MoveTo(20,90);pDC-LineTo(160,90);pDC-LineTo(160,90);pDC-LineTo(130,80);pDC-LineTo(130,80);/直角矩形直角矩形pDC-Rectangle(190,270,250,310);pDC-Rectangle(190,270,250

9、,310);/圓角矩形圓角矩形pDC-RoundRect(265,270,330,310,30,20);pDC-RoundRect(265,270,330,310,30,20);/橢圓橢圓pDC-Ellipse(200,160,280,200);pDC-Ellipse(200,160,280,200);6.4 畫筆和畫刷6.4.1 6.4.1 畫筆畫筆6.4.2 6.4.2 畫刷畫刷6.4.3 6.4.3 畫筆和畫刷的運(yùn)用程序舉例畫筆和畫刷的運(yùn)用程序舉例6.4.1 畫筆一個畫筆通常具有寬度、款式和顏色三種屬性。一個畫筆通常具有寬度、款式和顏色三種屬性。畫筆的寬度用來確定所畫的線條寬度,它是用設(shè)

10、備畫筆的寬度用來確定所畫的線條寬度,它是用設(shè)備單位表示的。默許的畫筆寬度是一個像素單位。畫單位表示的。默許的畫筆寬度是一個像素單位。畫筆的顏色確定了所畫的線條顏色。畫筆的款式確定筆的顏色確定了所畫的線條顏色。畫筆的款式確定了所繪圖形的線型,它通常有實線了所繪圖形的線型,它通常有實線(PS_SOLID)、虛線虛線(PS_DASH)、點(diǎn)線、點(diǎn)線(PS_DOT)、點(diǎn)劃線、點(diǎn)劃線(PS_DASHDOT)、雙點(diǎn)劃線、雙點(diǎn)劃線(PS_DASHDOTDOT)、不可見線、不可見線(PS_NULL)和內(nèi)和內(nèi)框線框線(PS_INSIDEFRAME)等七種款式。等七種款式。 1. 創(chuàng)建畫筆CPenCPen類封裝圖形

11、設(shè)備接口類封裝圖形設(shè)備接口GDIGDI畫筆對象的功能。創(chuàng)建畫筆畫筆對象的功能。創(chuàng)建畫筆可以采用以下幾種方法:可以采用以下幾種方法:(1)(1)運(yùn)用無參構(gòu)造函數(shù)聲明對象,之后調(diào)用成員函數(shù)運(yùn)用無參構(gòu)造函數(shù)聲明對象,之后調(diào)用成員函數(shù)CreatePen()CreatePen()創(chuàng)建詳細(xì)的畫筆。創(chuàng)建詳細(xì)的畫筆。BOOL CreatePen(int nPenStyle, int nWidth, BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor); COLORREF crColor); 其中其中nPenStylenPenStyle表示畫筆的

12、款式。表示畫筆的款式。nWidthnWidth表示畫筆的線寬。表示畫筆的線寬。crColorcrColor表示畫筆的表示畫筆的RGBRGB顏色。顏色。例如:例如:CPen PenCPen Pen; Pen.CreatePen(PS_SOLID,1,RGB(255,0,0);Pen.CreatePen(PS_SOLID,1,RGB(255,0,0);/調(diào)用成員函數(shù),創(chuàng)建線寬為調(diào)用成員函數(shù),創(chuàng)建線寬為1 1的紅色實線畫筆的紅色實線畫筆1. 創(chuàng)建畫筆(2) (2) 運(yùn)用構(gòu)造函數(shù)創(chuàng)建畫筆運(yùn)用構(gòu)造函數(shù)創(chuàng)建畫筆CPen(int nPenStyle,int nWidth,COLORREF cfColor)C

13、Pen(int nPenStyle,int nWidth,COLORREF cfColor)例如:例如: CPen Pen(PS_SOLID,1,RGB(255,0,0); CPen Pen(PS_SOLID,1,RGB(255,0,0); / / 調(diào)用構(gòu)造函數(shù),創(chuàng)建線寬為調(diào)用構(gòu)造函數(shù),創(chuàng)建線寬為1 1的紅色實線畫筆的紅色實線畫筆2. 庫存畫筆庫存畫筆又叫堆畫筆。庫存畫筆又叫堆畫筆。WindowsWindows定義了三種庫存畫筆,程序定義了三種庫存畫筆,程序員可以直接運(yùn)用這些畫筆,而不用創(chuàng)建對象。三種庫存畫筆分員可以直接運(yùn)用這些畫筆,而不用創(chuàng)建對象。三種庫存畫筆分別是:別是:BLANK_PEN

14、BLANK_PEN:黑色畫筆;:黑色畫筆;WHILE_PENWHILE_PEN:白色畫筆;:白色畫筆;NULL_PENNULL_PEN:空畫筆。:空畫筆。可以運(yùn)用可以運(yùn)用CPen:CreatestockObject()CPen:CreatestockObject()函數(shù)進(jìn)展創(chuàng)建。函數(shù)進(jìn)展創(chuàng)建。CPen Pen;CPen Pen;Pen.CreatestockObject(WHILE_PEN);Pen.CreatestockObject(WHILE_PEN);可以以庫存畫筆為參數(shù)來調(diào)用可以以庫存畫筆為參數(shù)來調(diào)用SelectStockObject()SelectStockObject()函數(shù)函數(shù),

15、 ,此函數(shù)選定放入當(dāng)前設(shè)備環(huán)境的新對象,并前往一個指向被交此函數(shù)選定放入當(dāng)前設(shè)備環(huán)境的新對象,并前往一個指向被交換對象的指針,換對象的指針,CPen CPen * *pOldPen=pDC-SelectStockObject(BLANK_PEN);pOldPen=pDC-SelectStockObject(BLANK_PEN);3. 畫筆的運(yùn)用方法(1) (1) 創(chuàng)建畫筆;創(chuàng)建畫筆;(2) (2) 運(yùn)用新的畫筆,保管原來的畫筆以便恢復(fù);運(yùn)用新的畫筆,保管原來的畫筆以便恢復(fù); CPen CPen * *pOldPen;pOldPen; pOldPen=pDC-selectObject(&

16、penRed); pOldPen=pDC-selectObject(&penRed);(3) (3) 運(yùn)用新畫筆作圖;運(yùn)用新畫筆作圖;(4) (4) 恢復(fù)原來的畫筆恢復(fù)原來的畫筆 pDC-selectObject(pOldPen); pDC-selectObject(pOldPen); 保管并恢復(fù)原來畫筆的緣由是每個圖形設(shè)備接口對象要占用一保管并恢復(fù)原來畫筆的緣由是每個圖形設(shè)備接口對象要占用一個個HDCHDC句柄,而可用的句柄數(shù)量有限,假設(shè)用完后未及時釋放,句柄,而可用的句柄數(shù)量有限,假設(shè)用完后未及時釋放,積累下去將導(dǎo)致嚴(yán)重的運(yùn)轉(zhuǎn)錯誤。積累下去將導(dǎo)致嚴(yán)重的運(yùn)轉(zhuǎn)錯誤。例:畫筆的運(yùn)用CPe

17、n CPen * *pNewPen=new CPen;pNewPen=new CPen;if(pNewPen-CreatePen(PS_DASHDOT,3,RGB(255,0,0)if(pNewPen-CreatePen(PS_DASHDOT,3,RGB(255,0,0) CPen CPen * *pOldPen=pDC-SelectObject(pNewPen);pOldPen=pDC-SelectObject(pNewPen);/用新創(chuàng)建的畫筆繪圖用新創(chuàng)建的畫筆繪圖pDC-MoveTo(10,10);pDC-MoveTo(10,10); pDC-LineTo(150,10); pDC-Li

18、neTo(150,10); / /恢復(fù)設(shè)備描畫表中原有的筆恢復(fù)設(shè)備描畫表中原有的筆 pDC-SelectObject(pOldPen); pDC-SelectObject(pOldPen);elseelse MessageBox(CreatePen ERROR!);MessageBox(CreatePen ERROR!);delete pNewPen;delete pNewPen;例:堆畫筆的運(yùn)用CPen CPen * *pOldPen=(CPen pOldPen=(CPen * *)pDC-)pDC-SelectStockObject(BLACK_PEN);SelectStockObject

19、(BLACK_PEN); pDC-MoveTo(10,20); pDC-MoveTo(10,20);pDC-LineTo(200,20);pDC-LineTo(200,20);pDC-LineTo(200,40);pDC-LineTo(200,40);pDC-LineTo(10,40);pDC-LineTo(10,40);pDC-LineTo(10,20);pDC-LineTo(10,20);/恢復(fù)設(shè)備描畫表中原有的筆恢復(fù)設(shè)備描畫表中原有的筆pDC-SelectObject(pOldPen);pDC-SelectObject(pOldPen);6.4.2 畫刷畫刷是用來填充圖形的工具。畫刷是用

20、來填充圖形的工具。畫刷的屬性通常包括填充色、填充圖案和填充款式三種。畫刷的畫刷的屬性通常包括填充色、填充圖案和填充款式三種。畫刷的填充色和畫筆顏色一樣,都是運(yùn)用填充色和畫筆顏色一樣,都是運(yùn)用COLORREFCOLORREF顏色類型;畫刷的填充圖顏色類型;畫刷的填充圖案通常是用戶定義的案通常是用戶定義的8 x 88 x 8位圖;而填充款式往往是位圖;而填充款式往往是CDCCDC內(nèi)部定義的一內(nèi)部定義的一些特性,它們都是以些特性,它們都是以HS_HS_為前綴的標(biāo)識,如下圖:為前綴的標(biāo)識,如下圖:HS_BDIAGONALHS_CROSSHS_DIAGCROSSHS_FDIAGONAL HS_HORIZ

21、ONTAL HS_VERTICAL6.4.2 畫刷 MFCMFC把把GDIGDI畫刷封裝在畫刷封裝在CRushCRush類中。畫刷的運(yùn)用方法同畫筆。類中。畫刷的運(yùn)用方法同畫筆。畫刷分為純色畫刷、陰影畫刷、堆畫刷和圖案畫刷。畫刷分為純色畫刷、陰影畫刷、堆畫刷和圖案畫刷。CBrushCBrush類為不同的畫刷類型提供了不同的構(gòu)造函數(shù)。類為不同的畫刷類型提供了不同的構(gòu)造函數(shù)。WindowsWindows定義的堆畫刷共有定義的堆畫刷共有7 7種,分別是:種,分別是:BLACK_BRUSHBLACK_BRUSH:黑色畫刷;:黑色畫刷;DKGRAY_BRUSHDKGRAY_BRUSH:深灰色畫刷;:深灰色

22、畫刷;GRAY_BRUSHGRAY_BRUSH:灰色畫刷;:灰色畫刷;HOLLOW_BRUSHHOLLOW_BRUSH:空畫刷;:空畫刷;LTGRAY_BRUSHLTGRAY_BRUSH:淺灰色畫刷;:淺灰色畫刷;NULL_BRUSHNULL_BRUSH:空畫刷;:空畫刷;WHITE_BRUSHWHITE_BRUSH:白色畫刷;:白色畫刷;6.4.2 畫刷對堆畫刷,調(diào)用對堆畫刷,調(diào)用SelectStockObject()SelectStockObject()函數(shù)進(jìn)展選擇函數(shù)進(jìn)展選擇畫刷,畫刷,例如:例如:C B r u s h C B r u s h * * p O l d B r u s h

23、 = p D C - p O l d B r u s h = p D C - SelectStockObject(WHITE_BRUSH); SelectStockObject(WHITE_BRUSH); / / 選擇白色堆畫刷選擇白色堆畫刷 創(chuàng)建CBrush對象的四個構(gòu)造函數(shù)為:(1) CBrush(); / (1) CBrush(); / 運(yùn)用前必需初始化畫刷運(yùn)用前必需初始化畫刷(2) CBrush (COLORREF cfColor); (2) CBrush (COLORREF cfColor); / / 構(gòu)造帶有指定顏色的純色畫刷構(gòu)造帶有指定顏色的純色畫刷例如:例如: CBrush B

24、rush(RGB(255,0,0); / CBrush Brush(RGB(255,0,0); / 創(chuàng)建紅色畫刷創(chuàng)建紅色畫刷(3) CBrush(int nIndex, COLORREF cfColor);(3) CBrush(int nIndex, COLORREF cfColor); / / 構(gòu)造帶有指定陰影風(fēng)格和顏色的填充畫刷構(gòu)造帶有指定陰影風(fēng)格和顏色的填充畫刷 nIndex nIndex指定的陰影風(fēng)格,如表指定的陰影風(fēng)格,如表6.46.4所示。所示。(4) CBrush(CBitmap(4) CBrush(CBitmap* *pBitmap);pBitmap); / / 構(gòu)造運(yùn)用位圖圖

25、案的畫刷構(gòu)造運(yùn)用位圖圖案的畫刷 CBitmap CBitmap對象最大可運(yùn)用對象最大可運(yùn)用8 88 8像素,假設(shè)位圖過大,那么只像素,假設(shè)位圖過大,那么只需左上角的部分可以用作畫刷圖案。需左上角的部分可以用作畫刷圖案。創(chuàng)建畫刷的其他成員函數(shù) 還可在創(chuàng)建畫刷對象后,調(diào)用以下的還可在創(chuàng)建畫刷對象后,調(diào)用以下的CBrushCBrush類的成員函數(shù)來類的成員函數(shù)來創(chuàng)建不同的畫刷:創(chuàng)建不同的畫刷:CreateSolidBrush():CreateSolidBrush():創(chuàng)建純色畫刷創(chuàng)建純色畫刷CreateHatchBrush():CreateHatchBrush():創(chuàng)建陰影畫刷創(chuàng)建陰影畫刷Creat

26、ePatternBrush():CreatePatternBrush():創(chuàng)建圖案畫刷創(chuàng)建圖案畫刷如:如:CBrush Brush;COLORREF c;CBrush Brush;COLORREF c;c=RGB(255,255,0);c=RGB(255,255,0);Brush. CreateHatchBrush(HS_DIAGCROSS, c);Brush. CreateHatchBrush(HS_DIAGCROSS, c);例:畫刷的運(yùn)用 CBrush CBrush * *pNewBrush=new CBrush;pNewBrush=new CBrush;pNewBrush-Create

27、SolidBrush(RGB(180,70,230);pNewBrush-CreateSolidBrush(RGB(180,70,230); C B r u s h C B r u s h * * p O l d B r u s h = p D C - p O l d B r u s h = p D C -SelectObject(pNewBrush); /SelectObject(pNewBrush); /選擇新畫刷選擇新畫刷pDC-Rectangle(10,60,200,100); /pDC-Rectangle(10,60,200,100); /繪制矩形繪制矩形pDC-SelectObje

28、ct(pOldBrush); /pDC-SelectObject(pOldBrush); /恢復(fù)設(shè)備描畫表恢復(fù)設(shè)備描畫表中原有的畫刷中原有的畫刷delete pNewBrush; /delete pNewBrush; /刪除新畫刷刪除新畫刷例:畫刷的運(yùn)用 CBrush CBrush * *pNewBrush=new CBrush;pNewBrush=new CBrush;pNewBrush-CreateSolidBrush(RGB(180,70,230)pNewBrush-CreateSolidBrush(RGB(180,70,230) C B r u s h C B r u s h * *

29、p O l d B r u s h = p D C - p O l d B r u s h = p D C -SelectObject(pNewBrush); /SelectObject(pNewBrush); /選擇新畫刷選擇新畫刷pDC-Rectangle(10,60,200,100); /pDC-Rectangle(10,60,200,100); /繪制矩形繪制矩形pDC-SelectObject(pOldBrush); /pDC-SelectObject(pOldBrush); /恢復(fù)設(shè)備描畫表恢復(fù)設(shè)備描畫表中原有的畫刷中原有的畫刷delete pNewBrush; /delete p

30、NewBrush; /刪除新畫刷刪除新畫刷6.5 字體 字體定義顯示文本的符號和字符,經(jīng)過處置字體可以顯字體定義顯示文本的符號和字符,經(jīng)過處置字體可以顯示某種特殊效果的文字,描畫輸出文字的字體可用示某種特殊效果的文字,描畫輸出文字的字體可用CFontCFont對象。對象。CFontCFont對象的運(yùn)用方法與畫筆和畫刷類似,對象的運(yùn)用方法與畫筆和畫刷類似,定義字體對象,定義字體對象,創(chuàng)建字體并保管原來的字體,創(chuàng)建字體并保管原來的字體,在文字輸出任務(wù)終了后恢復(fù)原來的字體。在文字輸出任務(wù)終了后恢復(fù)原來的字體。字體的屬性 字體的主要屬性有字樣、風(fēng)格和尺寸。字樣是字體的主要屬性有字樣、風(fēng)格和尺寸。字樣是

31、字符書寫和顯示時表現(xiàn)的特定方式,如宋體、楷字符書寫和顯示時表現(xiàn)的特定方式,如宋體、楷體等多種字樣。字體風(fēng)格主要表現(xiàn)為字體的粗細(xì)體等多種字樣。字體風(fēng)格主要表現(xiàn)為字體的粗細(xì)和能否傾斜等特點(diǎn)。字體是用來指定字體所占區(qū)和能否傾斜等特點(diǎn)。字體是用來指定字體所占區(qū)域的大小,通常用字符高度來描畫。域的大小,通常用字符高度來描畫。1字體的創(chuàng)建(1)(1)(1)為了方便用戶創(chuàng)建字體,系統(tǒng)定義一種邏輯字體,根為了方便用戶創(chuàng)建字體,系統(tǒng)定義一種邏輯字體,根據(jù)定義的邏輯字體,可調(diào)用據(jù)定義的邏輯字體,可調(diào)用CFontCFont類的類的CreateFontIndirectCreateFontIndirect函數(shù)來創(chuàng)建字體

32、。函數(shù)來創(chuàng)建字體。LOGFONT lf;CFont cf;LOGFONT lf;CFont cf;memset(&lf,0,sizeof(LOGFONT);memset(&lf,0,sizeof(LOGFONT);lf.lfHeight=13;lf.lfHeight=13;strcpy(LPSTR)&(lf.lfFaceName),strcpy(LPSTR)&(lf.lfFaceName),黑體黑體); );cf.CreateFontIndirect(&lf);cf.CreateFontIndirect(&lf);typedef struct t

33、agLOGFONT typedef struct tagLOGFONT LONG LONG lfHeight; lfHeight; / / 字體的邏輯高度字體的邏輯高度 LONG LONG lfWidth; lfWidth; / / 字符的平均邏輯寬度字符的平均邏輯寬度 LONG LONG lfEscapement; / lfEscapement; / 傾角傾角 LONG LONG lfOrientation; / lfOrientation; / 書寫方向書寫方向 LONG LONG lfWeight; / lfWeight; / 字體的粗細(xì)程度字體的粗細(xì)程度 BYTE BYTE lfIta

34、lic; lfItalic; / / 斜體標(biāo)志斜體標(biāo)志 BYTE BYTE lfUnderline; lfUnderline; / / 下劃線標(biāo)志下劃線標(biāo)志 BYTE BYTE lfStrikeOut; lfStrikeOut; / / 刪除線標(biāo)志刪除線標(biāo)志 BYTE BYTE lfCharSet; lfCharSet; / / 字符集,漢字必需為字符集,漢字必需為GB2312_CHARSETGB2312_CHARSET TCHAR TCHAR lfFaceNameLF_FACESIZE / lfFaceNameLF_FACESIZE / 字樣稱號字樣稱號/ / LOGFONT; LOGFON

35、T; 1字體的創(chuàng)建(2)當(dāng)需求某一特定的字體時,可以運(yùn)用當(dāng)需求某一特定的字體時,可以運(yùn)用MFCMFC的的CFontCFont類的類的CreateFont()CreateFont()成員函數(shù)來創(chuàng)建字體,假設(shè)該函數(shù)調(diào)用勝利,成員函數(shù)來創(chuàng)建字體,假設(shè)該函數(shù)調(diào)用勝利,那么前往非那么前往非0 0值,否那么前往值,否那么前往0 0。其函數(shù)原型如下:其函數(shù)原型如下:BOOL CFont:CreateFont(BOOL CFont:CreateFont(int nHeight, / int nHeight, / 字符邏輯高度字符邏輯高度int nWidth, / int nWidth, / 字符邏輯寬度字符邏

36、輯寬度int nEscapement, / int nEscapement, / 出口矢量與出口矢量與X X軸的角度軸的角度int nOrientation, / int nOrientation, / 字符基線與字符基線與X X軸的角度軸的角度int nWeight, / int nWeight, / 字體磅值字體磅值BYTE bItalic, / BYTE bItalic, / 非非0 0那么為斜體那么為斜體BYTE bUnderline, / BYTE bUnderline, / 非非0 0那么加下劃線那么加下劃線BYTE cStrickOut, / BYTE cStrickOut, /

37、 非非0 0那么加刪除線那么加刪除線BYTE nCharSet, / BYTE nCharSet, / 此字體的字符集此字體的字符集BYTE nClipPrecision, / BYTE nClipPrecision, / 裁剪精度裁剪精度BYTE nQualty, / BYTE nQualty, / 輸出質(zhì)量輸出質(zhì)量BYTE nPitAndFamity, / BYTE nPitAndFamity, / 調(diào)距和字體族調(diào)距和字體族LPCSTR lpszFacenameLPCSTR lpszFacename;/ / 字體的字符名字體的字符名););CreateFont()CreateFont()成

38、員函數(shù)并不能產(chǎn)生新的成員函數(shù)并不能產(chǎn)生新的Windows GDIWindows GDI字字體,它只是從體,它只是從GDIGDI字庫中選擇一種最近似的可用字體。字庫中選擇一種最近似的可用字體。1字體的創(chuàng)建(2)字體和字體對話框CFontDialog類提供了字體及其文本顏色選擇的類提供了字體及其文本顏色選擇的通用對話框,表通用對話框,表10.24列出常用的成員函數(shù)。列出常用的成員函數(shù)。LOGFONT f; CFont cf;CFontDialog d;if(d.DoModal()=IDOK)d.GetCurrentFont(&f);cf.CreateFontIndirect(&f)

39、;pDC-SetTextColor(d.GetColor();2 繪制文本常用文本輸出函數(shù)文本的最終輸出不僅依賴于文本的字體,而且還跟文本的顏色、文本的最終輸出不僅依賴于文本的字體,而且還跟文本的顏色、對齊方式等有很大關(guān)系。對齊方式等有很大關(guān)系。CDCCDC類提供了類提供了4 4個輸出文本的函數(shù)。個輸出文本的函數(shù)。 (1)顯示文本顯示文本TextOut ()函數(shù)函數(shù) TextOut ()函數(shù)是用當(dāng)前字體在指定位置函數(shù)是用當(dāng)前字體在指定位置 (x,y) 處處顯示一個文本。顯示一個文本。 virtual BOOL TextOut(int x,int y,LPCTSTR lpszString int

40、 nCount);BOOL TextOut(int x,int y,const CString & str);例:例:pDC-TextOut(10,10,顯示文本顯示文本);常用文本輸出函數(shù)(2) (2) 根據(jù)制表位,設(shè)置字符輸出相應(yīng)位置根據(jù)制表位,設(shè)置字符輸出相應(yīng)位置TabbedTextOutTabbedTextOut也是用當(dāng)前字體在指定位置處顯示一個文也是用當(dāng)前字體在指定位置處顯示一個文本,但它還根據(jù)指定的制表位本,但它還根據(jù)指定的制表位(Tab)(Tab)設(shè)置相應(yīng)字符位置,函數(shù)設(shè)置相應(yīng)字符位置,函數(shù)勝利時前往輸出文本的大小。勝利時前往輸出文本的大小。virtual CSize T

41、abbedTextOut(int x,int y,LPCTSTR virtual CSize TabbedTextOut(int x,int y,LPCTSTR lpszString int nCount,int nTabPositions,LPINT lpszString int nCount,int nTabPositions,LPINT lpnTabStopPostions,int nTabOrigin);lpnTabStopPostions,int nTabOrigin);CSize TabbedTextOut(int x,int y,const CString &str,in

42、t CSize TabbedTextOut(int x,int y,const CString &str,int nTabPositions,LPINT lpnTabStopPostions,int nTabOrigin);nTabPositions,LPINT lpnTabStopPostions,int nTabOrigin);常用文本輸出函數(shù)(3) DrawText(3) DrawText函數(shù)是當(dāng)前字體在指定矩形中對文本進(jìn)展格函數(shù)是當(dāng)前字體在指定矩形中對文本進(jìn)展格式化繪制。式化繪制。 virtual int DrawText( LPCTSTR lpszString, int nC

43、ount, virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat );LPRECT lpRect, UINT nFormat );int DrawText( const CString& str, LPRECT lpRect, UINT int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );nFormat );nFormatnFormat表示文本的格式,如下表所示,可以是其中的常表示文本的格式,如

44、下表所示,可以是其中的常用值之一或用值之一或| |組合。組合。DrawText函數(shù)中nFormat的值DT_SINGLELINEDT_SINGLELINE指定文本的基準(zhǔn)線為參考點(diǎn)指定文本的基準(zhǔn)線為參考點(diǎn)DT_TOPDT_TOP與參考矩形上對齊與參考矩形上對齊DT_BOTTOMDT_BOTTOM與參考矩形下對齊與參考矩形下對齊DT_VCENTERDT_VCENTER與參考矩形垂直居中與參考矩形垂直居中DT_LEFTDT_LEFT與參考矩形左對齊與參考矩形左對齊DT_RIGHTDT_RIGHT與參考矩形右對齊與參考矩形右對齊DT_CENTERDT_CENTER與參考矩形水平居中與參考矩形水平居中D

45、T_WORDBREAKDT_WORDBREAK自動換行自動換行DT_MODIFYSTRINGDT_MODIFYSTRING將文本調(diào)整為能顯示的文本串將文本調(diào)整為能顯示的文本串常用文本輸出例如(10,10)(200,140)20020停頓位為停頓位為40個單位個單位停頓位為停頓位為80個單位個單位停頓位為停頓位為默許值默許值在C*View類的OnDraw(CDC *pDC)函數(shù)中添加繪圖代碼:CRect rc(10, 10, 200, 140);CRect rc(10, 10, 200, 140);pDC-Rectangle( rc );pDC-Rectangle( rc );pDC-DrawT

46、ext( pDC-DrawText( 單行文本居中單行文本居中, rc, , rc, DT_CENTER | DT_VCENTER | DT_CENTER | DT_VCENTER | DT_SINGLELINE);DT_SINGLELINE);在C*View類的OnDraw(CDC *pDC)函數(shù)中添加繪圖代碼:rc.OffsetRect( 200, 0 );rc.OffsetRect( 200, 0 );/ / 將矩形向右偏移將矩形向右偏移200200pDC-Rectangle( rc );pDC-Rectangle( rc );int nTab = 40; /int nTab = 40;

47、 /將將TabTab位的值指定為位的值指定為4040個邏輯單位個邏輯單位pDC-TabbedTextOut( rc.left, rc, pDC-TabbedTextOut( rc.left, rc, 繪制繪制tTabttTabt文本文本tt例如例如, 1, , 1, &nTab, rc.left);&nTab, rc.left); / / 運(yùn)用自定義的停頓位運(yùn)用自定義的停頓位(Tab)(Tab)nTab = 80;nTab = 80;pDC-TabbedTextOut( rc.left, rc+20, pDC-TabbedTextOut( rc.left, rc+20, 繪制繪

48、制tTabttTabt文本文本tt例如例如, , 1, &nTab, rc.left);1, &nTab, rc.left); / / 運(yùn)用自定義的停頓位運(yùn)用自定義的停頓位(Tab)(Tab)pDC-TabbedTextOut( rc.left, rc+40, pDC-TabbedTextOut( rc.left, rc+40, 繪制繪制tTabttTabt文本文本tt例如例如, , 0, NULL, 0);0, NULL, 0);/ / 運(yùn)用默許的停頓位運(yùn)用默許的停頓位文本格式化屬性文本的格式屬性通常包括文本顏色、對齊方式、字文本的格式屬性通常包括文本顏色、對齊方式、字符間隔

49、以及文本調(diào)整等。在繪圖設(shè)備環(huán)境中,默許的符間隔以及文本調(diào)整等。在繪圖設(shè)備環(huán)境中,默許的文本顏色是黑色,而文本背風(fēng)光為白色,文本顏色是黑色,而文本背風(fēng)光為白色,在在CDC類中,類中,SetTextColor、SetBkColor和和SetBkMode函數(shù)就是分別用來設(shè)置文本顏色、文本函數(shù)就是分別用來設(shè)置文本顏色、文本背風(fēng)光和背景方式,而與之相對應(yīng)的背風(fēng)光和背景方式,而與之相對應(yīng)的GetTextColor、GetBkcolor和和GetBkMode函數(shù)那么是分別獲取這函數(shù)那么是分別獲取這三項屬性的。三項屬性的。SetTextAlign、GetTextAlign函數(shù)是設(shè)置和獲取函數(shù)是設(shè)置和獲取文本對

50、齊方式文本對齊方式(文本的對齊方式如文本的對齊方式如P221表表7.5所示所示)。文本格式化屬性virtual COLORREF SetTextColor( COLORREF crColor );virtual COLORREF SetTextColor( COLORREF crColor );COLORREF GetTextColor( ) const;COLORREF GetTextColor( ) const;virtual COLORREF SetBkColor( COLORREF crColor );virtual COLORREF SetBkColor( COLORREF crCo

51、lor );COLORREF GetBkColor( ) const;COLORREF GetBkColor( ) const;int SetBkMode( int nBkMode );int SetBkMode( int nBkMode );int GetBkMode( ) const;int GetBkMode( ) const;UINT SetTextAlign(UINT nFlags);UINT SetTextAlign(UINT nFlags);UINT GetTextAlign() const;UINT GetTextAlign() const; 3字體的運(yùn)用舉例【例【例6.36.

52、3】字體的運(yùn)用程序舉例。】字體的運(yùn)用程序舉例。代碼(C*View:OnDraw()/默許的字體默許的字體pDC-TextOut(10,10,pDC-TextOut(10,10,默許的字體默許的字體););/設(shè)置字體顏色設(shè)置字體顏色pDC-SetTextColor(RGB(255,0,0);pDC-SetTextColor(RGB(255,0,0); / /設(shè)置背風(fēng)光設(shè)置背風(fēng)光pDC-SetBkColor(RGB(0,0,255); pDC-SetBkColor(RGB(0,0,255); /設(shè)置字符間間距設(shè)置字符間間距pDC-SetTextCharacterExtra(4); pDC-SetText

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論