圖像編程與文字處理_第1頁(yè)
圖像編程與文字處理_第2頁(yè)
圖像編程與文字處理_第3頁(yè)
圖像編程與文字處理_第4頁(yè)
圖像編程與文字處理_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第6 6章章 圖像編程與文字處理圖像編程與文字處理 精雕細(xì)琢,美化應(yīng)用程序精雕細(xì)琢,美化應(yīng)用程序教學(xué)內(nèi)容教學(xué)內(nèi)容6.1 6.1 圖形設(shè)備接口圖形設(shè)備接口6.2 6.2 常用繪圖函數(shù)常用繪圖函數(shù)6.3 6.3 繪圖工具繪圖工具6.4 6.4 字體與文字處理字體與文字處理6.5 6.5 位圖位圖6.6 6.6 綜合實(shí)例綜合實(shí)例建立賓館管理系統(tǒng)的啟動(dòng)界面建立賓館管理系統(tǒng)的啟動(dòng)界面6.7 6.7 小結(jié)小結(jié) 思考與練習(xí)思考與練習(xí)6.1 6.1 圖形設(shè)備接口圖形設(shè)備接口在在Windows程序中,應(yīng)用程序的輸出并不直接面向物理的設(shè)程序中,應(yīng)用程序的輸出并不直接面向物理的設(shè)備,如顯示屏或打印機(jī),而是針對(duì)一個(gè)

2、稱之為設(shè)備環(huán)境備,如顯示屏或打印機(jī),而是針對(duì)一個(gè)稱之為設(shè)備環(huán)境(Device Context)的邏輯設(shè)備進(jìn)行操作,設(shè)備環(huán)境與實(shí)際)的邏輯設(shè)備進(jìn)行操作,設(shè)備環(huán)境與實(shí)際設(shè)備之間的信息傳送由設(shè)備之間的信息傳送由Windows直接管理。直接管理。在在MFC應(yīng)用程序中,所有的繪制調(diào)用均通過(guò)相應(yīng)的設(shè)備環(huán)境對(duì)應(yīng)用程序中,所有的繪制調(diào)用均通過(guò)相應(yīng)的設(shè)備環(huán)境對(duì)象實(shí)現(xiàn),設(shè)備環(huán)境對(duì)象封裝了相應(yīng)的象實(shí)現(xiàn),設(shè)備環(huán)境對(duì)象封裝了相應(yīng)的Windows API功能,由功能,由一個(gè)一個(gè)32位的位的HDC類型句柄標(biāo)識(shí)。在類型句柄標(biāo)識(shí)。在MFC類庫(kù)中,用類庫(kù)中,用CDC類封類封裝設(shè)備文本對(duì)象。裝設(shè)備文本對(duì)象。6.1 6.1 圖形設(shè)備

3、接口圖形設(shè)備接口1、設(shè)備環(huán)境類(、設(shè)備環(huán)境類(CDC)CDC類直接繼承自類直接繼承自CObject類,它是設(shè)備上下文對(duì)象的基類。類,它是設(shè)備上下文對(duì)象的基類。CDC基類定基類定義了設(shè)備描述表對(duì)象,并且提供在顯示器、打印機(jī)或義了設(shè)備描述表對(duì)象,并且提供在顯示器、打印機(jī)或Windows用戶區(qū)上繪用戶區(qū)上繪圖的方法,它封裝了使用設(shè)備環(huán)境的圖的方法,它封裝了使用設(shè)備環(huán)境的GDI函數(shù)。函數(shù)。所有的繪圖操作都是直接或間接運(yùn)用了所有的繪圖操作都是直接或間接運(yùn)用了CDC的成員函數(shù),這些函數(shù)有的進(jìn)行的成員函數(shù),這些函數(shù)有的進(jìn)行設(shè)備描述表操作,有的是用來(lái)畫圖的,還有的函數(shù)是用來(lái)獲取或設(shè)置繪圖屬設(shè)備描述表操作,有的

4、是用來(lái)畫圖的,還有的函數(shù)是用來(lái)獲取或設(shè)置繪圖屬性,為映像和視圖服務(wù)的。性,為映像和視圖服務(wù)的。2、派生類、派生類CPaintDCCPaintDC是從是從CDC派生出來(lái)的設(shè)備描述表類,它常常在窗口的派生出來(lái)的設(shè)備描述表類,它常常在窗口的OnPaint函數(shù)中使用。查看函數(shù)中使用。查看MFC的源代碼的源代碼(StudioVC98MFCSRCviewcore.cpp)中的)中的OnPaint函數(shù)的函數(shù)的實(shí)現(xiàn)可以知道,實(shí)現(xiàn)可以知道,OnPaint函數(shù)首先構(gòu)造一個(gè)函數(shù)首先構(gòu)造一個(gè)CPaintDC對(duì)象,再調(diào)用對(duì)象,再調(diào)用OnPrepareDC()函數(shù)將其準(zhǔn)備好,最后以這個(gè)準(zhǔn)備好的函數(shù)將其準(zhǔn)備好,最后以這個(gè)準(zhǔn)

