C++程序設(shè)計(jì)chapter4_第1頁
C++程序設(shè)計(jì)chapter4_第2頁
C++程序設(shè)計(jì)chapter4_第3頁
C++程序設(shè)計(jì)chapter4_第4頁
C++程序設(shè)計(jì)chapter4_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第四章第四章 WindowsWindows的圖形設(shè)備接口及的圖形設(shè)備接口及windowswindows繪圖繪圖 Windows圖形設(shè)備接口圖形設(shè)備接口(GDI)是為與)是為與設(shè)備無關(guān)設(shè)備無關(guān)的圖形的圖形設(shè)計(jì)的。所謂設(shè)備的無關(guān)性,就是操作系統(tǒng)屏蔽了硬件設(shè)設(shè)計(jì)的。所謂設(shè)備的無關(guān)性,就是操作系統(tǒng)屏蔽了硬件設(shè)備的差異,因而設(shè)備無關(guān)性能使用戶編程時(shí)無需考慮特殊備的差異,因而設(shè)備無關(guān)性能使用戶編程時(shí)無需考慮特殊的硬件設(shè)置的硬件設(shè)置一、圖形設(shè)備按口一、圖形設(shè)備按口(GDI)(GDI)GDI負(fù)責(zé)系統(tǒng)與用戶或繪圖程序之間的信息交換,并控制在輸出設(shè)負(fù)責(zé)系統(tǒng)與用戶或繪圖程序之間的信息交換,并控制在輸出設(shè)備上備上顯示

2、圖形顯示圖形或或文字文字, 是是Windows系統(tǒng)的重要組成部分系統(tǒng)的重要組成部分Windows支持與設(shè)備無關(guān)的圖形支持與設(shè)備無關(guān)的圖形利用利用GDI和和Windows設(shè)設(shè)備驅(qū)動(dòng)程序備驅(qū)動(dòng)程序開發(fā)人員只要建開發(fā)人員只要建立與輸出設(shè)備的立與輸出設(shè)備的關(guān)聯(lián),讓系統(tǒng)加關(guān)聯(lián),讓系統(tǒng)加載相應(yīng)的設(shè)備驅(qū)載相應(yīng)的設(shè)備驅(qū)動(dòng)程序即可動(dòng)程序即可1. 1. GDI的一些基本概念的一些基本概念 設(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)用程序

3、與設(shè)備相連使應(yīng)用程序與設(shè)備相連用用戶戶為確保圖形輸出為確保圖形輸出的的設(shè)備無關(guān)性設(shè)備無關(guān)性應(yīng)用應(yīng)用程序程序設(shè)備描設(shè)備描述表及述表及其屬性其屬性通過設(shè)備描述表的句柄來間接地存取通過設(shè)備描述表的句柄來間接地存取應(yīng)用程序每一次圖形操應(yīng)用程序每一次圖形操作均參照設(shè)備描述表中作均參照設(shè)備描述表中的屬性執(zhí)行的屬性執(zhí)行2.2.圖形刷新圖形刷新圖形刷新圖形刷新是繪圖過程中必須考慮的重要問題是繪圖過程中必須考慮的重要問題刷新請求刷新請求對刷新請求的響應(yīng)對刷新請求的響應(yīng)刷新方法刷新方法包括(1) 刷新請求刷新請求 應(yīng)用程序在窗口中應(yīng)用程序在窗口中繪制了一個(gè)橢圓,繪制了一個(gè)橢圓,顏色列表框覆蓋了顏色列表框覆蓋了橢圓

4、的一部分橢圓的一部分關(guān)閉顏色選框后,關(guān)閉顏色選框后,應(yīng)用程序需要恢應(yīng)用程序需要恢復(fù)被覆蓋部分的復(fù)被覆蓋部分的顏色和形狀顏色和形狀窗口大小的調(diào)整窗口大小的調(diào)整窗口移動(dòng)窗口移動(dòng)被覆蓋后的恢復(fù)被覆蓋后的恢復(fù)(2) 系統(tǒng)對刷新請求的響應(yīng)系統(tǒng)對刷新請求的響應(yīng) 當(dāng)用戶區(qū)的內(nèi)容需要刷新時(shí),系統(tǒng)向應(yīng)用程序消息隊(duì)當(dāng)用戶區(qū)的內(nèi)容需要刷新時(shí),系統(tǒng)向應(yīng)用程序消息隊(duì)列發(fā)送列發(fā)送WM_PAINT消息,系統(tǒng)在應(yīng)用程序的消息隊(duì)列中消息,系統(tǒng)在應(yīng)用程序的消息隊(duì)列中加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理三種三種刷新刷新窗口移動(dòng)后的刷新窗口移動(dòng)后的刷新被覆蓋區(qū)域的刷新被覆蓋區(qū)域的刷新對象穿越后

