




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第4 4章章 WindowsWindows的圖形設(shè)備接口及的圖形設(shè)備接口及WindowsWindows繪圖繪圖 Windows圖形設(shè)備接口圖形設(shè)備接口(GDI)是為與)是為與設(shè)備無(wú)設(shè)備無(wú)關(guān)關(guān)的圖形設(shè)計(jì)的。所謂設(shè)備的無(wú)關(guān)性,就是操的圖形設(shè)計(jì)的。所謂設(shè)備的無(wú)關(guān)性,就是操作系統(tǒng)屏蔽了硬件設(shè)備的差異,因而設(shè)備無(wú)關(guān)作系統(tǒng)屏蔽了硬件設(shè)備的差異,因而設(shè)備無(wú)關(guān)性能使用戶編程時(shí)無(wú)需考慮特殊的硬件設(shè)置。性能使用戶編程時(shí)無(wú)需考慮特殊的硬件設(shè)置。Windows支持與設(shè)備無(wú)關(guān)的圖形支持與設(shè)備無(wú)關(guān)的圖形利用利用GDI和和Windows設(shè)設(shè)備驅(qū)動(dòng)程序備驅(qū)動(dòng)程序開發(fā)人員只要建開發(fā)人員只要建立與輸出設(shè)備的立與輸出設(shè)備的關(guān)聯(lián),
2、讓系統(tǒng)加關(guān)聯(lián),讓系統(tǒng)加載相應(yīng)的設(shè)備驅(qū)載相應(yīng)的設(shè)備驅(qū)動(dòng)程序即可動(dòng)程序即可一、圖形設(shè)備接口一、圖形設(shè)備接口(GDI)GDI負(fù)責(zé)系統(tǒng)與用戶或繪圖程序之間的信息交換,并控負(fù)責(zé)系統(tǒng)與用戶或繪圖程序之間的信息交換,并控制在輸出設(shè)備上制在輸出設(shè)備上顯示圖形顯示圖形或或文字文字, 是是Windows系統(tǒng)的系統(tǒng)的重要組成部分。重要組成部分。 設(shè)備描述表設(shè)備描述表即為即為設(shè)備環(huán)境設(shè)備環(huán)境的屬性的集合。的屬性的集合。應(yīng)用程序應(yīng)用程序與與輸出設(shè)備輸出設(shè)備之之間的橋梁間的橋梁Win系統(tǒng)系統(tǒng)外設(shè)外設(shè)直接訪問直接訪問不允許不允許統(tǒng)一的設(shè)備環(huán)境統(tǒng)一的設(shè)備環(huán)境(DC)提供提供使應(yīng)用程序與設(shè)備相連使應(yīng)用程序與設(shè)備相連用用戶戶為確
3、保圖形輸出為確保圖形輸出的設(shè)備無(wú)關(guān)性的設(shè)備無(wú)關(guān)性1. GDI的一些基本概念的一些基本概念應(yīng)應(yīng)用用程程序序設(shè)備描設(shè)備描述表及述表及其屬性其屬性通過設(shè)備描述表的句柄來(lái)間接地存取通過設(shè)備描述表的句柄來(lái)間接地存取應(yīng)用程序每一次圖形應(yīng)用程序每一次圖形操作均參照設(shè)備描述操作均參照設(shè)備描述表中的屬性執(zhí)行表中的屬性執(zhí)行圖形刷新圖形刷新是繪圖過程中必須考慮的重要問題是繪圖過程中必須考慮的重要問題刷新請(qǐng)求刷新請(qǐng)求對(duì)刷新請(qǐng)求的響應(yīng)對(duì)刷新請(qǐng)求的響應(yīng)刷新方法刷新方法包括(1) 刷新請(qǐng)求刷新請(qǐng)求 應(yīng)用程序在窗口中應(yīng)用程序在窗口中繪制了一個(gè)橢圓,繪制了一個(gè)橢圓,顏色列表框覆蓋了顏色列表框覆蓋了橢圓的一部分橢圓的一部分關(guān)閉顏
4、色選框后,關(guān)閉顏色選框后,應(yīng)用程序需要恢應(yīng)用程序需要恢復(fù)被覆蓋部分的復(fù)被覆蓋部分的顏色和形狀顏色和形狀窗口大小的調(diào)整窗口大小的調(diào)整窗口移動(dòng)窗口移動(dòng)被覆蓋后的恢復(fù)被覆蓋后的恢復(fù)2.圖形刷新圖形刷新(2) 系統(tǒng)對(duì)刷新請(qǐng)求的響應(yīng)系統(tǒng)對(duì)刷新請(qǐng)求的響應(yīng) 當(dāng)用戶區(qū)的內(nèi)容需要刷新時(shí),系統(tǒng)向應(yīng)用程序消當(dāng)用戶區(qū)的內(nèi)容需要刷新時(shí),系統(tǒng)向應(yīng)用程序消息隊(duì)列發(fā)送息隊(duì)列發(fā)送WM_PAINT消息,系統(tǒng)在應(yīng)用程序的消消息,系統(tǒng)在應(yīng)用程序的消息隊(duì)列中加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理息隊(duì)列中加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理三種三種刷新刷新窗口移動(dòng)后的刷新窗口移動(dòng)后的刷新被覆蓋區(qū)域的刷新被覆蓋區(qū)域的刷新對(duì)象穿越后的刷新
5、對(duì)象穿越后的刷新(系統(tǒng)自動(dòng)完成)用戶區(qū)移動(dòng)或顯示用戶區(qū)移動(dòng)或顯示用戶窗口大小改變用戶窗口大小改變程序通過滾動(dòng)條滾動(dòng)窗口程序通過滾動(dòng)條滾動(dòng)窗口窗口被另一個(gè)窗口覆蓋的窗口被另一個(gè)窗口覆蓋的恢復(fù)如下拉式菜單關(guān)閉等恢復(fù)如下拉式菜單關(guān)閉等光標(biāo)穿過用戶區(qū)光標(biāo)穿過用戶區(qū)圖標(biāo)拖過用戶區(qū)圖標(biāo)拖過用戶區(qū)窗口被另一個(gè)窗口覆蓋的區(qū)域稱為窗口被另一個(gè)窗口覆蓋的區(qū)域稱為無(wú)效區(qū)域無(wú)效區(qū)域。 Windows系統(tǒng)為每個(gè)窗口建立了一個(gè)系統(tǒng)為每個(gè)窗口建立了一個(gè)PAINTSTRUCT結(jié)構(gòu)結(jié)構(gòu),該該結(jié)構(gòu)中包含了包圍結(jié)構(gòu)中包含了包圍無(wú)效區(qū)域無(wú)效區(qū)域的一個(gè)最小矩形的結(jié)構(gòu)的一個(gè)最小矩形的結(jié)構(gòu)RECT,應(yīng)用應(yīng)用程序可以根據(jù)這個(gè)無(wú)效矩形執(zhí)行刷新
6、操作。程序可以根據(jù)這個(gè)無(wú)效矩形執(zhí)行刷新操作。 Typedef struct tagPAINTSTRUCTTypedef struct tagPAINTSTRUCT HDC hdc; HDC hdc;/設(shè)備環(huán)境句柄設(shè)備環(huán)境句柄 BOOL fErase;BOOL fErase;/一般取真值,表示擦除無(wú)效矩形的一般取真值,表示擦除無(wú)效矩形的背景背景 RECT RECT rcPaintrcPaint; ;/無(wú)效矩形標(biāo)識(shí)無(wú)效矩形標(biāo)識(shí) BOOL fRestore;BOOL fRestore;/系統(tǒng)保留系統(tǒng)保留 BOOL fIncUpdate;BOOL fIncUpdate;/系統(tǒng)保留系統(tǒng)保留 BYTE r
7、gbReserved16BYTE rgbReserved16;/系統(tǒng)保留系統(tǒng)保留 PAINTSTRUCT;PAINTSTRUCT;rcPaint 為標(biāo)準(zhǔn)的為標(biāo)準(zhǔn)的RECT數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),其作用是標(biāo)識(shí)無(wú)效矩形,它包含了其作用是標(biāo)識(shí)無(wú)效矩形,它包含了無(wú)效矩形的左上角和右下角的坐標(biāo)無(wú)效矩形的左上角和右下角的坐標(biāo)常用的常用的Windows應(yīng)用應(yīng)用程序刷新窗口程序刷新窗口的方法的方法保存副本。刷保存副本。刷新時(shí)將副本拷新時(shí)將副本拷貝到相應(yīng)的窗貝到相應(yīng)的窗口中口中記錄事件。刷新記錄事件。刷新時(shí)重新執(zhí)行這個(gè)時(shí)重新執(zhí)行這個(gè)曾經(jīng)發(fā)生的事件曾經(jīng)發(fā)生的事件重新繪制。將圖形重新繪制。將圖形繪制處理程序放在繪制處理
8、程序放在消息消息WM_PAINT響應(yīng)模塊中,刷新響應(yīng)模塊中,刷新時(shí)重繪圖形時(shí)重繪圖形(3) 有效的刷新方法有效的刷新方法獲取設(shè)備環(huán)境是應(yīng)用程序輸出圖形的先決條件,常用的兩種方法獲取設(shè)備環(huán)境是應(yīng)用程序輸出圖形的先決條件,常用的兩種方法是調(diào)用函數(shù)是調(diào)用函數(shù)BeginPaint或或GetDC(1) 調(diào)用調(diào)用BeginPaint函數(shù)函數(shù) 應(yīng)用程序響應(yīng)應(yīng)用程序響應(yīng)WM_PAINT消息進(jìn)行圖形刷新時(shí),主要通過消息進(jìn)行圖形刷新時(shí),主要通過調(diào)用調(diào)用BeginPaint函數(shù)獲取設(shè)備環(huán)境函數(shù)獲取設(shè)備環(huán)境 hdc=BeginPaint(hwnd,&hdc=BeginPaint(hwnd,&psps)
9、 ); /psps為為PAINTSTRUCTPAINTSTRUCT類型結(jié)構(gòu)類型結(jié)構(gòu)定義方式為:定義方式為:PAINTSTRUCT PAINTSTRUCT ps;ps; 系統(tǒng)獲取設(shè)備環(huán)境的系統(tǒng)獲取設(shè)備環(huán)境的同時(shí)填寫同時(shí)填寫ps結(jié)構(gòu),以結(jié)構(gòu),以標(biāo)識(shí)無(wú)效矩形區(qū)標(biāo)識(shí)無(wú)效矩形區(qū)由由BeginPaint函數(shù)獲取的設(shè)備環(huán)境要用函數(shù)獲取的設(shè)備環(huán)境要用EndPaint函數(shù)釋放函數(shù)釋放void EndPaint(HWND hwnd, PAINTSTRUCT &ps)3. 獲取設(shè)備環(huán)境的方法獲取設(shè)備環(huán)境的方法(2) 調(diào)用調(diào)用GetDC函數(shù)函數(shù) 如果繪圖工作并非由如果繪圖工作并非由WM_PAINT消息驅(qū)動(dòng),則
10、調(diào)用消息驅(qū)動(dòng),則調(diào)用GetDC函數(shù)獲取設(shè)備環(huán)境。函數(shù)獲取設(shè)備環(huán)境。hdc=GetDC(hwnd);hdc=GetDC(hwnd); 由由GetDC函數(shù)獲取的設(shè)備環(huán)境必須用函數(shù)獲取的設(shè)備環(huán)境必須用ReleaseDC函數(shù)釋放函數(shù)釋放 void ReleaseDC(HWND hwnd); BeginPaint 與與 GetDC 的的區(qū)區(qū)別別項(xiàng)項(xiàng)目目 函函數(shù)數(shù)BeginPaint 函函數(shù)數(shù)GetDc 函函數(shù)數(shù)使使用用環(huán)環(huán)境境只只 用用 于于 圖圖 形形 刷刷 新新 時(shí)時(shí) 獲獲取取設(shè)設(shè)備備環(huán)環(huán)境境使使用用較較為為廣廣泛泛操操作作區(qū)區(qū)域域使使用用 BeginPaint 函函數(shù)數(shù)獲獲取取設(shè)設(shè)備備環(huán)環(huán)境境后后
11、,操操作作區(qū)區(qū)域域?yàn)闉闊o(wú)無(wú)效效區(qū)區(qū)域域使使用用 GetDC 函函數(shù)數(shù)獲獲取取設(shè)設(shè)備備環(huán)環(huán)境境后后,操操作作區(qū)區(qū)域域?yàn)闉檎麄€(gè)個(gè)用用戶戶區(qū)區(qū)釋釋 放放 設(shè)設(shè) 備備 環(huán)環(huán)境境所所用用函函數(shù)數(shù)由由 EndPaint 函函數(shù)數(shù)釋釋放放由由 ReleaseDC 函函數(shù)數(shù)釋釋放放映像模式定義了將邏輯單位轉(zhuǎn)化為設(shè)備的度量單位以及映像模式定義了將邏輯單位轉(zhuǎn)化為設(shè)備的度量單位以及設(shè)備的設(shè)備的x方向和方向和y方向,程序員可在一個(gè)統(tǒng)一的邏輯坐標(biāo)系中操方向,程序員可在一個(gè)統(tǒng)一的邏輯坐標(biāo)系中操作而不必考慮輸出設(shè)備的坐標(biāo)系情況。作而不必考慮輸出設(shè)備的坐標(biāo)系情況。窗口窗口:對(duì)應(yīng)邏輯坐標(biāo)系上程序員設(shè)定的區(qū)域:對(duì)應(yīng)邏輯坐標(biāo)系上
12、程序員設(shè)定的區(qū)域視口視口:對(duì)應(yīng)實(shí)際輸出設(shè)備上程序員設(shè)定的區(qū)域:對(duì)應(yīng)實(shí)際輸出設(shè)備上程序員設(shè)定的區(qū)域窗口和視口窗口和視口如何映射?如何映射?4. 映像模式映像模式映映像像模模式式將將一一個(gè)個(gè)邏邏輯輯單單位位映映射射為為坐坐標(biāo)標(biāo)系系設(shè)設(shè)定定MM_ANISOTROPIC系系統(tǒng)統(tǒng)確確定定OptionalMM_HIENGLISH0.001英英寸寸Y 上上,X 右右MM_HIMETRIC0.01毫毫米米Y 上上,X 右右MM_ISOTROPIC系系統(tǒng)統(tǒng)確確定定Optional,但但 x軸軸和和 y 軸軸的的單單位位此此例例為為 1: 1MM_LOENGLISH0.01英英寸寸Y 上上,X 右右MM_LOME
13、TRIC0.1毫毫米米Y 上上,X 右右MM_TEXT一一個(gè)個(gè)像像素素Y 下下,X 右右MM_TWIPS1/1440 英英寸寸Y 上上,X 右右默認(rèn)的映射模式默認(rèn)的映射模式將窗口中的對(duì)稱將窗口中的對(duì)稱圖形映射到視口圖形映射到視口時(shí)仍為對(duì)稱圖形時(shí)仍為對(duì)稱圖形按照窗口和視口的按照窗口和視口的坐標(biāo)比例進(jìn)行映射坐標(biāo)比例進(jìn)行映射坐標(biāo)坐標(biāo)系統(tǒng)系統(tǒng)邏輯坐標(biāo)系統(tǒng)邏輯坐標(biāo)系統(tǒng)設(shè)備坐標(biāo)系統(tǒng)設(shè)備坐標(biāo)系統(tǒng)屏幕坐標(biāo)系統(tǒng)屏幕坐標(biāo)系統(tǒng)窗口坐標(biāo)系統(tǒng)窗口坐標(biāo)系統(tǒng)用戶區(qū)坐標(biāo)系統(tǒng)用戶區(qū)坐標(biāo)系統(tǒng) 應(yīng)用程序可獲取設(shè)備環(huán)境的當(dāng)前映像模式,并根據(jù)需要設(shè)應(yīng)用程序可獲取設(shè)備環(huán)境的當(dāng)前映像模式,并根據(jù)需要設(shè)置映像模式。置映像模式。相關(guān)相關(guān)函數(shù)函
14、數(shù)設(shè)置設(shè)備環(huán)境的映像模式設(shè)置設(shè)備環(huán)境的映像模式SetMapMode(hdc,nMapMode);SetMapMode(hdc,nMapMode); nMapMode為映像模式的整型標(biāo)識(shí)符為映像模式的整型標(biāo)識(shí)符獲取當(dāng)前設(shè)備環(huán)境的映像模式獲取當(dāng)前設(shè)備環(huán)境的映像模式nMapMode=GetMapMode(hdc);nMapMode=GetMapMode(hdc);窗口窗口區(qū)域的定義由區(qū)域的定義由SetWindowExtEx函數(shù)完成,其函數(shù)原型為函數(shù)完成,其函數(shù)原型為:BOOL SetWindowExtExBOOL SetWindowExtEx( HDC hdc,( HDC hdc, int nHei
15、ght,nWidth int nHeight,nWidth, /以以邏輯邏輯單位表示的窗口區(qū)域高寬單位表示的窗口區(qū)域高寬度度 LPSIZE lpSizeLPSIZE lpSize, /函數(shù)調(diào)用前窗口區(qū)域尺寸的函數(shù)調(diào)用前窗口區(qū)域尺寸的SIZESIZE結(jié)構(gòu)地結(jié)構(gòu)地址址););視口視口區(qū)域的定義由區(qū)域的定義由SetViewportExtEx函數(shù)完成,函數(shù)原型為:函數(shù)完成,函數(shù)原型為:BOOL Set ViewportExtEx ViewportExtEx( (HDC hdc,HDC hdc,int nHeight,nWidth,/int nHeight,nWidth,/以以物理物理設(shè)備單位表示的新視
16、口區(qū)域高寬設(shè)備單位表示的新視口區(qū)域高寬度度LPSIZE lpSizeLPSIZE lpSize);只有在映射模式為只有在映射模式為MM_ANISOTROPIC和和MM_ISOTROPIC時(shí)才有意義時(shí)才有意義視口視口的默認(rèn)原點(diǎn)和的默認(rèn)原點(diǎn)和窗口窗口的默認(rèn)原點(diǎn)均為(的默認(rèn)原點(diǎn)均為(0,0)??赏ㄟ^調(diào)用)??赏ㄟ^調(diào)用函數(shù)函數(shù)SetViewportOrgEx和和SetWindowOrgEx設(shè)定窗口與視口的設(shè)定窗口與視口的原點(diǎn)。原點(diǎn)。SetWindowOrgEx函數(shù)的原型為函數(shù)的原型為:BOOL SetWindowOrgExBOOL SetWindowOrgEx( (HDC hdc,HDC hdc,in
17、t X,Yint X,Y,/以以邏輯邏輯單位表示的窗口原點(diǎn)坐標(biāo)單位表示的窗口原點(diǎn)坐標(biāo)LPPOINT lpPointLPPOINT lpPoint/函數(shù)調(diào)用前原點(diǎn)坐標(biāo)的函數(shù)調(diào)用前原點(diǎn)坐標(biāo)的POINTPOINT結(jié)構(gòu)的地址結(jié)構(gòu)的地址););只有在映射模式為只有在映射模式為MM_ANISOTROPIC和和MM_ISOTROPIC時(shí)才有意義時(shí)才有意義(1) 畫筆的創(chuàng)建畫筆的創(chuàng)建 使用畫筆之前必須事先定義一個(gè)畫筆句柄。形式如下使用畫筆之前必須事先定義一個(gè)畫筆句柄。形式如下:HPEN hP;然后調(diào)用函數(shù)然后調(diào)用函數(shù)GetStockObject獲取獲取Windows系統(tǒng)定義的系統(tǒng)定義的四種四種畫筆畫筆。例如獲
18、取畫筆。例如獲取畫筆BLACK_PEN的形式如下的形式如下: hP=hP=GetStockObjectGetStockObject(BLACK_PENBLACK_PEN); ;WHITE_PENBLACK_PENDC_PENNULL_PEN畫筆的操作畫筆的操作創(chuàng)建畫筆創(chuàng)建畫筆將畫筆選入設(shè)備環(huán)境將畫筆選入設(shè)備環(huán)境刪除畫筆刪除畫筆二、繪圖工具與顏色二、繪圖工具與顏色1. 畫筆畫筆(2) 創(chuàng)建新畫筆,形式如下:創(chuàng)建新畫筆,形式如下:hP=CreatePenhP=CreatePen(int nPenStyle,int nPenStyle,/確定確定畫筆樣式畫筆樣式int nWidth,int nWid
19、th, /畫筆寬度畫筆寬度COLORREF rgbColor /COLORREF rgbColor /畫筆顏色畫筆顏色); ;創(chuàng)建畫筆后,必須調(diào)用創(chuàng)建畫筆后,必須調(diào)用SelectObject函數(shù)將其選入設(shè)備環(huán)境。函數(shù)將其選入設(shè)備環(huán)境。 SelectObject(hdc,hP);SelectObject(hdc,hP); /hP /hP為所創(chuàng)建或獲取的畫筆句柄為所創(chuàng)建或獲取的畫筆句柄不再使用當(dāng)前畫筆時(shí),需刪除畫筆,以免占內(nèi)存不再使用當(dāng)前畫筆時(shí),需刪除畫筆,以免占內(nèi)存 DeleteObject(hP);DeleteObject(hP);PS_DASH:虛線虛線PS_DASHDOT:點(diǎn)劃線點(diǎn)劃線PS
20、_DASHDOTDOT:雙點(diǎn)劃線雙點(diǎn)劃線PS_DOT:點(diǎn)線點(diǎn)線PS_INSIDEFRAME:實(shí)線實(shí)線PS_NULL:無(wú)無(wú)PS_SOLID:實(shí)線實(shí)線 畫刷的創(chuàng)建與應(yīng)用與畫筆很相似,畫刷的創(chuàng)建與應(yīng)用與畫筆很相似,操作畫刷也包括操作畫刷也包括創(chuàng)建創(chuàng)建、選選入設(shè)備環(huán)境入設(shè)備環(huán)境和和刪除刪除。(1) 畫刷的創(chuàng)建畫刷的創(chuàng)建 使用畫刷需事先定義一個(gè)畫刷句柄。形式如下:使用畫刷需事先定義一個(gè)畫刷句柄。形式如下: HBRUSH hBr; /hBr為畫刷句柄為畫刷句柄 然后調(diào)用函數(shù)然后調(diào)用函數(shù)GetStockObject獲取獲取Windows系統(tǒng)提供的系統(tǒng)提供的7種畫刷種畫刷 hBr=(HBRUSH)GetSto
21、ckObject(nBrushStylenBrushStyle)畫刷樣式)畫刷樣式BLACK_BRUSH黑色畫刷黑色畫刷DKGRAY_BRUSH 深灰色畫刷深灰色畫刷GRAY_BRUSH灰色畫刷灰色畫刷HOLLOW_BRUSH 虛畫刷虛畫刷LTGRAY_BRUSH亮灰色畫刷亮灰色畫刷NULL_BRUSH空畫刷空畫刷WHITE_BRUSH白色畫刷白色畫刷指定顏色畫指定顏色畫刷如何獲得?刷如何獲得?2. 畫刷畫刷可調(diào)用函數(shù)可調(diào)用函數(shù)CreateSolidBrush和和CreateHatchBrush創(chuàng)建畫刷創(chuàng)建畫刷,hBr=CreateSolidBrush(rgbColor);hBr=Create
22、SolidBrush(rgbColor); 創(chuàng)建具有創(chuàng)建具有指定顏色指定顏色的單色畫刷的單色畫刷創(chuàng)建指定陰創(chuàng)建指定陰影圖案和顏影圖案和顏色的畫刷色的畫刷(2) 選入設(shè)備環(huán)境選入設(shè)備環(huán)境 創(chuàng)建畫刷后,創(chuàng)建畫刷后, 通過通過SelectObject(hdc,hBr);將其選入設(shè)備環(huán)境將其選入設(shè)備環(huán)境(3) 刪除畫刷刪除畫刷 不使用畫刷時(shí),可用不使用畫刷時(shí),可用DeleteObject(hBr);刪除畫刷,釋放內(nèi)存刪除畫刷,釋放內(nèi)存hBr=CreateHatchBrushhBr=CreateHatchBrush(int (int nHctchStylenHctchStyle, , COLORREF
23、rgbColor COLORREF rgbColor););HS_BDIAGONAL 45度從左上到右下度從左上到右下HS_DIAGCROSS 45度叉線度叉線HS_FDIAGONAL 45度從左下到右上度從左下到右上HS_CROSS 垂直相交的陰影線垂直相交的陰影線HS_HORIZONTAL 水平陰影線水平陰影線HS_VERTICAL垂直陰影線垂直陰影線 Windows使用宏使用宏RGB定義繪圖的顏色,其形式為定義繪圖的顏色,其形式為: RGB(nRed, nGreen,nBlue) 紅色值紅色值藍(lán)色值藍(lán)色值綠色值綠色值RGB(255,0,0)RGB(0,255,0)RGB(0,0,255)
24、3. 顏色顏色(1)設(shè)置畫筆當(dāng)前位置的函數(shù))設(shè)置畫筆當(dāng)前位置的函數(shù)MoveToEx, BOOL MoveToEx(HDC hdc, int X,Y,/ X、Y分別為新位置的邏輯坐標(biāo)分別為新位置的邏輯坐標(biāo) LPPOINT lpPoint/存放原畫筆位置的存放原畫筆位置的POINT結(jié)構(gòu)地址結(jié)構(gòu)地址)(2) 從當(dāng)前位置向指定坐標(biāo)點(diǎn)畫直線的函數(shù)從當(dāng)前位置向指定坐標(biāo)點(diǎn)畫直線的函數(shù)LineToEx,BOOL BOOL LineToExLineToEx(HDC hdc,int X,int Y) /X(HDC hdc,int X,int Y) /X和和Y Y為線段的終點(diǎn)坐標(biāo)為線段的終點(diǎn)坐標(biāo)(3) 從當(dāng)前位置開
25、始,依次用線段連接從當(dāng)前位置開始,依次用線段連接lpPoints中指定的各點(diǎn)中指定的各點(diǎn)BOOL Polyline ( HDC hdc, LPPOINT lpPoints, /指向包含各點(diǎn)坐標(biāo)的指向包含各點(diǎn)坐標(biāo)的POINT結(jié)構(gòu)數(shù)組的指針結(jié)構(gòu)數(shù)組的指針 int nCount / nCount為為POINT數(shù)組中點(diǎn)的個(gè)數(shù)數(shù)組中點(diǎn)的個(gè)數(shù))三、三、 常用繪圖函數(shù)常用繪圖函數(shù)(4) 繪制橢圓弧線的函數(shù)繪制橢圓弧線的函數(shù)ArcBOOL Arc(HDC hdc,int X1,intY1,/邊框矩形左上角的邏輯坐標(biāo)邊框矩形左上角的邏輯坐標(biāo)int X2,int Y2,/邊框矩形右下角的邏輯坐標(biāo)邊框矩形右下角的邏
26、輯坐標(biāo)int X3,int Y3,/橢圓弧起始點(diǎn)坐標(biāo)橢圓弧起始點(diǎn)坐標(biāo)int X4,int Y4/橢圓弧終止點(diǎn)坐標(biāo)橢圓弧終止點(diǎn)坐標(biāo)) (x1,y1)(x2,y2)(x3,y3)(x4,y4)所畫曲線所畫曲線(5) 繪制餅圖,并用當(dāng)前畫刷進(jìn)行填充繪制餅圖,并用當(dāng)前畫刷進(jìn)行填充BOOL Pie(HDC hdc,int X1,intY1,/邊框矩形左上角的邏輯坐標(biāo)邊框矩形左上角的邏輯坐標(biāo)int X2,int Y2,/邊框矩形右下角的邏輯坐標(biāo)邊框矩形右下角的邏輯坐標(biāo)int X3,int Y3,/橢圓弧起始經(jīng)線的確定點(diǎn)坐標(biāo)橢圓弧起始經(jīng)線的確定點(diǎn)坐標(biāo)int X4,int Y4/橢圓弧終止經(jīng)線的確定點(diǎn)坐標(biāo)橢圓
27、弧終止經(jīng)線的確定點(diǎn)坐標(biāo))(x1,y1)(x2,y2)(x3,y3)(x4,y4)所填區(qū)域所填區(qū)域(6) 繪制矩形,并用當(dāng)前畫刷進(jìn)行填充繪制矩形,并用當(dāng)前畫刷進(jìn)行填充BOOL Rectangle(HDC hdc,int X1,int Y1,int X2,int Y2)(X1,Y1)和)和(X2,Y2)分別為矩形的左上角和分別為矩形的左上角和右下角的邏輯坐標(biāo)右下角的邏輯坐標(biāo)(7) 繪制圓角矩形,并用當(dāng)前畫刷填充繪制圓角矩形,并用當(dāng)前畫刷填充BOOL RoundRect (HDC hdc,int X1,int Y1,int X2,int Y2, int nHeight, int nWidth)圓角的
28、高度和寬圓角的高度和寬度度(8) 繪制橢圓,并用當(dāng)前畫刷填充繪制橢圓,并用當(dāng)前畫刷填充 BOOL Ellipse(HDC hdc,intX1,intY1,intX2,intY2)(9)繪制多邊形,并用當(dāng)前畫刷填充)繪制多邊形,并用當(dāng)前畫刷填充BOOL Polygon(HDC hdc,LPPOINT lpPoints,int nCount)包含各點(diǎn)坐標(biāo)的包含各點(diǎn)坐標(biāo)的POINT數(shù)組的地址數(shù)組的地址多邊形點(diǎn)的個(gè)數(shù)多邊形點(diǎn)的個(gè)數(shù)【例【例4-1】利用繪圖函數(shù)創(chuàng)建填充區(qū)。共有三個(gè)填充圖形,第一】利用繪圖函數(shù)創(chuàng)建填充區(qū)。共有三個(gè)填充圖形,第一個(gè)是用深灰色畫刷填充帶圓角的矩形,第二個(gè)是采用亮灰色畫刷個(gè)是用深
29、灰色畫刷填充帶圓角的矩形,第二個(gè)是采用亮灰色畫刷填充一個(gè)橢圓形圖,第三個(gè)是用虛畫刷填充餅形圖。填充一個(gè)橢圓形圖,第三個(gè)是用虛畫刷填充餅形圖。#include#include#includelong WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam););使用虛畫刷填充時(shí),看不出填充效果使用虛畫刷填充時(shí),看不出填充效果!四、四、 應(yīng)用實(shí)例應(yīng)用實(shí)例BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdS
30、how);HWND hWndMainint WINAPI WinMain/主函數(shù)主函數(shù)( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)MSG Message;if(!InitWindowsClass(hInstance)return FALSE;if(!InitWindows(hInstance,nCmdShow) return FALSE;while(GetMessage(&Message,0,0,0)/消息循環(huán)消息循環(huán) TranslateMessage(&Messag
31、e);DispatchMessage(&Message); return Message.wParam;long WINAPI long WINAPI WndProcWndProc(HWND hWnd,UINT iMessage,(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam) UINT wParam,LONG lParam) HDC hDC; /定義指向設(shè)備的句柄定義指向設(shè)備的句柄 HBRUSH hBrush; /定義指向畫刷的句柄定義指向畫刷的句柄 HPEN hPen;/定義指向畫筆的句柄定義指向畫筆的句柄 PAINTSTRUCT
32、 PtStr;/定義指向包含繪圖信息的結(jié)構(gòu)體變量定義指向包含繪圖信息的結(jié)構(gòu)體變量消息處理函數(shù)switch(iMessage) /處理消息處理消息case WM_PAINT: /處理繪圖消息處理繪圖消息 hDC=BeginPaint(hWnd,&PtStr); SetMapMode(hDC,MM_ANISOTROPIC); /設(shè)置映像模式設(shè)置映像模式 hPen=(HPEN)GetStockObject(BLACK_PEN); /黑色畫筆黑色畫筆 hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH); /畫刷畫刷 SelectObject(hDC,hBru
33、sh); /選擇畫刷選擇畫刷 SelectObject(hDC,hPen); /選擇畫筆選擇畫筆 RoundRect(hDC,50,120,100,200,15,15); /繪制圓角矩形繪制圓角矩形 hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH); /采用采用亮灰色畫刷亮灰色畫刷下面只改變下面只改變畫刷,不改畫刷,不改變筆變筆 SelectObject(hDC,hBrush); /選擇畫刷選擇畫刷 Ellipse(hDC,150,50,200,150); /繪制橢圓繪制橢圓 hBrush=(HBRUSH)GetStockObject(HOLLOW_BRU
34、SH); /虛畫刷虛畫刷 SelectObject(hDC,hBrush); /選擇畫刷選擇畫刷 Pie(hDC,250,50,300,100,250,50,300,50); /繪制餅形繪制餅形 EndPaint(hWnd,&PtStr); /結(jié)束繪圖結(jié)束繪圖 return 0;case WM_DESTROY:case WM_DESTROY: /結(jié)束應(yīng)用程序結(jié)束應(yīng)用程序PostQuitMessage(0); return 0;PostQuitMessage(0); return 0;default:default:/其他消息處理程序其他消息處理程序return(DefWindowPro
35、c(hWnd,iMessage,wParam,lParam) return(DefWindowProc(hWnd,iMessage,wParam,lParam) ; ; BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)/BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)/初始化窗口初始化窗口 HWND hWnd;HWND hWnd;hWnd=CreateWindow(WinFill, /hWnd=CreateWindow(WinFill, /生成窗口生成窗口 填充示例程序填充示例程序, WS_
36、OVERLAPPEDWINDOW, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, NULL, NULL, hInstance, hInstance, NULL); NULL); if(!hWnd)if(!hWnd)return FALSE;return FALSE; hWndMain=hWnd; hWndMain=hWnd; ShowWindow(hWnd,nCmdShow); ShowWindow(hWnd,nCmdShow);/
37、顯示窗口顯示窗口 UpdateWindow(hWnd);UpdateWindow(hWnd); return TRUE; return TRUE; BOOL InitWindowsClass(HINSTANCE hInstance)BOOL InitWindowsClass(HINSTANCE hInstance)/定義窗口類定義窗口類 WNDCLASS WndClass; WNDCLASS WndClass; WndClass.cbClsExtra=0; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.cbWndExtra=0;
38、WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH); WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hIcon=LoadIcon(NULL,END); WndClass.hIcon=LoadIcon(NULL,END); WndClass.hInstance
39、=hInstance; WndClass.hInstance=hInstance; WndClass.lpfnWndProc=WndProc; WndClass.lpfnWndProc=WndProc; WndClass.lpszClassName= WndClass.lpszClassName=WinFillWinFill; WndClass.lpszMenuName=NULL; WndClass.lpszMenuName=NULL; WndClass.style=CS_HREDRAW|CS_VREDRAW; WndClass.style=CS_HREDRAW|CS_VREDRAW; ret
40、urn RegisterClass(&WndClass); return RegisterClass(&WndClass); 例:例: 應(yīng)用畫筆和畫刷等工具繪制如圖所示的圖形。應(yīng)用畫筆和畫刷等工具繪制如圖所示的圖形。1 #include2 #include3 #include4 long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);5 BOOL InitWindowsClass(HINSTANCE hInstance);6 BOOL InitWindows(HINSTANCE hInstance
41、,int nCmdShow);7 HWND hWndMain;/主函數(shù)主函數(shù)8 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)9 MSG Message;10if(!InitWindowsClass(hInstance)return FALSE;11if(!InitWindows(hInstance,nCmdShow)return FALSE;12while(GetMessage(&Message,0,0,0)/消息循環(huán)消息循環(huán)13Translat
42、eMessage(&Message);14DispatchMessage(&Message); 15return Message.wParam;long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)1 HDC hDC; /定義設(shè)備環(huán)境句柄定義設(shè)備環(huán)境句柄2 HBRUSH hBrush; /定義畫刷的句柄定義畫刷的句柄3 HPEN hPen;/定義畫筆的句柄定義畫筆的句柄4 PAINTSTRUCT PtStr; /定義指向包含繪圖信息的結(jié)構(gòu)體變量定義指向包含繪圖信息的結(jié)構(gòu)體變量 /定義一個(gè)定義一個(gè)P
43、OINT數(shù)組,包括數(shù)組,包括6個(gè)點(diǎn)個(gè)點(diǎn) 5 POINT points6=100,212,70,227,70,250,130,250,130,227,100,212; 6 switch(iMessage) /處理消息處理消息 7 case WM_PAINT: /處理繪圖消息處理繪圖消息 8 hDC=BeginPaint(hWnd,&PtStr);9hPen=(HPEN)GetStockObject(NULL_PEN); /獲取系統(tǒng)定義的空畫筆獲取系統(tǒng)定義的空畫筆10SelectObject(hDC,hPen); /選擇畫筆選擇畫筆11hBrush=(HBRUSH)GetStockObje
44、ct(BLACK_BRUSH); /獲取系統(tǒng)定義的畫刷獲取系統(tǒng)定義的畫刷12SelectObject(hDC,hBrush); /選擇畫刷選擇畫刷13LineTo(hDC,50,50); /畫線畫線14DeleteObject(hPen); /刪除畫筆刪除畫筆15hPen=CreatePen(PS_SOLID,2,RGB(255,0,0); /創(chuàng)建畫筆創(chuàng)建畫筆16SelectObject(hDC,hPen); /選擇畫筆選擇畫筆/畫一個(gè)三角形畫一個(gè)三角形17LineTo(hDC,150,50);18LineTo(hDC,100,137);19LineTo(hDC,50,50);1 Polyli
45、ne(hDC,points,6); /畫一個(gè)五邊形畫一個(gè)五邊形2Arc(hDC,63,137,138,212,100,137,100,137); /畫一個(gè)圓畫一個(gè)圓3Pie(hDC,213,137,288,212,240,137,260,137); /畫一個(gè)圓餅畫一個(gè)圓餅4Rectangle(hDC,213,212,287,250); /畫一個(gè)長(zhǎng)方形畫一個(gè)長(zhǎng)方形5RoundRect(hDC,213,100,287,137,20,20); /畫一個(gè)圓角長(zhǎng)方形畫一個(gè)圓角長(zhǎng)方形6DeleteObject(hPen); /刪除畫筆刪除畫筆7DeleteObject(hBrush); /刪除畫刷刪除畫刷
46、8EndPaint(hWnd,&PtStr); /結(jié)束繪圖結(jié)束繪圖9return 0;10case WM_DESTROY: /結(jié)束應(yīng)用程序結(jié)束應(yīng)用程序11PostQuitMessage(0);12return 0;13default:/其他消息處理程序其他消息處理程序14return(DefWindowProc(hWnd,iMessage,wParam,lParam) ; BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) /初始化窗口初始化窗口HWND hWnd;hWnd=CreateWindow(WinFill, /生成窗口生成窗口
47、填充示例程序填充示例程序,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);if(!hWnd)return FALSE;hWndMain=hWnd;ShowWindow(hWnd,nCmdShow);/顯示窗口顯示窗口UpdateWindow(hWnd);return TRUE;BOOL InitWindowsClass(HINSTANCE hInstance) /定義窗口類定義窗口類WNDCLASS WndClass; WndClass.cbClsExtra=0; WndClass.cb
48、WndExtra=0; WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hIcon=LoadIcon(NULL,END); WndClass.hInstance=hInstance; WndClass.lpfnWndProc=WndProc; WndClass.lpszClassName=WinFill; WndClass.lpszMenuName=NULL; WndClass.style=CS_HREDRAW|C
49、S_VREDRAW; return RegisterClass(&WndClass);【例【例4-2】編寫一個(gè)程序,在屏幕上出現(xiàn)一個(gè)圓心沿正弦曲線軌編寫一個(gè)程序,在屏幕上出現(xiàn)一個(gè)圓心沿正弦曲線軌跡移動(dòng)的實(shí)心圓,而且,每隔四分之一周期,圓的填充色和圓的跡移動(dòng)的實(shí)心圓,而且,每隔四分之一周期,圓的填充色和圓的周邊顏色都發(fā)生變化,同時(shí),圓的半徑在四分之一周期之內(nèi)由正周邊顏色都發(fā)生變化,同時(shí),圓的半徑在四分之一周期之內(nèi)由正弦曲線幅值的弦曲線幅值的0.20.2倍至倍至0.60.6倍線性增長(zhǎng)。倍線性增長(zhǎng)。(1) (1) 正弦曲線是此題的基礎(chǔ)。在正弦曲線是此題的基礎(chǔ)。在WndMain()WndMai
50、n()函數(shù)消息循環(huán)前,函數(shù)消息循環(huán)前,生成正弦曲線各點(diǎn)的坐標(biāo)。把正弦曲線一個(gè)周期的橫坐標(biāo)分成生成正弦曲線各點(diǎn)的坐標(biāo)。把正弦曲線一個(gè)周期的橫坐標(biāo)分成100100個(gè)等分點(diǎn),存儲(chǔ)在數(shù)組個(gè)等分點(diǎn),存儲(chǔ)在數(shù)組lpSin100lpSin100中,中,100100個(gè)點(diǎn)的坐標(biāo)計(jì)算個(gè)點(diǎn)的坐標(biāo)計(jì)算如下:如下:for(int j=0;j100;j+)for(int j=0;j100;j+)/生成正弦曲線的點(diǎn)坐標(biāo)生成正弦曲線的點(diǎn)坐標(biāo) lpSinj.x=(long)(jlpSinj.x=(long)(j* *2 2* *Pi/100Pi/100* *60);60);lpSinj.y=(long)(dfRangelpSi
51、nj.y=(long)(dfRange* *sin(jsin(j* *2 2* *Pi/100);Pi/100); 雙擊此處運(yùn)行程序雙擊此處運(yùn)行程序(2) (2) 動(dòng)態(tài)顯示圓在正弦曲線上移動(dòng)動(dòng)態(tài)顯示圓在正弦曲線上移動(dòng)數(shù)組數(shù)組lpSin100lpSin100的長(zhǎng)度為的長(zhǎng)度為100100設(shè)定圓在正弦曲線移動(dòng)時(shí)共有設(shè)定圓在正弦曲線移動(dòng)時(shí)共有100100個(gè)位置個(gè)位置數(shù)組中每一個(gè)值是圓移動(dòng)時(shí)圓心的坐標(biāo)數(shù)組中每一個(gè)值是圓移動(dòng)時(shí)圓心的坐標(biāo)每四分之一周期有每四分之一周期有2525個(gè)位置個(gè)位置i=25i=25處于第處于第1 1個(gè)個(gè)1/41/4周期,創(chuàng)建周期,創(chuàng)建紅色畫筆和畫刷紅色畫筆和畫刷;25i5025i50
52、處于第處于第2 2個(gè)個(gè)1/41/4周期,創(chuàng)建周期,創(chuàng)建綠色畫筆和畫刷綠色畫筆和畫刷;50i7550i75處于第處于第3 3個(gè)個(gè)1/41/4周期,創(chuàng)建周期,創(chuàng)建藍(lán)色畫筆和畫刷藍(lán)色畫筆和畫刷;75i10075i100處于第處于第4 4個(gè)個(gè)1/41/4周期,創(chuàng)建周期,創(chuàng)建黃色畫筆和畫刷黃色畫筆和畫刷; if(i=25) if(i=25) /第一個(gè)第一個(gè)1/41/4周期周期 hPen=CreatePen(PS_DASH,1,RGB(255,0,0); hPen=CreatePen(PS_DASH,1,RGB(255,0,0); hBrush=CreateHatchBrush(HS_BDIAGONAL,
53、RGB(255,0,0); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0); lRadious=(long)(dfRange lRadious=(long)(dfRange* *0.2+i%250.2+i%25* *dfRangedfRange* *0.4/25);/0.4/25);/計(jì)算計(jì)算半徑半徑 在消息在消息WM_PAINTWM_PAINT處理程序中,調(diào)用函數(shù)處理程序中,調(diào)用函數(shù)BeginPaint()BeginPaint()獲得獲得設(shè)備環(huán)境句柄。由此經(jīng)過線性差分計(jì)算圓半徑的大小設(shè)備環(huán)境句柄。由此經(jīng)過線性差分計(jì)算圓半徑的大小lRadio
54、uslRadious,第,第1 1個(gè)個(gè)1/41/4周期的程序代碼如下:周期的程序代碼如下:創(chuàng)建的畫筆和畫刷選入設(shè)備環(huán)境后,調(diào)用函數(shù)創(chuàng)建的畫筆和畫刷選入設(shè)備環(huán)境后,調(diào)用函數(shù)Ellipse()Ellipse()繪制繪制圓形。下面這段代碼是動(dòng)態(tài)顯示的關(guān)鍵:圓形。下面這段代碼是動(dòng)態(tài)顯示的關(guān)鍵:Sleep(100);Sleep(100);/停停0.10.1秒秒if(i100) InvalidateRect(hWnd,NULL,1);/if(i100) InvalidateRect(hWnd,NULL,1);/刷新用戶區(qū)刷新用戶區(qū) 調(diào)用調(diào)用Sleep(100)Sleep(100)函數(shù)使程序暫停函數(shù)使程序暫
55、停0.10.1秒。所含參數(shù)秒。所含參數(shù)100100代表暫代表暫停的時(shí)間,使用毫秒作單位。停的時(shí)間,使用毫秒作單位。i100i100時(shí)調(diào)用函數(shù)刷新用時(shí)調(diào)用函數(shù)刷新用戶區(qū)發(fā)送戶區(qū)發(fā)送WM_PAINTWM_PAINT消息消息消息發(fā)到的消息發(fā)到的窗口的句柄窗口的句柄代表刷新代表刷新整個(gè)用戶區(qū)整個(gè)用戶區(qū)代表清除用戶區(qū)中代表清除用戶區(qū)中所有的顯示內(nèi)容所有的顯示內(nèi)容#include #include #include #include #define Pi 3.1415926long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam
56、);double dfTheta=0,dfRange=100.0;/正弦曲線的角度變量正弦曲線的角度變量long i=0,j=0;long lCentreX=0,lCentreY=0,lRadious=(long)(0.2*dfRange);/定義圓心坐標(biāo)和圓半徑定義圓心坐標(biāo)和圓半徑POINT lpSin100;/定義正弦曲線的點(diǎn)坐標(biāo)定義正弦曲線的點(diǎn)坐標(biāo)int WINAPI WinMain(,.) / 填寫窗口類屬性填寫窗口類屬性if(!RegisterClass(&WndClass)/注冊(cè)窗口注冊(cè)窗口MessageBeep(0);return FALSE;hWnd=CreateWin
57、dow(SIN,/窗口類名窗口類名4_6,/標(biāo)題名標(biāo)題名WS_OVERLAPPEDWINDOW,/帶標(biāo)題欄帶標(biāo)題欄,最大最大/小按鈕的窗口小按鈕的窗口CW_USEDEFAULT,/窗口左上角坐標(biāo)窗口左上角坐標(biāo)0,CW_USEDEFAULT,/采用默認(rèn)的寬度和高度采用默認(rèn)的寬度和高度0,NULL,/無(wú)父窗口無(wú)父窗口NULL,/無(wú)主菜單無(wú)主菜單hInstance,/當(dāng)前實(shí)例句柄當(dāng)前實(shí)例句柄NULL);.ShowWindow(hWnd,nCmdShow);/顯示窗口顯示窗口UpdateWindow(hWnd);/更新并繪制用戶區(qū)更新并繪制用戶區(qū)1.for(int j=0;j100;j+)/生成正弦曲
58、線的點(diǎn)坐標(biāo)生成正弦曲線的點(diǎn)坐標(biāo)2.3.lpSinj.x=(long)(j*2*Pi/100*60);4.lpSinj.y=(long)(dfRange*sin(j*2*Pi/100);5.6.while(GetMessage(&Message,0,0,0)7.8.TranslateMessage(&Message);/消息循環(huán)消息循環(huán)9.DispatchMessage(&Message);10.11.return Message.wParam;long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lPa
59、ram)1.HDC hDC;/定義設(shè)備環(huán)境句柄定義設(shè)備環(huán)境句柄2.HBRUSH hBrush;/定義畫刷句柄定義畫刷句柄3.HPEN hPen;/定義畫筆句柄定義畫筆句柄4.PAINTSTRUCT PtStr;/定義包含繪圖信息的結(jié)構(gòu)體變量定義包含繪圖信息的結(jié)構(gòu)體變量5.switch(iMessage)6. case WM_PAINT:/處理繪圖消息處理繪圖消息7.hDC=BeginPaint(hWnd,&PtStr);/獲得設(shè)備環(huán)境指針獲得設(shè)備環(huán)境指針8.SetWindowOrgEx(hDC,-200,-200,NULL);/設(shè)置原點(diǎn)坐標(biāo)設(shè)置原點(diǎn)坐標(biāo)9.hPen=CreatePen(
60、PS_DASH,1,RGB(255,0,0);/建新畫筆建新畫筆10.SelectObject(hDC,hPen);/選入畫筆選入畫筆11.Polyline(hDC,lpSin,100);/繪制正弦曲線繪制正弦曲線if(i=25) /第一個(gè)第一個(gè)1/4周期周期hPen=CreatePen(PS_DASH,1,RGB(255,0,0);hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0);lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25); /計(jì)算半徑計(jì)算半徑else if(i=50)/第二個(gè)第二個(gè)1/4周期周期hPen=CreatePen(PS_DASH,1,RGB(0,255,0);hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,25
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房標(biāo)準(zhǔn)租賃合同范本
- 吳江區(qū)股權(quán)轉(zhuǎn)讓合同范例
- 課題申報(bào)書 研究?jī)?nèi)容
- 員工入股投資合同范本
- 個(gè)人合作合同范例
- FLASH外包合同范本
- 不是贈(zèng)與合同范本
- 勞動(dòng)合同范本 文
- 咨詢方案合同范例
- 推動(dòng)城市安全韌性提升的實(shí)施策略
- 2025年湖南大眾傳媒職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)新版
- 雙均線策略(TBQ版)
- 北京房屋租賃合同電子版7篇
- 《園林機(jī)械使用與維修》課件-任務(wù)3.園林養(yǎng)護(hù)機(jī)械
- deepseek-r1論文-中文翻譯版
- 項(xiàng)目式學(xué)習(xí)在小學(xué)數(shù)學(xué)教學(xué)中的應(yīng)用
- 2025年中遠(yuǎn)海運(yùn)物流有限公司招聘筆試參考題庫(kù)含答案解析
- 2024年3月-6月-9月-12月青少年軟件編程Python等級(jí)考試二級(jí)真題試卷(全4套 含答案)
- 2025中智集團(tuán)下屬單位公開招聘41人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 中醫(yī)理療館路演
- 設(shè)備維修的基本技能培訓(xùn)
評(píng)論
0/150
提交評(píng)論