第11章 Windows繪圖及文本輸出_第1頁(yè)
第11章 Windows繪圖及文本輸出_第2頁(yè)
第11章 Windows繪圖及文本輸出_第3頁(yè)
第11章 Windows繪圖及文本輸出_第4頁(yè)
第11章 Windows繪圖及文本輸出_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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、11 Windows繪圖及文本輸出,Windows環(huán)境是基于圖形操作的,圖形設(shè)備接口(GDI)是一個(gè)在Windows應(yīng)用程序中執(zhí)行與設(shè)備無(wú)關(guān)的函數(shù)庫(kù)。這些函數(shù)在不同的輸出設(shè)備上產(chǎn)生圖形及文字輸出。 1. 設(shè)備描述表 設(shè)備描述表描述了所選定的繪圖工具、字體、字體顏色等在設(shè)備上繪制(或者說(shuō)是映射)的方式及設(shè)備上可使用的輸出區(qū)域等屬性。當(dāng)程序顯示文字或繪圖時(shí),首先必須獲得一個(gè)設(shè)備描述表句柄,完成輸出文字或繪圖之后,還必須及時(shí)釋放該句柄。以下是設(shè)備描述表常用函數(shù): (1) GetDC函數(shù) 該函數(shù)獲取指定窗口的客戶區(qū)域或整個(gè)屏幕的顯示設(shè)備描述表的句柄,以便可以在GDI函數(shù)中使用該句柄來(lái)在顯示設(shè)備中繪圖。

2、函數(shù)原型為: HDC GetDC(HWND hWnd); (2) ReleaseDC函數(shù) ReleaseDC函數(shù)用來(lái)釋放設(shè)備描述表句柄,其函數(shù)原型為: int ReleaseDC(HWND hWnd, HDC hDC);,(3) BeginPaint函數(shù) BeginPaint函數(shù)為在指定窗口中畫(huà)圖作準(zhǔn)備工作,并且把與畫(huà)圖有關(guān)的信息填寫(xiě)到PAINTSTRUCT結(jié)構(gòu)中,函數(shù)原型為: HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint); 其中l(wèi)pPaint是指向PAINTSTRUCT結(jié)構(gòu)的指針。結(jié)構(gòu)PAINTSTRUCT的原型如下: typedef st

3、ruct tagPAINTSTRUCT HANDLE hDC; /設(shè)備描述表句柄 BOOL rErase; /確定背景是否已被重畫(huà) RECT rePaint; /給出無(wú)效矩形的邊界 BOOL fRestore; /內(nèi)部使用的保留字段 BOOL fIncUpdate; /保留字段 BYTE rgbReserved; /保留字段 PAINTSTRUCT; (4) EndPaint函數(shù) EndPaint函數(shù)通知Windows所有輸出操作均已處理完畢,并釋放顯示緩沖區(qū)。其函數(shù)原型為: void EndPaint(HWND hwnd, LPPAINTSTRUCT lpPaint);,2. 圖形刷新 (1

4、)顯示緩沖區(qū) 顯示緩沖區(qū)定義與窗口用戶區(qū)有關(guān)的內(nèi)容,包括輸出設(shè)備、當(dāng)前繪圖工具、顏色,以及其它一些GDI輸出函數(shù)產(chǎn)生輸出所需的信息。在窗口中繪圖,需要使用窗口的句柄,根據(jù)窗口句柄,可以得到窗口用戶區(qū)的顯示緩沖區(qū)句柄,所有GDI輸出函數(shù)都需要一個(gè)顯示緩沖區(qū)句柄,沒(méi)有它就無(wú)法完成輸出。顯示緩沖區(qū)中有缺省的畫(huà)筆、畫(huà)刷和缺省字模。 每當(dāng)對(duì)窗口的操作可能影響用戶區(qū)內(nèi)容時(shí),Windows發(fā)送WM_PAINT消息給窗口函數(shù),通常用BeginPaint函數(shù)來(lái)響應(yīng)WM_PAINT消息。如果要在沒(méi)有WM_PAINT消息的時(shí)刻畫(huà)用戶區(qū),必須使用GetDC函數(shù)得到顯示緩沖區(qū)的句柄。顯示緩沖區(qū)是一種共享資源,一個(gè)應(yīng)用程