5、的刷新對象穿越后的刷新(系統(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ū)域稱為無效區(qū)域無效區(qū)域。 Windows系統(tǒng)為每個(gè)窗口建立了一個(gè)系統(tǒng)為每個(gè)窗口建立了一個(gè)PAINTSTRUCT結(jié)構(gòu)結(jié)構(gòu),該結(jié)構(gòu)該結(jié)構(gòu)中包含了包圍中包含了包圍無效區(qū)域無效區(qū)域的一個(gè)最小矩形的結(jié)構(gòu)的一個(gè)最小矩形的結(jié)構(gòu)RECT,應(yīng)用程序可以應(yīng)用程序可以根據(jù)這個(gè)無

6、效矩形執(zhí)行刷新操作。根據(jù)這個(gè)無效矩形執(zhí)行刷新操作。 Typedef struct tagPAINTSTRUCTTypedef struct tagPAINTSTRUCT HDC hdc HDC hdc; ;/設(shè)備環(huán)境句柄設(shè)備環(huán)境句柄 BOOL fEraseBOOL fErase; ;/一般取真值,表示擦除無效矩形的背景一般取真值,表示擦除無效矩形的背景 RECT RECT rcPaintrcPaint; ;/無效矩形標(biāo)識無效矩形標(biāo)識 BOOL fRestoreBOOL fRestore; ;/系統(tǒng)保留系統(tǒng)保留 BOOL fIncUpdateBOOL fIncUpdate; ;/系統(tǒng)保留系統(tǒng)保留

7、 BYTE rgbReserved16BYTE 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)識無效矩形,它包含了無效作用是標(biāo)識無效矩形,它包含了無效矩形的左上角和右下角的坐標(biāo)矩形的左上角和右下角的坐標(biāo)7常用的常用的Windows應(yīng)用程序刷新窗應(yīng)用程序刷新窗口的方法口的方法保存副本。刷保存副本。刷新時(shí)將副本拷新時(shí)將副本拷貝到相應(yīng)的窗貝到相應(yīng)的窗口中口中記錄事件。刷新時(shí)記錄事件。刷新時(shí)重新執(zhí)行這個(gè)曾經(jīng)重新執(zhí)行這個(gè)曾經(jīng)發(fā)生的事件發(fā)生的事件重新繪制。將圖形繪重新繪制。將圖形繪制處

8、理程序放在消息制處理程序放在消息WM_PAINT響應(yīng)模響應(yīng)模塊中,刷新時(shí)重繪圖塊中,刷新時(shí)重繪圖形形(3) 有效的刷新方法有效的刷新方法3. 獲取設(shè)備環(huán)境的方法獲取設(shè)備環(huán)境的方法獲取設(shè)備環(huán)境是應(yīng)用程序輸出圖形的先決條件,常用的兩種方法是調(diào)用獲取設(shè)備環(huán)境是應(yīng)用程序輸出圖形的先決條件,常用的兩種方法是調(diào)用函數(shù)函數(shù)BeginPaint或或GetDC(1) 調(diào)用調(diào)用BeginPaint函數(shù)函數(shù) 應(yīng)用程序響應(yīng)應(yīng)用程序響應(yīng)WM_PAINT消息進(jìn)行圖形刷新時(shí),主要通過調(diào)用消息進(jìn)行圖形刷新時(shí),主要通過調(diào)用BeginPaint函數(shù)獲取設(shè)備環(huán)境函數(shù)獲取設(shè)備環(huán)境 hdc=BeginPaint(hwnd,&h

9、dc=BeginPaint(hwnd,&psps) ); /psps為為PAINTSTRUCTPAINTSTRUCT類型結(jié)構(gòu)類型結(jié)構(gòu)定義方式為:定義方式為:PAINTSTRUCT PAINTSTRUCT psps; ; 系統(tǒng)獲取設(shè)備環(huán)境的系統(tǒng)獲取設(shè)備環(huán)境的同時(shí)填寫同時(shí)填寫ps結(jié)構(gòu),以結(jié)構(gòu),以標(biāo)識無效矩形區(qū)標(biāo)識無效矩形區(qū)由由BeginPaint函數(shù)獲取的設(shè)備環(huán)境要用函數(shù)獲取的設(shè)備環(huán)境要用EndPaint函數(shù)釋放函數(shù)釋放void EndPaint(HWND hwnd, PAINTSTRUCT &ps)(2) 調(diào)用調(diào)用GetDC函數(shù)函數(shù) 如果繪圖工作并非由如果繪圖工作并非由WM_PA