5、備好的CPaintDC對(duì)象對(duì)象指針為參數(shù),來(lái)調(diào)用指針為參數(shù),來(lái)調(diào)用OnDraw函數(shù)進(jìn)行各種圖形處理。函數(shù)進(jìn)行各種圖形處理。6.1 6.1 圖形設(shè)備接口圖形設(shè)備接口3、派生類、派生類CClientDC(管理客戶區(qū)管理客戶區(qū))CClientDC類只能在客戶區(qū)繪圖。所謂客戶區(qū)是指窗口區(qū)域中去掉邊框、類只能在客戶區(qū)繪圖。所謂客戶區(qū)是指窗口區(qū)域中去掉邊框、標(biāo)題欄、菜單欄、工具欄、狀態(tài)欄等以外的部分,它是用戶可以操作的區(qū)域。標(biāo)題欄、菜單欄、工具欄、狀態(tài)欄等以外的部分,它是用戶可以操作的區(qū)域。例如打開(kāi)例如打開(kāi)Word文檔將是將某個(gè)文檔將是將某個(gè).doc文件顯示在其客戶區(qū)域中。在使用文件顯示在其客戶區(qū)域中。在

6、使用CClientDC進(jìn)行繪圖時(shí),一般要調(diào)用進(jìn)行繪圖時(shí),一般要調(diào)用GetClientRect函數(shù)來(lái)獲取客戶區(qū)域函數(shù)來(lái)獲取客戶區(qū)域的大小。的大小。4、派生類、派生類CWindowDC(管理框架窗口管理框架窗口) CWindowDC類直接從類直接從CDC派生,它使調(diào)用和釋放整個(gè)窗口(包括客戶派生,它使調(diào)用和釋放整個(gè)窗口(包括客戶區(qū)和非客戶區(qū))的設(shè)備環(huán)境過(guò)程自動(dòng)化。區(qū)和非客戶區(qū))的設(shè)備環(huán)境過(guò)程自動(dòng)化。CWindowDC對(duì)象在構(gòu)造時(shí)調(diào)用對(duì)象在構(gòu)造時(shí)調(diào)用Windows API函數(shù)函數(shù)GetWindowDC, 在析構(gòu)時(shí)調(diào)用相應(yīng)的在析構(gòu)時(shí)調(diào)用相應(yīng)的API函數(shù)函數(shù)ReleaseDC,這意味著這意味著CWind

7、owtDC對(duì)象可訪問(wèn)對(duì)象可訪問(wèn)CWnd所指向的整個(gè)屏所指向的整個(gè)屏幕區(qū)域。幕區(qū)域。6.1 6.1 圖形設(shè)備接口圖形設(shè)備接口在選擇在選擇GDI對(duì)象進(jìn)行繪圖時(shí),往往遵循著下列的步驟:對(duì)象進(jìn)行繪圖時(shí),往往遵循著下列的步驟:(1) 在堆棧中定義一個(gè)在堆棧中定義一個(gè)GDI對(duì)象對(duì)象(如如CPen、CBrush對(duì)象對(duì)象),然后用相應(yīng)的函數(shù)然后用相應(yīng)的函數(shù)(如如CreatePen、CreateSolidBrush)創(chuàng)創(chuàng)建此建此GDI對(duì)象。對(duì)象。(2) 將構(gòu)造的將構(gòu)造的GDI對(duì)象選入當(dāng)前設(shè)備環(huán)境中,但不要忘記將原對(duì)象選入當(dāng)前設(shè)備環(huán)境中,但不要忘記將原來(lái)的來(lái)的GDI對(duì)象保存起來(lái)。對(duì)象保存起來(lái)。(3) 繪圖結(jié)束后,

8、恢復(fù)當(dāng)前設(shè)備環(huán)境中原來(lái)的繪圖結(jié)束后,恢復(fù)當(dāng)前設(shè)備環(huán)境中原來(lái)的GDI對(duì)象。對(duì)象。(4) 由于由于GDI對(duì)象是在堆棧中創(chuàng)建中,當(dāng)程序結(jié)束后,框架會(huì)對(duì)象是在堆棧中創(chuàng)建中,當(dāng)程序結(jié)束后,框架會(huì)自動(dòng)刪除程序創(chuàng)建的自動(dòng)刪除程序創(chuàng)建的GDI對(duì)象。對(duì)象。6.1 6.1 圖形設(shè)備接口圖形設(shè)備接口Windows的的GDI(graphics device interface)支持兩種坐標(biāo)系,即邏輯坐標(biāo)支持兩種坐標(biāo)系,即邏輯坐標(biāo)系和物理坐標(biāo)系,分別連接應(yīng)用程序和圖形物理設(shè)備。物理坐標(biāo)是指物理設(shè)備的坐標(biāo)系和物理坐標(biāo)系,分別連接應(yīng)用程序和圖形物理設(shè)備。物理坐標(biāo)是指物理設(shè)備的坐標(biāo)系,它的單位是真正的長(zhǎng)度單位,有英寸(系,它

9、的單位是真正的長(zhǎng)度單位,有英寸(in)和毫米()和毫米(mm)兩種,它的原點(diǎn)在)兩種,它的原點(diǎn)在屏幕的左上角,屏幕的左上角,X軸向右遞增,軸向右遞增,Y軸向下遞增。邏輯坐標(biāo)指的是在窗口下的坐標(biāo),邏軸向下遞增。邏輯坐標(biāo)指的是在窗口下的坐標(biāo),邏輯坐標(biāo)的單位是邏輯像素。輯坐標(biāo)的單位是邏輯像素。在在Windows系統(tǒng)中,總共有三種物理坐標(biāo)(又叫設(shè)備坐標(biāo)),分別是屏幕坐標(biāo)、系統(tǒng)中,總共有三種物理坐標(biāo)(又叫設(shè)備坐標(biāo)),分別是屏幕坐標(biāo)、用戶區(qū)坐標(biāo)、全窗口坐標(biāo)。用戶區(qū)坐標(biāo)、全窗口坐標(biāo)。1客戶區(qū)坐標(biāo)系統(tǒng):客戶區(qū)坐標(biāo)系統(tǒng)是最常見(jiàn)的坐標(biāo)系統(tǒng),以窗口客戶區(qū)左上角為客戶區(qū)坐標(biāo)系統(tǒng):客戶區(qū)坐標(biāo)系統(tǒng)是最常見(jiàn)的坐標(biāo)系統(tǒng),以窗

