資源描述:
《Windows繪圖及文本輸出》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、11Windows繪圖及文本輸出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ù)獲取指定窗口的客戶(hù)區(qū)域或整個(gè)屏
2、幕的顯示設(shè)備描述表的句柄,以便可以在GDI函數(shù)中使用該句柄來(lái)在顯示設(shè)備中繪圖。函數(shù)原型為:HDCGetDC(HWNDhWnd);(2)ReleaseDC函數(shù)ReleaseDC函數(shù)用來(lái)釋放設(shè)備描述表句柄,其函數(shù)原型為:intReleaseDC(HWNDhWnd,HDChDC);(3)BeginPaint函數(shù)BeginPaint函數(shù)為在指定窗口中畫(huà)圖作準(zhǔn)備工作,并且把與畫(huà)圖有關(guān)的信息填寫(xiě)到PAINTSTRUCT結(jié)構(gòu)中,函數(shù)原型為:HDCBeginPaint(HWNDhwnd,LPPAINTSTRUCTlp
3、Paint);其中l(wèi)pPaint是指向PAINTSTRUCT結(jié)構(gòu)的指針。結(jié)構(gòu)PAINTSTRUCT的原型如下:typedefstructtagPAINTSTRUCT{HANDLEhDC;??????//設(shè)備描述表句柄BOOLrErase;?????//確定背景是否已被重畫(huà)RECTrePaint;????//給出無(wú)效矩形的邊界BOOLfRestore;???//內(nèi)部使用的保留字段BOOLfIncUpdate;?//保留字段BYTErgbReserved;//保留字段}PAINTSTRUCT;(4)End
4、Paint函數(shù)EndPaint函數(shù)通知Windows所有輸出操作均已處理完畢,并釋放顯示緩沖區(qū)。其函數(shù)原型為:voidEndPaint(HWNDhwnd,LPPAINTSTRUCTlpPaint);2.圖形刷新(1)顯示緩沖區(qū)顯示緩沖區(qū)定義與窗口用戶(hù)區(qū)有關(guān)的內(nèi)容,包括輸出設(shè)備、當(dāng)前繪圖工具、顏色,以及其它一些GDI輸出函數(shù)產(chǎn)生輸出所需的信息。在窗口中繪圖,需要使用窗口的句柄,根據(jù)窗口句柄,可以得到窗口用戶(hù)區(qū)的顯示緩沖區(qū)句柄,所有GDI輸出函數(shù)都需要一個(gè)顯示緩沖區(qū)句柄,沒(méi)有它就無(wú)法完成輸出。顯示緩沖區(qū)中
5、有缺省的畫(huà)筆、畫(huà)刷和缺省字模。每當(dāng)對(duì)窗口的操作可能影響用戶(hù)區(qū)內(nèi)容時(shí),Windows發(fā)送WM_PAINT消息給窗口函數(shù),通常用BeginPaint函數(shù)來(lái)響應(yīng)WM_PAINT消息。如果要在沒(méi)有WM_PAINT消息的時(shí)刻畫(huà)用戶(hù)區(qū),必須使用GetDC函數(shù)得到顯示緩沖區(qū)的句柄。顯示緩沖區(qū)是一種共享資源,一個(gè)應(yīng)用程序占有它之后,其它應(yīng)用程序就無(wú)法得到它。因此,應(yīng)用程序在利用顯示緩沖區(qū)畫(huà)完窗口內(nèi)容之后,就必須使用ReleaseDC函數(shù)釋放它。同理,要求用EndPaint函數(shù)釋放由BeginPaint函數(shù)獲得的顯示緩
6、沖區(qū)。(2)WM_PAINT消息要求Windows發(fā)送WM_PAINT的情況有:改變窗口大小,覆蓋用戶(hù)區(qū)的菜單或?qū)υ捒蜿P(guān)閉,使用UpdateWindow和ScrollWindow函數(shù)等。Windows并非WM_PAINT消息的唯一來(lái)源,使用InvalidateRect或InvalidateRgn函數(shù)也可以產(chǎn)生繪圖窗口的WM_PAINT消息。這兩個(gè)函數(shù)把用戶(hù)區(qū)全部或部分標(biāo)記成無(wú)效用戶(hù)區(qū)而要求重新顯示。(3)非WM_PAINT消息在處理非WM_PAINT消息時(shí),應(yīng)用程序獲取窗口用戶(hù)區(qū)設(shè)備描述表句柄使用Ge
7、tDC函數(shù),它常常用來(lái)對(duì)用戶(hù)的某些動(dòng)作提供反饋。3.映像模式(1)坐標(biāo)系統(tǒng)顯示緩沖區(qū)默認(rèn)的坐標(biāo)系統(tǒng)中用戶(hù)區(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,即默認(rèn)的坐標(biāo)系統(tǒng)。當(dāng)前設(shè)備描述表的映射方式可通過(guò)
8、調(diào)用GetMapMode函數(shù)得到。①SetMapMode函數(shù)intSetMapMode(HDChdc,intnMapMode);說(shuō)明:參數(shù)nMapMode是映射模式。映射共有8種映射模式,取值及含義如下:②GetMapMode函數(shù)DWORDGetMapMode(HDChDC)③SetViewPortOrg函數(shù)DWORDSetViewPortOrg(HDChDC,intx,inty)繪圖工具和顏色的設(shè)置與應(yīng)用1.畫(huà)筆的應(yīng)用Windows使用當(dāng)前在設(shè)備描述表