10、INT消息驅(qū)動(dòng),則調(diào)用消息驅(qū)動(dòng),則調(diào)用GetDC函數(shù)函數(shù)獲取設(shè)備環(huán)境。獲取設(shè)備環(huán)境。hdc=GetDC(hwndhdc=GetDC(hwnd);); 由由GetDC函數(shù)獲取的設(shè)備環(huán)境必須用函數(shù)獲取的設(shè)備環(huán)境必須用ReleaseDC函數(shù)釋放函數(shù)釋放 void ReleaseDC(HWND hwnd); B eginPaint 與與 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ū) 域域使使

11、用用 BeginPaint 函函 數(shù)數(shù)獲獲 取取 設(shè)設(shè) 備備 環(huán)環(huán) 境境 后后 ,操操 作作區(qū)區(qū) 域域 為為 無無 效效 區(qū)區(qū) 域域使使 用用GetDC 函函 數(shù)數(shù) 獲獲取取 設(shè)設(shè) 備備 環(huán)環(huán) 境境 后后 , 操操 作作區(qū)區(qū) 域域 為為 整整 個(gè)個(gè) 用用 戶戶 區(qū)區(qū)釋釋 放放 設(shè)設(shè) 備備 環(huán)環(huán)境境 所所 用用 函函 數(shù)數(shù)由由 EndPaint 函函 數(shù)數(shù) 釋釋 放放由由 ReleaseDC 函函 數(shù)數(shù) 釋釋放放4. 映像模式映像模式映像模式定義了將邏輯單位轉(zhuǎn)化為設(shè)備的度量單位以及設(shè)備映像模式定義了將邏輯單位轉(zhuǎn)化為設(shè)備的度量單位以及設(shè)備的的x方向和方向和y方向,程序員可在一個(gè)統(tǒng)一的邏輯坐標(biāo)系中操

12、作而不必方向,程序員可在一個(gè)統(tǒng)一的邏輯坐標(biāo)系中操作而不必考慮輸出設(shè)備的坐標(biāo)系情況考慮輸出設(shè)備的坐標(biāo)系情況窗口窗口:對應(yīng)邏輯坐標(biāo)系上程序員設(shè)定的區(qū)域:對應(yīng)邏輯坐標(biāo)系上程序員設(shè)定的區(qū)域視口視口:對應(yīng)實(shí)際輸出設(shè)備上程序員設(shè)定的區(qū)域:對應(yīng)實(shí)際輸出設(shè)備上程序員設(shè)定的區(qū)域窗口和視口窗口和視口如何映射?如何映射?缺省的映射模式缺省的映射模式將窗口中的對稱將窗口中的對稱圖形映射到視口圖形映射到視口時(shí)仍為對稱圖形時(shí)仍為對稱圖形按照窗口和視口的坐按照窗口和視口的坐標(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)系