5、序占有它之后,其它應(yīng)用程序就無(wú)法得到它。因此,應(yīng)用程序在利用顯示緩沖區(qū)畫(huà)完窗口內(nèi)容之后,就必須使用ReleaseDC函數(shù)釋放它。同理,要求用EndPaint函數(shù)釋放由BeginPaint函數(shù)獲得的顯示緩沖區(qū)。,(2) WM_PAINT消息 要求Windows發(fā)送WM_PAINT的情況有:改變窗口大小,覆蓋用戶區(qū)的菜單或?qū)υ捒蜿P(guān)閉,使用UpdateWindow和ScrollWindow函數(shù)等。 Windows并非WM_PAINT消息的唯一來(lái)源,使用InvalidateRect或InvalidateRgn函數(shù)也可以產(chǎn)生繪圖窗口的WM_PAINT消息。這兩個(gè)函數(shù)把用戶區(qū)全部或部分標(biāo)記成無(wú)效用戶區(qū)而要

6、求重新顯示。 (3) 非WM_PAINT消息 在處理非WM_PAINT消息時(shí),應(yīng)用程序獲取窗口用戶區(qū)設(shè)備描述表句柄使用GetDC函數(shù),它常常用來(lái)對(duì)用戶的某些動(dòng)作提供反饋。,3. 映像模式 (1) 坐標(biāo)系統(tǒng) 顯示緩沖區(qū)默認(rèn)的坐標(biāo)系統(tǒng)中用戶區(qū)的左上角是原點(diǎn),即點(diǎn)(0,0)。向右的每個(gè)像素表示X軸方向的一個(gè)單位,向下的每個(gè)像素表示Y軸方向的一個(gè)單位。 (2) 映像模式的設(shè)置 通過(guò)修改映射模式和顯示原點(diǎn),可以改變坐標(biāo)系統(tǒng)。Windows應(yīng)用程序可通過(guò)調(diào)用SetMapMode函數(shù)來(lái)設(shè)定映射模式,通過(guò)調(diào)用SetViewPortOrg函數(shù),可以把坐標(biāo)系統(tǒng)原點(diǎn)移到任何位置。默認(rèn)的映射模式為MM_TEXT,即默

7、認(rèn)的坐標(biāo)系統(tǒng)。當(dāng)前設(shè)備描述表的映射方式可通過(guò)調(diào)用GetMapMode函數(shù)得到。 SetMapMode函數(shù) int SetMapMode(HDC hdc,int nMapMode); 說(shuō)明:參數(shù)nMapMode是映射模式。映射共有8種映射模式,取值及含義如下:, GetMapMode函數(shù) DWORD GetMapMode (HDC hDC) SetViewPortOrg函數(shù) DWORD SetViewPortOrg(HDC hDC,int x,int y),繪圖工具和顏色的設(shè)置與應(yīng)用,1. 畫(huà)筆的應(yīng)用 Windows使用當(dāng)前在設(shè)備描述表中已選擇的畫(huà)筆來(lái)畫(huà)線。程序中可以選擇Windows的預(yù)定義畫(huà)

8、筆,也可以選擇自定義的畫(huà)筆。 畫(huà)筆的操作包括創(chuàng)建畫(huà)筆、將畫(huà)筆選入設(shè)備描述表和刪除畫(huà)筆。 對(duì)于三種預(yù)定義畫(huà)筆,可使用GetStockObject函數(shù)來(lái)選擇其中的一種。 應(yīng)用程序也可根據(jù)實(shí)際需要?jiǎng)?chuàng)建一種自定義的邏輯畫(huà)筆。 (1) 函數(shù)CreatePen HPEN CreatePen(int fnPenStyle,int nWidth,COLORREF clrref); 說(shuō)明:clrref參數(shù)是一個(gè)COLORREF類型的顏色值,指定畫(huà)筆的顏色,可用宏指令RGB構(gòu)造這個(gè)值,如: clrref=RGB(byRed,byGreen,byBlue); (2) 函數(shù)CreatePenIndirect HPEN