10、口客戶區(qū)左上角為原點(diǎn)(原點(diǎn)(0,0),主要用于窗口客戶區(qū)繪圖輸出以及處理窗口的一些消息。鼠標(biāo)消息),主要用于窗口客戶區(qū)繪圖輸出以及處理窗口的一些消息。鼠標(biāo)消息WM_LBUTTONDOWN、WM_MOUSEMOVE傳給框架的消息參數(shù)以及傳給框架的消息參數(shù)以及CDC一一些用于繪圖的成員都是使用客戶區(qū)坐標(biāo)。些用于繪圖的成員都是使用客戶區(qū)坐標(biāo)。2屏幕坐標(biāo)系統(tǒng):屏幕坐標(biāo)系統(tǒng)是另一類常用的坐標(biāo)系統(tǒng),以屏幕左上角為原點(diǎn)屏幕坐標(biāo)系統(tǒng):屏幕坐標(biāo)系統(tǒng)是另一類常用的坐標(biāo)系統(tǒng),以屏幕左上角為原點(diǎn)(0,0)。一些與窗口客戶區(qū)不相關(guān)的函數(shù)均以屏幕坐標(biāo)為單位,例如設(shè)置和取得)。一些與窗口客戶區(qū)不相關(guān)的函數(shù)均以屏幕坐標(biāo)為單位

11、,例如設(shè)置和取得光標(biāo)位置的函數(shù)光標(biāo)位置的函數(shù)SetCursorPos()和()和GetCursorPos();由于光標(biāo)可以在任();由于光標(biāo)可以在任何一個(gè)窗口之間移動(dòng),它不屬于任何一個(gè)單一的窗口,因此使用屏幕坐標(biāo)。彈出式菜何一個(gè)窗口之間移動(dòng),它不屬于任何一個(gè)單一的窗口,因此使用屏幕坐標(biāo)。彈出式菜單使用的也是屏幕坐標(biāo)。另外,單使用的也是屏幕坐標(biāo)。另外,CreateWindow()和()和MoveWindow()等函()等函數(shù)用于設(shè)置窗口相對(duì)于屏幕的位置,使用的也是屏幕坐標(biāo)系統(tǒng)。數(shù)用于設(shè)置窗口相對(duì)于屏幕的位置,使用的也是屏幕坐標(biāo)系統(tǒng)。3窗口坐標(biāo)系統(tǒng):窗口坐標(biāo)系統(tǒng)以窗口左上角為坐標(biāo)原點(diǎn),它包含了窗口

12、控制菜單、窗口坐標(biāo)系統(tǒng):窗口坐標(biāo)系統(tǒng)以窗口左上角為坐標(biāo)原點(diǎn),它包含了窗口控制菜單、標(biāo)題欄等內(nèi)容。一般情況下很少在窗口標(biāo)題欄上繪圖,因此這種坐標(biāo)系統(tǒng)很少使用。標(biāo)題欄等內(nèi)容。一般情況下很少在窗口標(biāo)題欄上繪圖,因此這種坐標(biāo)系統(tǒng)很少使用。6.1 6.1 圖形設(shè)備接口圖形設(shè)備接口在圖形繪制操作中,常常需要使用在圖形繪制操作中,常常需要使用MFC中的中的CPoint、CSize和和CRect等簡(jiǎn)單數(shù)據(jù)等簡(jiǎn)單數(shù)據(jù)類由于類由于CPoint(點(diǎn)點(diǎn))、CSize(大小大小)和和CRect(矩形矩形)是對(duì)是對(duì)Windows的的POINT、SIZE和和RECT結(jié)構(gòu)的封裝,因此它們可以直接使用各自結(jié)構(gòu)的數(shù)據(jù)成員,如下所

13、示:結(jié)構(gòu)的封裝,因此它們可以直接使用各自結(jié)構(gòu)的數(shù)據(jù)成員,如下所示:typedef struct tagPOINT LONG x; / 點(diǎn)的點(diǎn)的x坐標(biāo)坐標(biāo) LONG y; / 點(diǎn)的點(diǎn)的y坐標(biāo)坐標(biāo) POINT;typedef struct tagSIZE LONG cx; /矩形的長(zhǎng)度矩形的長(zhǎng)度 LONG cy; /矩形的寬度矩形的寬度 SIZE; typedef struct tagRECT LONG left;/ 矩形左上角點(diǎn)的矩形左上角點(diǎn)的x坐標(biāo)坐標(biāo) LONG top; / 矩形左上角點(diǎn)的矩形左上角點(diǎn)的y坐標(biāo)坐標(biāo) LONG right; / 矩形右下角點(diǎn)的矩形右下角點(diǎn)的x坐標(biāo)坐標(biāo) LONG