13、統(tǒng)用戶區(qū)坐標(biāo)系統(tǒng) 所有設(shè)備座標(biāo)系都以象所有設(shè)備座標(biāo)系都以象素為單位,水平軸(即素為單位,水平軸(即x軸)軸)上的值從左到右遞增,垂直上的值從左到右遞增,垂直軸(即軸(即y軸)上的值從上到軸)上的值從上到下遞增下遞增 ,即左上角為原點(diǎn)即左上角為原點(diǎn)100,150客戶區(qū)原點(diǎn)客戶區(qū)原點(diǎn)0,00,0窗口原點(diǎn)窗口原點(diǎn)0,00,0屏幕原點(diǎn)屏幕原點(diǎn)0,00,0 應(yīng)用程序可獲取設(shè)備環(huán)境的當(dāng)前映像模式,并根據(jù)需要設(shè)置映應(yīng)用程序可獲取設(shè)備環(huán)境的當(dāng)前映像模式,并根據(jù)需要設(shè)置映像模式。像模式。相關(guān)相關(guān)函數(shù)函數(shù)設(shè)置設(shè)備環(huán)境的映像模式設(shè)置設(shè)備環(huán)境的映像模式SetMapMode(hdc,nMapModeSetMapMode

14、(hdc,nMapMode);); nMapMode為映像模式的整型標(biāo)識符為映像模式的整型標(biāo)識符獲取當(dāng)前設(shè)備環(huán)境的映像模式獲取當(dāng)前設(shè)備環(huán)境的映像模式nMapMode=GetMapMode(hdcnMapMode=GetMapMode(hdc););窗口窗口區(qū)域的定義由區(qū)域的定義由SetWindowExtEx函數(shù)完成,其函數(shù)原型形為函數(shù)完成,其函數(shù)原型形為:BOOL SetWindowExtExBOOL SetWindowExtEx( HDC hdc( HDC hdc, , int nHeight,nWidth int nHeight,nWidth, /以以邏輯邏輯單位表示的窗口區(qū)域高寬度單位表

15、示的窗口區(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 hdcHDC hdc, ,int nHeight,nWidthint nHeight,nWidth,/,/以以物理物理設(shè)備單位表示的新視口區(qū)域高寬度設(shè)備單位表示的新視口區(qū)域高寬度LPSIZE lpSizeLPSIZE lpSize);視口視

16、口的缺省原點(diǎn)和的缺省原點(diǎn)和窗口窗口的缺省原點(diǎn)均為(的缺省原點(diǎn)均為(0,0)??赏ㄟ^調(diào)用函數(shù))??赏ㄟ^調(diào)用函數(shù)SetViewportOrgEx和和SetWindowOrgEx設(shè)定窗口與視口的原點(diǎn)。設(shè)定窗口與視口的原點(diǎn)。SetViewportOrgEx SetViewportOrgEx函數(shù)的原形為函數(shù)的原形為:BOOL SetViewportOrgExBOOL SetViewportOrgEx/邏輯點(diǎn)(,)映射為設(shè)備點(diǎn)邏輯點(diǎn)(,)映射為設(shè)備點(diǎn)( ( X,Y ) ( (HDC hdcHDC hdc, ,intint X,Y X,Y,/以以物理物理單位表示的新視口原點(diǎn)坐標(biāo)單位表示的新視口原點(diǎn)坐標(biāo)LPP

17、OINT lpPointLPPOINT lpPoint/函數(shù)調(diào)用前原點(diǎn)坐標(biāo)的函數(shù)調(diào)用前原點(diǎn)坐標(biāo)的POINTPOINT結(jié)構(gòu)的地址結(jié)構(gòu)的地址););SetWindowOrgEx函數(shù)的原形為函數(shù)的原形為:BOOL SetWindowOrgExBOOL SetWindowOrgEx / /邏輯點(diǎn)邏輯點(diǎn)( ( X,Y )映射為設(shè)備點(diǎn)(,)映射為設(shè)備點(diǎn)(,)( (HDC hdcHDC hdc, ,int 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)的POINTPOIN

18、T結(jié)構(gòu)的地址結(jié)構(gòu)的地址););二、繪圖工具與顏色二、繪圖工具與顏色1. 畫筆畫筆(1) 畫筆的創(chuàng)建畫筆的創(chuàng)建 使用畫筆之前必須事先定義一個(gè)畫筆句柄。形式如下使用畫筆之前必須事先定義一個(gè)畫筆句柄。形式如下:HPEN hP;然后調(diào)用函數(shù)然后調(diào)用函數(shù)GetStockObject獲取獲取Windows系統(tǒng)定義的系統(tǒng)定義的四種四種畫筆例如畫筆例如獲取畫筆獲取畫筆BLACK_PEN的形式如下的形式如下: hPhP= =GetStockObjectGetStockObject(BLACK_PENBLACK_PEN); ;WHITE_PENBLACK_PENDC_PENNULL_PEN畫筆的操作畫筆的操作創(chuàng)建

19、畫筆創(chuàng)建畫筆將畫筆選入設(shè)備環(huán)境將畫筆選入設(shè)備環(huán)境刪除畫筆刪除畫筆(2) 創(chuàng)建創(chuàng)建新新畫筆,形式如下畫筆,形式如下:hP=CreatePenhP=CreatePen(int nPenStyleint nPenStyle, ,/確定確定畫筆樣式畫筆樣式int nWidthint nWidth, , /畫筆寬度畫筆寬度COLORREF rgbColorCOLORREF rgbColor / /畫筆顏色畫筆顏色); ;創(chuàng)建畫筆后,必須調(diào)用創(chuàng)建畫筆后,必須調(diào)用SelectObject函數(shù)將其選入設(shè)備環(huán)境。函數(shù)將其選入設(shè)備環(huán)境。 SelectObject(hdc,hPSelectObject(hdc,hP

20、);); /hP /hP為所創(chuàng)建或獲取的畫筆句柄為所創(chuàng)建或獲取的畫筆句柄不再使用當(dāng)前畫筆時(shí),需刪除畫筆,以免占內(nèi)存不再使用當(dāng)前畫筆時(shí),需刪除畫筆,以免占內(nèi)存 DeleteObject(hPDeleteObject(hP););PS_DASH:虛線虛線PS_DASHDOT:點(diǎn)劃線點(diǎn)劃線PS_DASHDOTDOT:雙點(diǎn)劃線雙點(diǎn)劃線PS_DOT:點(diǎn)線點(diǎn)線PS_INSIDEFRAME:實(shí)線實(shí)線PS_NULL:無無PS_SOLID:實(shí)線實(shí)線2. 畫刷畫刷 畫刷的創(chuàng)建與應(yīng)用與畫筆很相似,畫刷的創(chuàng)建與應(yīng)用與畫筆很相似,操作畫刷也包括操作畫刷也包括創(chuàng)建創(chuàng)建、選入設(shè)選入設(shè)備環(huán)境備環(huán)境和和刪除刪除。(1) 畫刷的

21、創(chuàng)建畫刷的創(chuàng)建 使用畫刷需事先定義一個(gè)畫刷句柄。形式如下:使用畫刷需事先定義一個(gè)畫刷句柄。形式如下: HBRUSH hBr; /hBr為畫刷句柄為畫刷句柄 然后調(diào)用函數(shù)然后調(diào)用函數(shù)GetStockObject獲取獲取Windows系統(tǒng)提供的系統(tǒng)提供的7種畫刷種畫刷 hBr=(HBRUSH)GetStockObject(nBrushStylenBrushStyle)畫刷樣式)畫刷樣式BLACK_BRUSH黑色畫刷黑色畫刷DKGRAY_BRUSH 深灰色畫刷深灰色畫刷GRAY_BRUSH灰色畫刷灰色畫刷HOLLOW_BRUSH 虛畫刷虛畫刷LTGRAY_BRUSH亮灰色畫刷亮灰色畫刷NULL_BR

22、USH空畫刷空畫刷WHITE_BRUSH白色畫刷白色畫刷指定顏色畫指定顏色畫刷如何獲得?刷如何獲得?可調(diào)用函數(shù)可調(diào)用函數(shù)CreateSolidBrush和和CreateHatchBrush創(chuàng)建畫刷創(chuàng)建畫刷,hBr=CreateSolidBrush(rgbColorhBr=CreateSolidBrush(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) 刪除

23、畫刷刪除畫刷 不使用畫刷時(shí),可用不使用畫刷時(shí),可用DeleteObject(hBr);刪除畫刷,釋放內(nèi)存刪除畫刷,釋放內(nèi)存hBr=CreateHatchBrushhBr=CreateHatchBrush(int(int nHctchStylenHctchStyle, , COLORREF rgbColor COLORREF rgbColor););HS_BDIAGONAL 45度從左上到右下度從左上到右下HS_DIAGCROSS 45度叉線度叉線HS_FDIAGONAL 45度從左下到右上度從左下到右上HS_CROSS 垂直相交的陰影線垂直相交的陰影線HS_HORIZONTAL 水平陰影線水平

24、陰影線HS_VERTICAL垂直陰影線垂直陰影線3. 顏色顏色 Windows使用宏使用宏RGB定義繪圖的顏色,其形式為定義繪圖的顏色,其形式為: RGB(nRed, nGreen,nBlue) 紅色值紅色值藍(lán)色值藍(lán)色值綠色值綠色值RGB(255,0,0)RGB(0,255,0)RGB(0,0,255)三、三、 常用繪圖函數(shù)常用繪圖函數(shù)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)

25、地址結(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(HDC hdc,int X,int Y) / X,int Y) /X X和和Y Y為線段的終點(diǎn)坐標(biāo)為線段的終點(diǎn)坐標(biāo)3 從當(dāng)前位置開始,依次用線段連接從當(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 / nCoun

26、t為為POINT數(shù)組中點(diǎn)的個(gè)數(shù)數(shù)組中點(diǎn)的個(gè)數(shù))4 繪制橢圓弧線的函數(shù)繪制橢圓弧線的函數(shù)Arc,BOOL Arc(HDC hdc,int X1,intY1,/邊框矩形左上角的邏輯坐標(biāo)邊框矩形左上角的邏輯坐標(biāo)int X2,int Y2,/邊框矩形右下角的邏輯坐標(biāo)邊框矩形右下角的邏輯坐標(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,intY

27、1,/邊框矩形左上角的邏輯坐標(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)橢圓弧終止經(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)分別分別為矩形的左上角和右為矩形

28、的左上角和右下角的邏輯坐標(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)圓角的高度和寬圓角的高度和寬度度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)包含各

29、點(diǎn)坐標(biāo)的包含各點(diǎn)坐標(biāo)的POINT數(shù)組的地址數(shù)組的地址多邊形點(diǎn)的個(gè)數(shù)多邊形點(diǎn)的個(gè)數(shù)10產(chǎn)生無效矩形函數(shù)產(chǎn)生無效矩形函數(shù)BOOL InvalidateRect( HWND hWnd, CONST RECT *lpRect, BOOL bErase ); 產(chǎn)生無效矩形產(chǎn)生無效矩形的窗口句柄的窗口句柄指向無效矩形,若指向無效矩形,若為為NULL則表示則表示整整個(gè)客戶區(qū)個(gè)客戶區(qū)表示是否要擦除無表示是否要擦除無效矩形原有內(nèi)容,效矩形原有內(nèi)容,若為若為TRUE則表示則表示擦除擦除,若為,若為FALSE則表示則表示不擦除不擦除四、四、 應(yīng)用實(shí)例應(yīng)用實(shí)例【例【例3-1】利用繪圖函數(shù)創(chuàng)建填充區(qū)。共有三個(gè)填充圖形,

30、第一個(gè)是用】利用繪圖函數(shù)創(chuàng)建填充區(qū)。共有三個(gè)填充圖形,第一個(gè)是用深灰色畫刷填充帶圓角的矩形,第二個(gè)是采用亮灰色畫刷填充一個(gè)橢深灰色畫刷填充帶圓角的矩形,第二個(gè)是采用亮灰色畫刷填充一個(gè)橢圓型圖,第三個(gè)是用虛畫刷填充餅形圖。圓型圖,第三個(gè)是用虛畫刷填充餅形圖。#include#include#includelong WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam););使用虛畫刷填充時(shí),看不出填充效果使用虛畫刷填充時(shí),看不出填充效果!BOOL InitWindowsClass(HINSTANCE hInstance);B

31、OOL InitWindows(HINSTANCE hInstance,int nCmdShow);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

32、,0,0,0)/消息循環(huán)消息循環(huán) TranslateMessage(&Message);DispatchMessage(&Message); return Message.wParam;long WINAPI long WINAPI WndProcWndProc(HWND hWnd,UINT iMessage(HWND hWnd,UINT iMessage, , UINT wParam,LONG lParamUINT wParam,LONG lParam) ) HDC hDC; /定義指向設(shè)備的句柄定義指向設(shè)備的句柄 HBRUSH hBrush; /定義指向畫刷的句柄定義指向畫

33、刷的句柄 HPEN hPen;/定義指向畫筆的句柄定義指向畫筆的句柄 PAINTSTRUCT 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)GetStockObj

34、ect(DKGRAY_BRUSH); /畫刷畫刷 SelectObject(hDC,hBrush); /選擇畫刷選擇畫刷 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); /繪制繪