9、 CreatePenIndirect(LOGPEN FAR* lpLogPen);,下面給出一段程序,說(shuō)明建立、選擇和釋放畫(huà)筆的一般方法,假定程序要用一支寬度為3的黑色作圖,則程序如下: HPEN hPen,hOldPen: hPen=CreatePen(PS_SOLD,3,RGB(0,0,0); /創(chuàng)建畫(huà)筆 hPen if(hPen) hOldPen=SelectObject(hDC,hPen); /將 hPen 選入設(shè)備描述表,同時(shí)返回原畫(huà)筆句柄 hOldPen /進(jìn)行繪圖操作 SelectObject(hDC,hOldPen); /恢復(fù)原畫(huà)筆 hOldPen DelectObject(h

10、Pen); /刪除hPen畫(huà)筆,釋放內(nèi)存空間,2. 畫(huà)刷的應(yīng)用 當(dāng)我們?cè)诶L制一些區(qū)域圖形時(shí),需要使用畫(huà)刷填充內(nèi)部區(qū)域。 畫(huà)刷的創(chuàng)建和應(yīng)用與畫(huà)筆很相似,操作畫(huà)刷也包括創(chuàng)建、選入設(shè)備描述表和刪除。 Windows系統(tǒng)中預(yù)定義的刷子有七種,應(yīng)用程序可以通過(guò)GetStockObject函數(shù)選用其中一個(gè)。 僅靠這七種刷子往往不能滿足要求,應(yīng)用程序可通過(guò)如下兩種函數(shù)創(chuàng)建自己的畫(huà)刷。 (1) 函數(shù)CreateHatchBrush HBRUSH CreateHatchBrush(int fnStyle,COLORREF clrref); (2) 函數(shù)CreateSolidBrush HBRUSH Create

11、SolidBrush(COLORREF clrref); 3. 常用繪圖函數(shù) GDI提供各種各樣的輸出操作,從畫(huà)線到寫(xiě)字應(yīng)有盡有。 (1) 畫(huà)點(diǎn)函數(shù)SetPixel (2) 畫(huà)線函數(shù)LineTo/LineToEx與移動(dòng)函數(shù)MoveTo/MoveToEx (3) 畫(huà)矩形函數(shù)Rectangle (4) 畫(huà)圓或橢圓函數(shù)Ellipse (5) 畫(huà)圓弧函數(shù)Arc (6) 畫(huà)扇形函數(shù)Pie,如圖所示,在窗口中顯示正弦曲線。 實(shí)例sin,文本的輸出方法與字體的設(shè)置 在Windows編程中,文本操作首先要獲得文本句柄。此外,應(yīng)用程序還要設(shè)置字體、字符大小、字符顏色等有關(guān)屬性,并將這些屬性選入設(shè)備環(huán)境。 1.

12、設(shè)置文本的設(shè)備環(huán)境 字體描述了所要顯示的文本的大小、類型和外形。在Windows中,字體一般又可以分成兩大類型:邏輯字體和物理字體。物理字體是為特殊設(shè)備設(shè)計(jì)的,因而是設(shè)備相關(guān)的。而邏輯字體定義的字符集是設(shè)備無(wú)關(guān)的。 (1) 選擇系統(tǒng)字體 常用的默認(rèn)字體為SYSTEM,Windows使用該字體作為系統(tǒng)界面字體。 一般需要執(zhí)行如下步驟: 定義字體句柄變量,形式如下: HFONT hF; /hF為字體的句柄 調(diào)用函數(shù)GetStockObject獲得系統(tǒng)字體句柄,它返回的是系統(tǒng)的默認(rèn)字體。 hF=GetStockObject( ); 調(diào)用函數(shù)SelectObject將字體選入設(shè)備環(huán)境。 SelectO

13、bject(hdc,hF);,(2) 自定義字體 可調(diào)用函數(shù)CreateFont或CreateFontIndirect創(chuàng)建自定義字體。 (3) 設(shè)置字體顏色和背景顏色 應(yīng)用程序通過(guò)調(diào)用函數(shù)SetTextColor設(shè)置字體顏色。函數(shù)原型為: SetTextColor(hdc,crColor); /crColor為設(shè)置的顏色 應(yīng)用程序還可以調(diào)用函數(shù)SetBkColor設(shè)置背景顏色。函數(shù)原型為: SetBkColor(hdc,crColor);,2. 文本的輸出 文本的輸出過(guò)程包括獲取字體信息、格式化文本、調(diào)用函數(shù)輸出文本等具體過(guò)程。 (1) 獲取字體信息 應(yīng)用程序在輸出文本之前必須獲取當(dāng)前使用字體的有關(guān)信息,使用函數(shù)GetTextMetrics可以獲取一個(gè)字體文本度量并將它放入一個(gè)類型為T(mén)EXTMETRIC的數(shù)據(jù)結(jié)構(gòu)中,然后即

溫馨提示

  • 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)論