14、bottom; / 矩形右下角點(diǎn)的矩形右下角點(diǎn)的y坐標(biāo)坐標(biāo) RECT;6.2 6.2 常用繪圖函數(shù)常用繪圖函數(shù)1、畫點(diǎn)、畫點(diǎn) 畫點(diǎn)是最基本的繪圖操作之一,它是通過(guò)調(diào)用畫點(diǎn)是最基本的繪圖操作之一,它是通過(guò)調(diào)用CDC:SetPixel或或CDC:SetPixelV 函數(shù)來(lái)實(shí)現(xiàn)的。這兩個(gè)函數(shù)都是用來(lái)在指定的坐標(biāo)上設(shè)置指定的函數(shù)來(lái)實(shí)現(xiàn)的。這兩個(gè)函數(shù)都是用來(lái)在指定的坐標(biāo)上設(shè)置指定的顏色,只不過(guò)顏色,只不過(guò)SetPixelV函數(shù)不需要返回實(shí)際像素點(diǎn)的函數(shù)不需要返回實(shí)際像素點(diǎn)的RGB值;正是因?yàn)檫@一點(diǎn),值;正是因?yàn)檫@一點(diǎn),函數(shù)函數(shù)SetPixelV要比要比SetPixel快得多。快得多。COLORREF S

15、etPixel( int x, int y, COLORREF crColor );COLORREF SetPixel( POINT point, COLORREF crColor );BOOL SetPixelV(int x, int y, COLORREF crColor);BOOL SetPixelV( POINT point, COLORREF crColor );其中參數(shù)其中參數(shù)point指定所繪制的點(diǎn),指定所繪制的點(diǎn),crColor指定畫點(diǎn)所用的顏色。倘若要在屏幕的指定畫點(diǎn)所用的顏色。倘若要在屏幕的(100,100)處畫一個(gè)紅色點(diǎn),則代碼為:)處畫一個(gè)紅色點(diǎn),則代碼為:pDC- S

16、etPixel(CPoint(100,100),RGB(255,0,0);實(shí)際顯示像素的顏色未必等同于實(shí)際顯示像素的顏色未必等同于crColor所指定的顏色值,因?yàn)橛袝r(shí)受設(shè)備限制,不所指定的顏色值,因?yàn)橛袝r(shí)受設(shè)備限制,不能顯示能顯示crColor所指定的顏色值,而只能取其近似值。與上述函數(shù)相對(duì)應(yīng)的所指定的顏色值,而只能取其近似值。與上述函數(shù)相對(duì)應(yīng)的GetPixel函數(shù)是用來(lái)獲取指定點(diǎn)的顏色。函數(shù)是用來(lái)獲取指定點(diǎn)的顏色。COLORREF GetPixel( int x, int y ) const;COLORREF GetPixel( POINT point ) const;6.2 6.2 常用

17、繪圖函數(shù)常用繪圖函數(shù)2、畫線、畫線畫線也是特別常用的繪圖操作之一。畫線也是特別常用的繪圖操作之一。CDC的的LineTo和和MoveTo函數(shù)就是用函數(shù)就是用來(lái)實(shí)現(xiàn)畫線功能的兩個(gè)函數(shù),通過(guò)這兩個(gè)函數(shù)的配合使用,可完成任何直線來(lái)實(shí)現(xiàn)畫線功能的兩個(gè)函數(shù),通過(guò)這兩個(gè)函數(shù)的配合使用,可完成任何直線和折線的繪制操作。和折線的繪制操作。CDC:MoveTo用來(lái)移動(dòng)當(dāng)前點(diǎn)到指定點(diǎn),返回當(dāng)前點(diǎn)的坐標(biāo)。它有兩種用來(lái)移動(dòng)當(dāng)前點(diǎn)到指定點(diǎn),返回當(dāng)前點(diǎn)的坐標(biāo)。它有兩種調(diào)用形式,其函數(shù)原型如下:調(diào)用形式,其函數(shù)原型如下:CPoint MoveTo(int x,int y);CPoint MoveTo(POINT point

18、);參數(shù)參數(shù)x為新位置的為新位置的x坐標(biāo),坐標(biāo),y為新位置的為新位置的y坐標(biāo)坐標(biāo); point為新位置的坐標(biāo)為新位置的坐標(biāo).CDC:LineTo函數(shù)用來(lái)繪制一條從當(dāng)前點(diǎn)到指定點(diǎn)的直線,返回是否繪制函數(shù)用來(lái)繪制一條從當(dāng)前點(diǎn)到指定點(diǎn)的直線,返回是否繪制成功的標(biāo)志,其原型如下:成功的標(biāo)志,其原型如下:BOOL LineTo( int x, int y );BOOL LineTo( POINT point );參數(shù)參數(shù)x為指定點(diǎn)的為指定點(diǎn)的x坐標(biāo),坐標(biāo),y為指定點(diǎn)的為指定點(diǎn)的y坐標(biāo)坐標(biāo); point為指定點(diǎn)的坐標(biāo)為指定點(diǎn)的坐標(biāo).6.2 6.2 常用繪圖函數(shù)常用繪圖函數(shù)3、折線、折線除了除了LineTo