35、制橢圓橢圓 hBrush=(HBRUSH)GetStockObject(HOLLOW_BRUSH); /虛畫刷虛畫刷 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;defaul

36、t:default:/其他消息處理程序其他消息處理程序return(DefWindowProc(hWnd,iMessage,wParam,lParamreturn(DefWindowProc(hWnd,iMessage,wParam,lParam) ;) ; BOOL InitWindows(HINSTANCE hInstance,int nCmdShowBOOL InitWindows(HINSTANCE hInstance,int nCmdShow)/)/初始化窗口初始化窗口 HWND hWndHWND hWnd; ;hWnd=CreateWindow(WinFillhWnd=Create

37、Window(WinFill, /, /生成窗口生成窗口 填充示例程序填充示例程序, WS_OVERLAPPEDWINDOW, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, NULL, NULL, hInstance hInstance, , NULL); NULL); if(!hWndif(!hWnd) )return FALSE;return FALSE; hWndMain=hWnd hWndMain=hWnd; ; ShowW

38、indow(hWnd,nCmdShow ShowWindow(hWnd,nCmdShow););/顯示窗口顯示窗口 UpdateWindow(hWndUpdateWindow(hWnd);); return TRUE; return TRUE; BOOL InitWindowsClass(HINSTANCE hInstanceBOOL InitWindowsClass(HINSTANCE hInstance) )/定義窗口類定義窗口類 WNDCLASS WndClass WNDCLASS WndClass; ; WndClass.cbClsExtra WndClass.cbClsExtra=0

39、;=0; WndClass.cbWndExtra WndClass.cbWndExtra=0;=0; 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 WndC

40、lass.hIcon=LoadIcon(NULL,END);); WndClass.hInstance=hInstance WndClass.hInstance=hInstance; ; WndClass.lpfnWndProc=WndProc WndClass.lpfnWndProc=WndProc; ; WndClass.lpszClassName WndClass.lpszClassName=WinFillWinFill; WndClass.lpszMenuName WndClass.lpszMenuName=NULL;=NULL; WndClass.style WndClass.sty

41、le=CS_HREDRAW|CS_VREDRAW;=CS_HREDRAW|CS_VREDRAW; return 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

42、 hInstance);6 BOOL InitWindows(HINSTANCE hInstance,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

43、(GetMessage(&Message,0,0,0)/消息循環(huán)消息循環(huán)13TranslateMessage(&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 P

44、tStr; /定義指向包含繪圖信息的結(jié)構(gòu)體變量定義指向包含繪圖信息的結(jié)構(gòu)體變量 /定義一個(gè)定義一個(gè)POINT數(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

45、(hDC,hPen); /選擇畫筆選擇畫筆11hBrush=(HBRUSH)GetStockObject(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);

46、18LineTo(hDC,100,137);19LineTo(hDC,50,50);1 Polyline(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è)長方形畫一個(gè)長方形5RoundRect(hDC,213,100,287,137,20,20); /畫一個(gè)圓角長方形畫一個(gè)圓角長方形6DeleteObjec

47、t(hPen); /刪除畫筆刪除畫筆7DeleteObject(hBrush); /刪除畫刷刪除畫刷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) /初始化窗口初

48、始化窗口HWND hWnd;hWnd=CreateWindow(WinFill, /生成窗口生成窗口填充示例程序填充示例程序,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) /定義窗口類定義窗口類WND

49、CLASS WndClass; WndClass.cbClsExtra=0; WndClass.cbWndExtra=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; WndCl

50、ass.lpszMenuName=NULL; WndClass.style=CS_HREDRAW|CS_VREDRAW; return RegisterClass(&WndClass);【例【例4-2】編寫一個(gè)程序,在屏幕上出現(xiàn)一個(gè)圓心沿正弦曲線軌跡移動(dòng)編寫一個(gè)程序,在屏幕上出現(xiàn)一個(gè)圓心沿正弦曲線軌跡移動(dòng)的實(shí)心圓,而且,每隔四分之一周期,圓的填充色和圓的周邊顏色都的實(shí)心圓,而且,每隔四分之一周期,圓的填充色和圓的周邊顏色都發(fā)生變化,同時(shí),圓的半徑在四分之一周期之內(nèi)由正弦曲線幅值的發(fā)生變化,同時(shí),圓的半徑在四分之一周期之內(nèi)由正弦曲線幅值的0.20.2倍至倍至0.60.6倍線性增長。倍線性

51、增長。(1) (1) 正弦曲線是此題的基礎(chǔ)。在正弦曲線是此題的基礎(chǔ)。在WndMainWndMain()()函數(shù)消息循環(huán)前,生成正函數(shù)消息循環(huán)前,生成正弦曲線各點(diǎn)的坐標(biāo)。把正弦曲線一個(gè)周期的橫坐標(biāo)分成弦曲線各點(diǎn)的坐標(biāo)。把正弦曲線一個(gè)周期的橫坐標(biāo)分成100100個(gè)等分點(diǎn)個(gè)等分點(diǎn),存儲(chǔ)在數(shù)組,存儲(chǔ)在數(shù)組lpSin100lpSin100中,中,100100個(gè)點(diǎn)的坐標(biāo)計(jì)算如下:個(gè)點(diǎn)的坐標(biāo)計(jì)算如下:for(intfor(int j=0;j100;j+) j=0;j100;j+)/生成正弦曲線的點(diǎn)坐標(biāo)生成正弦曲線的點(diǎn)坐標(biāo) lpSinj.xlpSinj.x=(long)(j=(long)(j* *2 2* *

52、Pi/100Pi/100* *60);60);lpSinj.y=(long)(dfRangelpSinj.y=(long)(dfRange* *sin(jsin(j* *2 2* *Pi/100);Pi/100); (2) (2) 動(dòng)態(tài)顯示圓在正弦曲線上移動(dòng)動(dòng)態(tài)顯示圓在正弦曲線上移動(dòng)數(shù)組數(shù)組lpSin100lpSin100的長度為的長度為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周

53、期,創(chuàng)建周期,創(chuàng)建紅色畫筆和畫刷紅色畫筆和畫刷;25i5025i50處于第處于第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 hPen=CreatePen(PS_DASH,1,RGB(255,0,0);=CreatePen(PS_DASH,1,RGB(255,0,0); hBr

54、ush hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0);=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ù)BeginPaintBeginPaint()()獲得設(shè)備獲得設(shè)備環(huán)境句柄。由此經(jīng)過線性差分計(jì)

55、算圓半徑的大小環(huán)境句柄。由此經(jīng)過線性差分計(jì)算圓半徑的大小lRadiouslRadious,第,第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)用

56、Sleep(100)Sleep(100)函數(shù)使程序暫停函數(shù)使程序暫停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

57、 iMessage,UINT wParam,LONG lParam);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)/注冊窗口注冊窗口.Messa

58、geBeep(0);return FALSE;hWnd=CreateWindow(SIN,/窗口類名窗口類名.4_6,/標(biāo)題名標(biāo)題名.WS_OVERLAPPEDWINDOW,/帶標(biāo)題欄帶標(biāo)題欄,最大最大/小按鈕的窗口小按鈕的窗口CW_USEDEFAULT,/窗口左上角坐標(biāo)窗口左上角坐標(biāo).0,CW_USEDEFAULT,/采用缺省的寬度和高度采用缺省的寬度和高度.0,NULL,/無父窗口無父窗口.NULL,/無主菜單無主菜單.hInstance,/當(dāng)前實(shí)例句柄當(dāng)前實(shí)例句柄.NULL);.ShowWindow(hWnd,nCmdShow);/顯示窗口顯示窗口.UpdateWindow(hWnd);

59、/更新并繪制用戶區(qū)更新并繪制用戶區(qū).1.for(int j=0;j100;j+)/生成正弦曲線的點(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 WndP

60、roc(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)體變量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(PS_DASH,1,RGB(255,0,0);/建新畫筆建新畫

溫馨提示

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

最新文檔

評論

0/150

提交評論