資源描述:
《windows的圖形設(shè)備接口及windows繪圖》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第3講Windows的圖形設(shè)備接口及windows繪圖Windows圖形設(shè)備接口(GDI)是為與設(shè)備無關(guān)的圖形設(shè)計的。所謂設(shè)備的無關(guān)性,就是操作系統(tǒng)屏蔽了硬件設(shè)備的差異,因而設(shè)備無關(guān)性能使用戶編程時無需考慮特殊的硬件設(shè)置一、圖形設(shè)備按口(GDI)GDI負責(zé)系統(tǒng)與用戶或繪圖程序之間的信息交換,并控制在輸出設(shè)備上顯示圖形或文字,是Windows系統(tǒng)的重要組成部分windows支持與設(shè)備無關(guān)的圖形利用GDI和windows設(shè)備驅(qū)動程序開發(fā)人員只要建立與輸出設(shè)備的關(guān)聯(lián),讓系統(tǒng)加載相應(yīng)的設(shè)備驅(qū)動程序即可11.GDI的一些基本概念設(shè)備描述表即為設(shè)備環(huán)境的屬性的集合應(yīng)用程序與輸出設(shè)備之間的橋梁Wi
2、n系統(tǒng)外設(shè)直接訪問不允許統(tǒng)一的設(shè)備環(huán)境(DC)提供使應(yīng)用程序與設(shè)備相連用戶為確保圖形輸出的設(shè)備無關(guān)性2應(yīng)用程序設(shè)備描述表及其屬性通過設(shè)備描述表的句柄來間接地存取應(yīng)用程序每一次圖形操作均參照設(shè)備描述表中的屬性執(zhí)行32.圖形刷新圖形刷新是繪圖過程中必須考慮的重要問題刷新請求對刷新請求的響應(yīng)刷新方法包括(1)刷新請求應(yīng)用程序在窗口中繪制了一個橢圓,顏色列表框覆蓋了橢圓的一部分關(guān)閉顏色選框后,應(yīng)用程序需要恢復(fù)被覆蓋部分的顏色和形狀窗口大小的調(diào)整窗口移動被覆蓋后的恢復(fù)4(2)系統(tǒng)對刷新請求的響應(yīng)當用戶區(qū)的內(nèi)容需要刷新時,系統(tǒng)向應(yīng)用程序消息隊列發(fā)送WM_PAINT消息,系統(tǒng)在應(yīng)用程序的消息隊列中
3、加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理三種刷新窗口移動后的刷新被覆蓋區(qū)域的刷新對象穿越后的刷新(系統(tǒng)自動完成)用戶區(qū)移動或顯示用戶窗口大小改變程序通過滾動條滾動窗口窗口被另一個窗口覆蓋的恢復(fù)如下拉式菜單關(guān)閉等光標穿過用戶區(qū)圖標拖過用戶區(qū)5窗口被另一個窗口覆蓋的區(qū)域稱為無效區(qū)域。Windows系統(tǒng)為每個窗口建立了一個PAINTSTRUCT結(jié)構(gòu),該結(jié)構(gòu)中包含了包圍無效區(qū)域的一個最小矩形的結(jié)構(gòu)RECT,應(yīng)用程序可以根據(jù)這個無效矩形執(zhí)行刷新操作。typedefstructtagPAINTSTRUCT{HDChdc;//設(shè)備環(huán)境句柄BOOLfErase;//一般取真值,表示擦除無效矩形的背景R
4、ECTrcPaint;//無效矩形標識BOOLfRestore;//系統(tǒng)保留BOOLfIncUpdate;//系統(tǒng)保留BYTErgbReserved[32];//系統(tǒng)保留}PAINTSTRUCT;rcPaint為標準的RECT數(shù)據(jù)結(jié)構(gòu),其作用是標識無效矩形,它包含了無效矩形的左上角和右下角的坐標6常用的windows應(yīng)用程序刷新窗口的方法保存副本。刷新時將副本拷貝到相應(yīng)的窗口中記錄事件。刷新時重新執(zhí)行這個曾經(jīng)發(fā)生的事件重新繪制。將圖形繪制處理程序放在消息WM_PAINT響應(yīng)模塊中,刷新時重繪圖形(3)有效的刷新方法73.獲取設(shè)備環(huán)境的方法獲取設(shè)備環(huán)境是應(yīng)用程序輸出圖形的先決條件,常用
5、的兩種方法是調(diào)用函數(shù)BeginPaint或GetDC(1)調(diào)用BeginPaint函數(shù)應(yīng)用程序響應(yīng)WM_PAINT消息進行圖形刷新時,主要通過調(diào)用BeginPaint函數(shù)獲取設(shè)備環(huán)境hdc=BeginPaint(hwnd,&ps);//ps為PAINTSTRUCT類型結(jié)構(gòu)定義方式為:PAINTSTRUCTps;系統(tǒng)獲取設(shè)備環(huán)境的同時填寫ps結(jié)構(gòu),以標識無效矩形區(qū)由BeginPaint函數(shù)獲取的設(shè)備環(huán)境要用EndPaint函數(shù)釋放BOOLEndPaint(HWNDhwnd,PAINTSTRUCT&ps)8(2)調(diào)用GetDC函數(shù)如果繪圖工作并非由WM_PAINT消息驅(qū)動,則調(diào)用GetD
6、C函數(shù)獲取設(shè)備環(huán)境。hdc=GetDC(hwnd);由GetDC函數(shù)獲取的設(shè)備環(huán)境必須用ReleaseDC函數(shù)釋放voidReleaseDC(HWNDhwnd);94.映像模式映像模式定義了將邏輯單位轉(zhuǎn)化為設(shè)備的度量單位以及設(shè)備的x方向和y方向,程序員可在一個統(tǒng)一的邏輯坐標系中操作而不必考慮輸出設(shè)備的坐標系情況窗口:對應(yīng)邏輯坐標系上程序員設(shè)定的區(qū)域視口:對應(yīng)實際輸出設(shè)備上程序員設(shè)定的區(qū)域窗口和視口如何映射?10缺省的映射模式將窗口中的對稱圖形映射到視口時仍為對稱圖形按照窗口和視口的坐標比例進行映射坐標系統(tǒng)邏輯坐標系統(tǒng)設(shè)備坐標系統(tǒng)屏幕坐標系統(tǒng)窗口坐標系統(tǒng)用戶區(qū)坐標系統(tǒng)11應(yīng)用程序可獲取
7、設(shè)備環(huán)境的當前映像模式,并根據(jù)需要設(shè)置映像模式。相關(guān)函數(shù)設(shè)置設(shè)備環(huán)境的映像模式SetMapMode(hdc,nMapMode);nMapMode為映像模式的整型標識符獲取當前設(shè)備環(huán)境的映像模式nMapMode=GetMapMode(hdc);12窗口區(qū)域的定義由SetWindowExtEx函數(shù)完成,其函數(shù)原型形為:BOOLSetWindowExtEx(HDChdc,intnHeight,nWidth,//以邏輯單位表示的窗口區(qū)域高寬度LPSIZElpSiz