19、函數(shù)可用來(lái)畫線之外,函數(shù)可用來(lái)畫線之外,CDC中還提供了一系列用于畫各種折線中還提供了一系列用于畫各種折線的函數(shù)。它們主要是的函數(shù)。它們主要是Polyline、PolyPolyline和和PolylineTo。這三個(gè)函。這三個(gè)函數(shù)中,數(shù)中,Polyline和和PolyPolyline既不使用當(dāng)前位置,也不更新當(dāng)前位置;既不使用當(dāng)前位置,也不更新當(dāng)前位置;而而PolylineTo總是把當(dāng)前位置作為起始點(diǎn),并且在折線畫完之后,還把折總是把當(dāng)前位置作為起始點(diǎn),并且在折線畫完之后,還把折線終點(diǎn)所在位置設(shè)為新的當(dāng)前位置。這幾個(gè)函數(shù)的原型如下:線終點(diǎn)所在位置設(shè)為新的當(dāng)前位置。這幾個(gè)函數(shù)的原型如下:BOOL

20、 Polyline( LPPOINT lpPoints, int nCount );BOOL PolylineTo( const POINT* lpPoints, int nCount );這兩個(gè)函數(shù)用來(lái)畫一系列連續(xù)的折線,參數(shù)這兩個(gè)函數(shù)用來(lái)畫一系列連續(xù)的折線,參數(shù)lpPoints是是POINT或或CPoint的頂點(diǎn)數(shù)組;的頂點(diǎn)數(shù)組;nCount表示數(shù)組中頂點(diǎn)的個(gè)數(shù),它至少為表示數(shù)組中頂點(diǎn)的個(gè)數(shù),它至少為2。BOOL PolyPolyline( const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount );此函數(shù)可用來(lái)繪制多條折線

21、。其中此函數(shù)可用來(lái)繪制多條折線。其中l(wèi)pPoints同前定義,同前定義,lpPolyPoints表表示各條折線所需的頂點(diǎn)數(shù),示各條折線所需的頂點(diǎn)數(shù),nCount表示折線的數(shù)目。表示折線的數(shù)目。6.2 6.2 常用繪圖函數(shù)常用繪圖函數(shù)CDC提供的提供的Rectangle和和RoundRect函數(shù)分別用于矩形和圓角矩形的繪函數(shù)分別用于矩形和圓角矩形的繪制,它們的原型如下:制,它們的原型如下:BOOL Rectangle( int x1, int y1, int x2, int y2 );BOOL Rectangle( LPCRECT lpRect );BOOL RoundRect( int x1,

22、 int y1, int x2, int y2, int x3, int y3 );BOOL RoundRect( LPCRECT lpRect, POINT point );參數(shù)參數(shù)lpRect的成員的成員left,top,right,bottom分別表示分別表示x1,y1,x2,y2,point的成員的成員x,y分別表示分別表示x3,y3;而;而x1,y1表示矩形的左上角坐標(biāo),表示矩形的左上角坐標(biāo),x2,y2表示矩形的右上角坐標(biāo),表示矩形的右上角坐標(biāo),x3,y3表示繪制圓角的橢圓大小,表示繪制圓角的橢圓大小, 6.2 6.2 常用繪圖函數(shù)常用繪圖函數(shù)p通過(guò)調(diào)用通過(guò)調(diào)用CDC的的Arc函數(shù)可

23、以畫一條橢圓弧線或者整個(gè)橢圓。這個(gè)橢圓的函數(shù)可以畫一條橢圓弧線或者整個(gè)橢圓。這個(gè)橢圓的大小是由其外接矩形大小是由其外接矩形(本身并不可見(jiàn)本身并不可見(jiàn))所決定的。所決定的。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 );p使用使用CDC的成員函數(shù)的成員函數(shù)Ellipse,可以使用當(dāng)前筆繪制一個(gè)用當(dāng)前畫刷填充,可以使用當(dāng)前筆繪制一個(gè)用當(dāng)前畫刷填充的橢圓

24、或圓。其函數(shù)原型如下:的橢圓或圓。其函數(shù)原型如下:BOOL Ellipse(int x1, int y1, int x2, int y2 );BOOL Ellipse( LPCRECT lpRect );6.3 6.3 繪圖工具繪圖工具p畫筆是最簡(jiǎn)單的一種繪圖工具,同時(shí)也是最重要的一種繪圖對(duì)象。在現(xiàn)實(shí)畫筆是最簡(jiǎn)單的一種繪圖工具,同時(shí)也是最重要的一種繪圖對(duì)象。在現(xiàn)實(shí)世界中世界中,可以用不同的筆產(chǎn)生不同的線。這正如繪圖用的彩筆、不同顏色筆可以用不同的筆產(chǎn)生不同的線。這正如繪圖用的彩筆、不同顏色筆產(chǎn)生不同顏色的線。產(chǎn)生不同顏色的線。Windows也是利用這種面向?qū)ο蟮拿枋鍪挛锏姆椒ǎ彩抢眠@種面向

25、對(duì)象的描述事物的方法,把筆作為一個(gè)對(duì)象,和現(xiàn)實(shí)世界一樣,不同的筆產(chǎn)生不同的線。把筆作為一個(gè)對(duì)象,和現(xiàn)實(shí)世界一樣,不同的筆產(chǎn)生不同的線。p一個(gè)畫筆通常具有寬度、風(fēng)格和顏色三種屬性。畫筆的寬度用來(lái)確定所畫一個(gè)畫筆通常具有寬度、風(fēng)格和顏色三種屬性。畫筆的寬度用來(lái)確定所畫的線條寬度,它是用設(shè)備單位表示的,默認(rèn)的畫筆寬度是一個(gè)像素單位。畫的線條寬度,它是用設(shè)備單位表示的,默認(rèn)的畫筆寬度是一個(gè)像素單位。畫筆的顏色確定了所畫的線條顏色。畫筆的風(fēng)格確定了所繪圖形的線型,它通筆的顏色確定了所畫的線條顏色。畫筆的風(fēng)格確定了所繪圖形的線型,它通常有實(shí)線、虛線、點(diǎn)線、點(diǎn)劃線、雙點(diǎn)劃線、不可見(jiàn)線和內(nèi)框線等七種風(fēng)格。常有

26、實(shí)線、虛線、點(diǎn)線、點(diǎn)劃線、雙點(diǎn)劃線、不可見(jiàn)線和內(nèi)框線等七種風(fēng)格。 6.3 6.3 繪圖工具繪圖工具1、畫筆的創(chuàng)建、畫筆的創(chuàng)建創(chuàng)建一個(gè)修飾畫筆,可以使用創(chuàng)建一個(gè)修飾畫筆,可以使用CPen類的類的CreatePen函數(shù),其原型如下:函數(shù),其原型如下: BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor );參數(shù)參數(shù)nPenStyle、nWidth、crColor分別用來(lái)指定畫筆的風(fēng)格、寬度和顏色。此分別用來(lái)指定畫筆的風(fēng)格、寬度和顏色。此外,還有一個(gè)外,還有一個(gè)CreatePenIndirect函數(shù)也是用來(lái)創(chuàng)建畫筆對(duì)象,它的作用與函

27、數(shù)也是用來(lái)創(chuàng)建畫筆對(duì)象,它的作用與CreatePen函數(shù)是完全一樣的,只是畫筆的三個(gè)屬性不是直接出現(xiàn)在函數(shù)參數(shù)中,函數(shù)是完全一樣的,只是畫筆的三個(gè)屬性不是直接出現(xiàn)在函數(shù)參數(shù)中,而是通過(guò)一個(gè)而是通過(guò)一個(gè)LOGPEN結(jié)構(gòu)間接地給出。結(jié)構(gòu)間接地給出。 BOOL CreatePenIndirect( LPLOGPEN lpLogPen );此函數(shù)用由此函數(shù)用由LOGPEN結(jié)構(gòu)指針指定的相關(guān)參數(shù)創(chuàng)建畫筆,結(jié)構(gòu)指針指定的相關(guān)參數(shù)創(chuàng)建畫筆,LOGPEN結(jié)構(gòu)如下:結(jié)構(gòu)如下:typedef struct tagLOGPEN UINT lopnStyle;/ 畫筆風(fēng)格,同上畫筆風(fēng)格,同上 POINT lopnWi

28、dth;/ POINT結(jié)構(gòu)的結(jié)構(gòu)的y不起作用不起作用,而用而用x表示畫筆寬度表示畫筆寬度 COLORREF lopnColor;/ 畫筆顏色畫筆顏色 LOGPEN;6.3 6.3 繪圖工具繪圖工具2、使用畫筆、使用畫筆在在VC+.NET,通常按照如下步驟來(lái)使用畫筆:,通常按照如下步驟來(lái)使用畫筆:(1)聲明)聲明CPen對(duì)象。對(duì)象。(2)初始化畫筆。通過(guò)調(diào)用)初始化畫筆。通過(guò)調(diào)用CreatePen成員函數(shù)可以初始化筆。成員函數(shù)可以初始化筆。(3)將新建的畫筆對(duì)象選進(jìn)設(shè)備場(chǎng)景中,同時(shí)保存原畫筆對(duì)象的指針:)將新建的畫筆對(duì)象選進(jìn)設(shè)備場(chǎng)景中,同時(shí)保存原畫筆對(duì)象的指針: pOldPen=pDC-Sele

29、ctObject(&pen);(4)調(diào)用繪圖函數(shù)生成圖形。)調(diào)用繪圖函數(shù)生成圖形。(5)選擇設(shè)備場(chǎng)景的原有筆對(duì)象。)選擇設(shè)備場(chǎng)景的原有筆對(duì)象。3、畫筆工具的操作示例、畫筆工具的操作示例 6.3 6.3 繪圖工具繪圖工具1、畫刷的屬性、畫刷的屬性畫刷的屬性通常包括填充色、填充圖案和填充樣式三種。畫刷的填充色和畫畫刷的屬性通常包括填充色、填充圖案和填充樣式三種。畫刷的填充色和畫筆顏色一樣,都是使用筆顏色一樣,都是使用COLORREF顏色類型,畫刷的填充圖案通常是用戶顏色類型,畫刷的填充圖案通常是用戶定義的定義的8 8位圖,而填充樣式往往是位圖,而填充樣式往往是CDC內(nèi)部定義的一些特性,它們

30、都是內(nèi)部定義的一些特性,它們都是以以HS_為前綴的標(biāo)識(shí)為前綴的標(biāo)識(shí).2、畫刷的創(chuàng)建、畫刷的創(chuàng)建CBrush類根據(jù)畫刷屬性提供了相應(yīng)的創(chuàng)建函數(shù),例如創(chuàng)建填充色畫刷和填類根據(jù)畫刷屬性提供了相應(yīng)的創(chuàng)建函數(shù),例如創(chuàng)建填充色畫刷和填充樣式畫刷的函數(shù)為充樣式畫刷的函數(shù)為CreateSolidBrush和和CreateHatchBrush,它們,它們的原型如下:的原型如下:BOOL CreateSolidBrush( COLORREF crColor ); / 創(chuàng)建填充色畫刷創(chuàng)建填充色畫刷BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); / 創(chuàng)建填

31、充樣式畫刷創(chuàng)建填充樣式畫刷其中,其中,nIndex用來(lái)指定畫刷的內(nèi)部填充樣式,而用來(lái)指定畫刷的內(nèi)部填充樣式,而crColor表示畫刷的填充表示畫刷的填充色。色。與畫筆相類似,也有一個(gè)與畫筆相類似,也有一個(gè)LOGBRUSH 邏輯結(jié)構(gòu)用于畫刷屬性的定義,并邏輯結(jié)構(gòu)用于畫刷屬性的定義,并通過(guò)通過(guò) CBrush的成員函數(shù)的成員函數(shù)CreateBrushIndirect來(lái)創(chuàng)建,其原型如下:來(lái)創(chuàng)建,其原型如下:BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush );6.3 6.3 繪圖工具繪圖工具3、畫刷的使用、畫刷的使用在在VC+.NET,通常按照如

32、下步驟來(lái)使用畫刷:,通常按照如下步驟來(lái)使用畫刷:(1)生成)生成CBrush的實(shí)例。刷子以多種樣式和顏色出現(xiàn)在的實(shí)例。刷子以多種樣式和顏色出現(xiàn)在CBrush:CBrush(): CBrush( ); CBrush( COLORREF crColor ); CBrush( int nIndex, COLORREF crColor );上述函數(shù)的參數(shù)上述函數(shù)的參數(shù)crColor指定刷子顏色;指定刷子顏色;nIndex參數(shù)指定刷子圖案,其值參數(shù)指定刷子圖案,其值如表如表8.7所示。所示。(2)調(diào)用相應(yīng)的成員函數(shù)初始化刷子。)調(diào)用相應(yīng)的成員函數(shù)初始化刷子。(3)將所創(chuàng)建的畫刷選入設(shè)備環(huán)境,同時(shí)保存原畫

33、刷對(duì)象的指針。)將所創(chuàng)建的畫刷選入設(shè)備環(huán)境,同時(shí)保存原畫刷對(duì)象的指針。(4)調(diào)用繪圖函數(shù)生成圖形。)調(diào)用繪圖函數(shù)生成圖形。(5)恢復(fù)原先設(shè)備環(huán)境中的畫刷。)恢復(fù)原先設(shè)備環(huán)境中的畫刷。 6.3 6.3 繪圖工具繪圖工具3、畫刷的使用、畫刷的使用 6.3 6.3 繪圖工具繪圖工具 6.4 6.4 字體與文字處理字體與文字處理字體的屬性有很多,但其主要屬性有字樣、風(fēng)格和尺寸三個(gè)。字樣是字符書字體的屬性有很多,但其主要屬性有字樣、風(fēng)格和尺寸三個(gè)。字樣是字符書寫和顯示時(shí)表現(xiàn)出的特定模式,例如,對(duì)于漢字,通常有宋體、楷體、仿宋、寫和顯示時(shí)表現(xiàn)出的特定模式,例如,對(duì)于漢字,通常有宋體、楷體、仿宋、黑體、隸書

34、以及幼圓等多種字樣。字體風(fēng)格主要表現(xiàn)為字體的粗細(xì)和是否傾黑體、隸書以及幼圓等多種字樣。字體風(fēng)格主要表現(xiàn)為字體的粗細(xì)和是否傾斜等特點(diǎn)。字體尺寸是用來(lái)指定字符所占區(qū)域的大小,通常用字符高度來(lái)描斜等特點(diǎn)。字體尺寸是用來(lái)指定字符所占區(qū)域的大小,通常用字符高度來(lái)描述。字體尺寸可以取毫米或英寸作為單位,但為了直觀起見(jiàn),也常常采用一述。字體尺寸可以取毫米或英寸作為單位,但為了直觀起見(jiàn),也常常采用一種稱為種稱為“點(diǎn)點(diǎn)”的單位,一點(diǎn)約折合為的單位,一點(diǎn)約折合為1/72英寸。對(duì)于漢字,還常用英寸。對(duì)于漢字,還常用“號(hào)號(hào)”數(shù)來(lái)表示字體尺寸,初號(hào)字最大,以下依次為小初、一號(hào)、小一、二號(hào)、小數(shù)來(lái)表示字體尺寸,初號(hào)字最大

35、,以下依次為小初、一號(hào)、小一、二號(hào)、小二、二、,如此類推,字號(hào)越大,字體尺寸越小。,如此類推,字號(hào)越大,字體尺寸越小。6.4 6.4 字體與文字處理字體與文字處理在在VC+.NET中,創(chuàng)建字體需要調(diào)用中,創(chuàng)建字體需要調(diào)用CFont類的成員函數(shù)類的成員函數(shù)CreateFontIndirect或或CreatePointFont Indirect來(lái)初始化。來(lái)初始化。創(chuàng)建字體函數(shù)創(chuàng)建字體函數(shù)CFont類的字體創(chuàng)建成員函數(shù)的原型為:類的字體創(chuàng)建成員函數(shù)的原型為:BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientat

36、ion, int nWeight, BYTE bItalic, BYTE bUnderline,BYTE cStrikeOut,BYTE nCharSet, BYTE nOutPrecision,BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFaceName );BOOL CreateFontIndirect(const LOGFONT* lpLogFont );BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC =

37、 NULL );BOOL CreatePointFontIndirect( const LOGFONT* lpLogFont, CDC* pDC = NULL );其中其中CreatePointFont提供了創(chuàng)建字體的一種簡(jiǎn)單方法:提供了創(chuàng)建字體的一種簡(jiǎn)單方法:nPointSize為字體的大小,以為字體的大小,以0.1點(diǎn)(像素點(diǎn)(像素/墨點(diǎn)墨點(diǎn)/磅數(shù))為單位磅數(shù))為單位lpszFaceName為字體名稱字符串的指針為字體名稱字符串的指針若若pDC非空,則系統(tǒng)會(huì)將設(shè)備單位點(diǎn)自動(dòng)轉(zhuǎn)換為非空,則系統(tǒng)會(huì)將設(shè)備單位點(diǎn)自動(dòng)轉(zhuǎn)換為pDC中的映射模式所指定的邏輯單中的映射模式所指定的邏輯單位。位。6.4 6.

38、4 字體與文字處理字體與文字處理文本輸出函數(shù)文本輸出函數(shù)文本的最終輸出不僅依賴于文本的字體,而且還跟文本的顏色、對(duì)齊方式等文本的最終輸出不僅依賴于文本的字體,而且還跟文本的顏色、對(duì)齊方式等有很大關(guān)系。有很大關(guān)系。CDC類提供了四個(gè)輸出文本的成員函數(shù):類提供了四個(gè)輸出文本的成員函數(shù):TextOut、ExtTextOut、DrawText和和TabbedTextOut。virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );BOOL TextOut( int x, int y, const CString&

39、str );virtual CSize TabbedTextOut( int x, int y, LPCTSTR lpszString,int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin );CSize TabbedTextOut( int x, int y, const CString& str, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin );virtual int DrawText( LPCTSTR lpszS

40、tring, int nCount, LPRECT lpRect, UINT nFormat );int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );6.4 6.4 字體與文字處理字體與文字處理1、設(shè)置文本的背景色、設(shè)置文本的背景色缺省時(shí),在繪制圖形或者輸出文本時(shí),背景顏色是白色。可以使用缺省時(shí),在繪制圖形或者輸出文本時(shí),背景顏色是白色。可以使用CDC的成員函數(shù)的成員函數(shù)SetBkColor函數(shù)來(lái)設(shè)置新的背景顏色,函數(shù)原型為:函數(shù)來(lái)設(shè)置新的背景顏色,函數(shù)原型為:virtual COLORREF SetBkCol

41、or(COLORREF crcolor);2、控制文本的背景色、控制文本的背景色 背景模式可用函數(shù)背景模式可用函數(shù)SetBkMode來(lái)設(shè)置,它設(shè)置當(dāng)前的背景模式并返回原來(lái)的背景來(lái)設(shè)置,它設(shè)置當(dāng)前的背景模式并返回原來(lái)的背景模式,該函數(shù)的原型為:模式,該函數(shù)的原型為: int SetBkMode(int nBkMode); 參數(shù)參數(shù)nkbmode指定背景模式,其值可以是指定背景模式,其值可以是OPAQUE或者或者TRANSPARENT,如果值為如果值為OPAQUE,則顯示時(shí)背景都改變?yōu)楫?dāng)前背景顏色。如果值為,則顯示時(shí)背景都改變?yōu)楫?dāng)前背景顏色。如果值為TRANSPARENT,則不改變背景顏色,此時(shí),任何,則不改變背景顏色,此時(shí),任何SetBkColor函數(shù)調(diào)用都無(wú)函數(shù)調(diào)用都無(wú)效,缺省的背景模式為效,缺省的背景模式為OPAQUE。 3、設(shè)置文本的排列方式、設(shè)置文本的排列方式 在文本顯示時(shí)遇到的另一個(gè)問(wèn)題是文本的排列方式,它控制文本和給定點(diǎn)的相對(duì)在文本顯示時(shí)遇到的另一個(gè)問(wèn)題是文本的排列方式,它控制文本和給定點(diǎn)的相對(duì)位置。在一個(gè)圖形中加字符說(shuō)明時(shí),常常知道一個(gè)字符串的某一個(gè)邊界,如左邊位置。在一個(gè)圖形中加字符說(shuō)明時(shí),常常知道一個(gè)字符串的某一個(gè)邊界,如左邊界不應(yīng)超過(guò)某個(gè)位置,或右邊界不應(yīng)超過(guò)某個(gè)位置,或顯示的幾

溫馨提示

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

評(píng)論

0/150

提交評(píng)論