付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第3講 Windows的圖形設(shè)備接口及windows繪圖,Windows圖形設(shè)備接口(GDI)是為與設(shè)備無關(guān)的圖形設(shè)計的。所謂設(shè)備的無關(guān)性,就是操作系統(tǒng)屏蔽了硬件設(shè)備的差異,因而設(shè)備無關(guān)性能使用戶編程時無需考慮特殊的硬件設(shè)置,1. GDI的一些基本概念 設(shè)備描述表即為設(shè)備環(huán)境的屬性的集合,應(yīng)用程序與輸出設(shè)備之間的橋梁,Win系統(tǒng),外設(shè),直接訪問,統(tǒng)一的設(shè)備環(huán)境(DC),使應(yīng)用程序與設(shè)備相連,應(yīng)用程序,設(shè)備描述表及其屬性,通過設(shè)備描述表的句柄來間接地存取,應(yīng)用程序每一次圖形操作均參照設(shè)備描述表中的屬性執(zhí)行,2.圖形刷新,(1) 刷新請求,(2) 系統(tǒng)對刷新請求的響應(yīng) 當(dāng)用戶區(qū)的內(nèi)容需要刷新時,系
2、統(tǒng)向應(yīng)用程序消息隊列發(fā)送WM_PAINT消息,系統(tǒng)在應(yīng)用程序的消息隊列中加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理,三種 刷新,窗口移動后的刷新 被覆蓋區(qū)域的刷新 對象穿越后的刷新 (系統(tǒng)自動完成),用戶區(qū)移動或顯示 用戶窗口大小改變 程序通過滾動條滾動窗口,窗口被另一個窗口覆蓋的 恢復(fù)如下拉式菜單關(guān)閉等,光標穿過用戶區(qū) 圖標拖過用戶區(qū),窗口被另一個窗口覆蓋的區(qū)域稱為無效區(qū)域。 Windows系統(tǒng)為每個窗口建立了一個PAINTSTRUCT結(jié)構(gòu),該結(jié)構(gòu)中包含了包圍無效區(qū)域的一個最小矩形的結(jié)構(gòu)RECT,應(yīng)用程序可以根據(jù)這個無效矩形執(zhí)行刷新操作。,typedef struct tagPAINTSTRUC
3、T HDC hdc;/設(shè)備環(huán)境句柄 BOOL fErase;/一般取真值,表示擦除無效矩形的背景 RECT rcPaint;/無效矩形標識 BOOL fRestore;/系統(tǒng)保留 BOOL fIncUpdate;/系統(tǒng)保留 BYTE rgbReserved32;/系統(tǒng)保留 PAINTSTRUCT;,常用的Windows應(yīng)用程序刷新窗口的方法,保存副本。刷新時將副本拷貝到相應(yīng)的窗口中,記錄事件。刷新時重新執(zhí)行這個曾經(jīng)發(fā)生的事件,重新繪制。將圖形繪制處理程序放在消息WM_PAINT響應(yīng)模塊中,刷新時重繪圖形,(3) 有效的刷新方法,3. 獲取設(shè)備環(huán)境的方法,獲取設(shè)備環(huán)境是應(yīng)用程序輸出圖形的先決條件
4、,常用的兩種方法是調(diào)用函數(shù)BeginPaint或GetDC,由BeginPaint函數(shù)獲取的設(shè)備環(huán)境要用EndPaint函數(shù)釋放 BOOL EndPaint(HWND hwnd, PAINTSTRUCT ,由GetDC函數(shù)獲取的設(shè)備環(huán)境必須用ReleaseDC函數(shù)釋放 void ReleaseDC(HWND hwnd);,4. 映像模式 映像模式定義了將邏輯單位轉(zhuǎn)化為設(shè)備的度量單位以及設(shè)備的x方向和y方向,程序員可在一個統(tǒng)一的邏輯坐標系中操作而不必考慮輸出設(shè)備的坐標系情況,窗口:對應(yīng)邏輯坐標系上程序員設(shè)定的區(qū)域 視口:對應(yīng)實際輸出設(shè)備上程序員設(shè)定的區(qū)域,窗口和視口 如何映射?,坐標系統(tǒng),邏輯坐
5、標系統(tǒng),設(shè)備坐標系統(tǒng),應(yīng)用程序可獲取設(shè)備環(huán)境的當(dāng)前映像模式,并根據(jù)需要設(shè)置映像模式。,相關(guān) 函數(shù),設(shè)置設(shè)備環(huán)境的映像模式 SetMapMode(hdc,nMapMode); nMapMode為映像模式的整型標識符,獲取當(dāng)前設(shè)備環(huán)境的映像模式 nMapMode=GetMapMode(hdc);,窗口區(qū)域的定義由SetWindowExtEx函數(shù)完成,其函數(shù)原型形為:BOOL SetWindowExtEx ( HDC hdc, int nHeight,nWidth, /以邏輯單位表示的窗口區(qū)域高寬度 LPSIZE lpSize, /函數(shù)調(diào)用前窗口區(qū)域尺寸的SIZE結(jié)構(gòu)地址 );,視口區(qū)域的定義由Se
6、tViewportExtEx函數(shù)完成,函數(shù)原型為: BOOL SetViewportExtEx ( HDC hdc, int nHeight,nWidth,/以物理設(shè)備單位表示的新視口區(qū)域高寬度 LPSIZE lpSize );,只有在映射模式為 MM_ANISOTROPIC 和MM_ISOTROPIC 時才有意義,視口的缺省原點和窗口的缺省原點均為(0,0)??赏ㄟ^調(diào)用函數(shù)SetViewportOrgEx和SetWindowOrgEx設(shè)定窗口與視口的原點。 SetWindowOrgEx函數(shù)的原形為: BOOL SetWindowOrgEx ( HDC hdc, int X,Y,/以邏輯單位表
7、示的窗口原點坐標 LPPOINT lpPoint/函數(shù)調(diào)用前原點坐標的POINT結(jié)構(gòu)的地址 );,只有在映射模式為 MM_ANISOTROPIC 和MM_ISOTROPIC 時才有意義,二、繪圖工具與顏色,1. 畫筆,(1) 畫筆的創(chuàng)建 使用畫筆之前必須事先定義一個畫筆句柄。形式如下: HPEN hP; 然后調(diào)用函數(shù)GetStockObject獲取Windows系統(tǒng)定義的四種畫筆例如獲取畫筆BLACK_PEN的形式如下: hP=GetStockObject(BLACK_PEN);,WHITE_PEN BLACK_PEN DC_PEN NULL_PEN,(2) 創(chuàng)建新畫筆,形式如下: hP=Cr
8、eatePen ( int nPenStyle,/確定畫筆樣式 int nWidth, /畫筆寬度 COLORREF rgbColor /畫筆顏色 );,創(chuàng)建畫筆后,必須調(diào)用SelectObject函數(shù)將其選入設(shè)備環(huán)境。 SelectObject(hdc,hP); /hP為所創(chuàng)建或獲取的畫筆句柄,不再使用當(dāng)前畫筆時,需刪除畫筆,以免占內(nèi)存 DeleteObject(hP);,PS_DASH:虛線 PS_DASHDOT:點劃線 PS_DASHDOTDOT:雙點劃線 PS_DOT:點線 PS_INSIDEFRAME:實線 PS_NULL:無 PS_SOLID:實線,2. 畫刷 畫刷的創(chuàng)建與應(yīng)用與畫
9、筆很相似,操作畫刷也包括創(chuàng)建、選入設(shè)備環(huán)境和刪除。 (1) 畫刷的創(chuàng)建 使用畫刷需事先定義一個畫刷句柄。形式如下: HBRUSH hBr; /hBr為畫刷句柄 然后調(diào)用函數(shù)GetStockObject獲取Windows系統(tǒng)提供的7種畫刷 hBr=(HBRUSH)GetStockObject(nBrushStyle)畫刷樣式,BLACK_BRUSH黑色畫刷 DKGRAY_BRUSH深灰色畫刷 GRAY_BRUSH灰色畫刷 HOLLOW_BRUSH虛畫刷 LTGRAY_BRUSH亮灰色畫刷 NULL_BRUSH空畫刷 WHITE_BRUSH白色畫刷,指定顏色畫 刷如何獲得?,可調(diào)用函數(shù)Create
10、SolidBrush和CreateHatchBrush創(chuàng)建畫刷, hBr=CreateSolidBrush(rgbColor);,創(chuàng)建具有 指定顏色 的單色畫刷,創(chuàng)建指定陰 影圖案和顏 色的畫刷,(2) 選入設(shè)備環(huán)境 創(chuàng)建畫刷后, 通過SelectObject(hdc,hBr);將其選入設(shè)備環(huán)境 (3) 刪除畫刷 不使用畫刷時,可用DeleteObject(hBr);刪除畫刷,釋放內(nèi)存,3. 顏色,Windows使用宏RGB定義繪圖的顏色,其形式為: RGB(nRed, nGreen,nBlue),紅色值,藍色值,綠色值,RGB(255,0,0),RGB(0,255,0),RGB(0,0,25
11、5),三、 常用繪圖函數(shù),1設(shè)置畫筆當(dāng)前位置的函數(shù)MoveToEx, BOOL MoveToEx (HDC hdc, int X,Y,/ X、Y分別為新位置的邏輯坐標 LPPOINT lpPoint/存放原畫筆位置的POINT結(jié)構(gòu)地址 ),2 從當(dāng)前位置向指定坐標點畫直線的函數(shù)LineToEx, BOOL LineToEx(HDC hdc,int X,int Y) /X和Y為線段的終點坐標,3 從當(dāng)前位置開始,依次用線段連接lpPoints中指定的各點 BOOL Polyline ( HDC hdc, LPPOINT lpPoints, /指向包含各點坐標的POINT結(jié)構(gòu)數(shù)組的指針 int n
12、Count / nCount為POINT數(shù)組中點的個數(shù) ),4 繪制橢圓弧線的函數(shù)Arc, BOOL Arc ( HDC hdc, int X1,intY1,/邊框矩形左上角的邏輯坐標 int X2,int Y2,/邊框矩形右下角的邏輯坐標 int X3,int Y3,/橢圓弧起始點坐標 int X4,int Y4/橢圓弧終止點坐標 ),5 繪制餅圖,并用當(dāng)前畫刷進行填充 BOOL Pie ( HDC hdc, int X1,intY1,/邊框矩形左上角的邏輯坐標 int X2,int Y2,/邊框矩形右下角的邏輯坐標 int X3,int Y3,/橢圓弧起始經(jīng)線的確定點坐標 int X4,i
13、nt Y4/橢圓弧終止經(jīng)線的確定點坐標 ),6 繪制矩形,并用當(dāng)前畫刷進行填充 BOOL Rectangle(HDC hdc,int X1,int Y1,int X2,int Y2),(X1,Y1)和(X2,Y2)分別為矩形的左上角和右下角的邏輯坐標,7 繪制圓角矩形,并用當(dāng)前畫刷填充 BOOL RoundRect (HDC hdc,int X1,int Y1,int X2,int Y2, int nHeight, int nWidth),圓角的高度和寬度,8 繪制橢圓,并用當(dāng)前畫刷填充 BOOL Ellipse(HDC hdc,intX1,intY1,intX2,intY2),9繪制多邊形,
14、并用當(dāng)前畫刷填充 BOOL Polygon(HDC hdc,LPPOINT lpPoints,int nCount),包含各點坐標的 POINT數(shù)組的地址,多邊形點的個數(shù),四、 應(yīng)用實例 【例4-1】利用繪圖函數(shù)創(chuàng)建填充區(qū)。共有三個填充圖形,第一個是用深灰色畫刷填充帶圓角的矩形,第二個是采用亮灰色畫刷填充一個橢圓型圖,第三個是用虛畫刷填充餅形圖。,#include #include #include long WINAPI WndProc ( HWND hWnd, UINT iMessage, UINT wParam, LONG lParam );,使用虛畫刷填充時,看不出填充效果!,BOOL
15、 InitWindowsClass(HINSTANCE hInstance); BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);,int WINAPI WinMain/主函數(shù) ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) MSG Message; if(!InitWindowsClass(hInstance)return FALSE; if(!InitWindows(hInstance,nCmdShow)return FALSE;
16、 while(GetMessage( ,long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam) HDC hDC; /定義指向設(shè)備的句柄 HBRUSH hBrush; /定義指向畫刷的句柄 HPEN hPen;/定義指向畫筆的句柄 PAINTSTRUCT PtStr;/定義指向包含繪圖信息的結(jié)構(gòu)體變量,消息處理函數(shù),switch(iMessage) /處理消息 case WM_PAINT: /處理繪圖消息 hDC=BeginPaint(hWnd, /采用亮灰色畫刷,下面只改變畫刷,不改變筆,SelectObjec
17、t(hDC,hBrush); /選擇畫刷 Ellipse(hDC,150,50,200,150); /繪制橢圓 hBrush=(HBRUSH)GetStockObject(HOLLOW_BRUSH); /虛畫刷 SelectObject(hDC,hBrush); /選擇畫刷 Pie(hDC,250,50,300,100,250,50,300,50); /繪制餅形 EndPaint(hWnd, ,BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)/初始化窗口 HWND hWnd; hWnd=CreateWindow(WinFill, /生成窗口
18、填充示例程序, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if(!hWnd)return FALSE; ShowWindow(hWnd,nCmdShow);/顯示窗口 UpdateWindow(hWnd); return TRUE; ,BOOL InitWindowsClass(HINSTANCE hInstance)/定義窗口類 WNDCLASS WndClass; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; Wn
19、dClass.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|CS_VREDRAW; ret
20、urn RegisterClass( ,例4-2: 應(yīng)用畫筆和畫刷等工具繪制如圖所示的圖形,1 #include 2 #include 3 #include 4 long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); 5 BOOL InitWindowsClass(HINSTANCE hInstance); 6 BOOL InitWindows(HINSTANCE hInstance,int nCmdShow); 7 /主函數(shù) 8 int WINAPI WinMain(HINSTANCE hInstance,
21、HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) 9 MSG Message; 10if(!InitWindowsClass(hInstance)return FALSE; 11if(!InitWindows(hInstance,nCmdShow)return FALSE; 12while(GetMessage( ,long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) 1 HDC hDC; /定義設(shè)備環(huán)境句柄 2 HBRUSH hBrush; /定義畫刷
22、的句柄 3 HPEN hPen;/定義畫筆的句柄 4 PAINTSTRUCT PtStr; /定義指向包含繪圖信息的結(jié)構(gòu)體變量 /定義一個POINT數(shù)組,包括6個點 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,1 Polyline(hDC,points,6); /畫一個五邊形 2Arc(hDC,63,137,138,212,100,137,100,137); /畫一個圓
23、3Pie(hDC,213,137,288,212,240,137,260,137); /畫一個圓餅 4Rectangle(hDC,213,212,287,250); /畫一個長方形 5RoundRect(hDC,213,100,287,137,20,20); /畫一個圓角長方形 6DeleteObject(hPen); /刪除畫筆 7DeleteObject(hBrush); /刪除畫刷 8EndPaint(hWnd, ,BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) /初始化窗口 HWND hWnd; hWnd=CreateWindow(
24、WinFill, /生成窗口 填充示例程序, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd,nCmdShow);/顯示窗口 UpdateWindow(hWnd); return TRUE; ,BOOL InitWindowsClass(HINSTANCE hInstance) /定義窗口類 WNDCLASS WndClass; WndClass.cbClsExtra=0; WndClass
25、.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; WndClass.lpszMenuName=NULL; WndClass.style=CS_HREDRA
26、W|CS_VREDRAW; return RegisterClass( ,【例4-3】設(shè)置映射與使用映射模式。程序的初始階段按模式MM_TEXT繪圖,用戶單擊鼠標以改變映射模式,單擊左鍵,產(chǎn)生WM_LBUTTONDOWN消息,通知應(yīng)用程序設(shè)置映射模式為ISOTROPIC,并調(diào)用InvalidateRect函數(shù)刷新用戶區(qū),在用戶單擊鼠標右鍵時,產(chǎn)生WM_RBUTTONDOWN消息,應(yīng)用程序?qū)?映射模式設(shè)置成 ANSIOTROPIC, 同時刷新用戶區(qū)。,LRESULT CALLBACK WndProc(,) HDC hdc; PAINTSTRUCT ps; HBRUSH hB1,hB2; swit
27、ch(message) case WM_LBUTTONDOWN:/單擊鼠標左鍵的消息 nMode=MM_ISOTROPIC;/更改映射模式為MM_ISOTROPIC InvalidateRect(hwnd,NULL,1);/刷新用戶區(qū) break; case WM_RBUTTONDOWN:/單擊鼠標右鍵消息 nMode=MM_ANISOTROPIC;/更改顯示模式為MM_ANISOTROPIC InvalidateRect(hwnd,NULL,1);/刷新用戶區(qū) break;,case WM_PAINT: hdc=BeginPaint(hwnd,【例4-4】編寫一個程序,在屏幕上出現(xiàn)一個圓心沿
28、正弦曲線軌跡移動的實心圓,而且,每隔四分之一周期,圓的填充色和圓的周邊顏色都發(fā)生變化,同時,圓的半徑在四分之一周期之內(nèi)由正弦曲線幅值的0.2倍至0.6倍線性增長。,(1) 正弦曲線是此題的基礎(chǔ)。在WndMain()函數(shù)消息循環(huán)前,生成正弦曲線各點的坐標。把正弦曲線一個周期的橫坐標分成100個等分點,存儲在數(shù)組lpSin100中,100個點的坐標計算如下:,for(int j=0;j100;j+)/生成正弦曲線的點坐標 lpSinj.x=(long)(j*2*Pi/100*60); lpSinj.y=(long)(dfRange*sin(j*2*Pi/100); ,(2) 動態(tài)顯示圓在正弦曲線上
29、移動,數(shù)組lpSin100的長度為100,設(shè)定圓在正弦曲線移動時共有100個位置,數(shù)組中每一個值是圓移動時圓心的坐標,每四分之一周期有25個位置,i=25處于第1個1/4周期,創(chuàng)建紅色畫筆和畫刷;25i50處于第2個1/4周期,創(chuàng)建綠色畫筆和畫刷;50i75處于第3個1/4周期,創(chuàng)建藍色畫筆和畫刷;75i100處于第4個1/4周期,創(chuàng)建黃色畫筆和畫刷;,if(i=25) /第一個1/4周期 hPen=CreatePen(PS_DASH,1,RGB(255,0,0); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0); lRadious=(lon
30、g)(dfRange*0.2+i%25*dfRange*0.4/25);/計算半徑 ,在消息WM_PAINT處理程序中,調(diào)用函數(shù)BeginPaint()獲得設(shè)備環(huán)境句柄。由此經(jīng)過線性差分計算圓半徑的大小lRadious,第1個1/4周期的程序代碼如下:,創(chuàng)建的畫筆和畫刷選入設(shè)備環(huán)境后,調(diào)用函數(shù)Ellipse()繪制圓形下面這段代碼是動態(tài)顯示的關(guān)鍵: Sleep(100);/停0.1秒 if(i100) InvalidateRect(hWnd,NULL,1);/刷新用戶區(qū) 調(diào)用Sleep(100)函數(shù)使程序暫停0.1秒。所含參數(shù)100代表暫停的時間,使用毫秒作單位。,i100時調(diào)用函數(shù)刷新用戶區(qū)
31、發(fā)送WM_PAINT消息,消息發(fā)到的 窗口的句柄,代表刷新 整個用戶區(qū),代表清除用戶區(qū)中 所有的顯示內(nèi)容,#include #include #include #include #define Pi 3.1415926 long WINAPI WndProc(HWND hWnd,UINT 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); /定義圓心
32、坐標和圓半徑. POINT lpSin100;/定義正弦曲線的點坐標. int WINAPI WinMain(,.) / 填寫窗口類屬性 if(!RegisterClass(,hWnd=CreateWindow (SIN,/窗口類名. 4_6,/標題名. WS_OVERLAPPEDWINDOW,/帶標題欄,最大/小按鈕的窗口 CW_USEDEFAULT,/窗口左上角坐標. 0, CW_USEDEFAULT,/采用缺省的寬度和高度. 0, NULL,/無父窗口. NULL,/無主菜單. hInstance,/當(dāng)前實例句柄. NULL);. ShowWindow(hWnd,nCmdShow);/顯
33、示窗口. UpdateWindow(hWnd);/更新并繪制用戶區(qū).,1.for(int j=0;j100;j+)/生成正弦曲線的點坐標. 2. 3.lpSinj.x=(long)(j*2*Pi/100*60); 4.lpSinj.y=(long)(dfRange*sin(j*2*Pi/100); 5. 6.while(GetMessage( ,long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam) 1.HDC hDC;/定義設(shè)備環(huán)境句柄. 2.HBRUSH hBrush;/定義畫刷句柄 3.HPEN hPen
34、;/定義畫筆句柄 4.PAINTSTRUCT PtStr;/定義包含繪圖信息的結(jié)構(gòu)體變量 5.switch(iMessage) 6. case WM_PAINT:/處理繪圖消息 7.hDC=BeginPaint(hWnd,/繪制正弦曲線,if(i=25) /第一個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); /計算半徑 ,else if(i=50)/
35、第二個1/4周期. hPen=CreatePen(PS_DASH,1,RGB(0,255,0); hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25); ,else if(i=75)/第三個周期. hPen=CreatePen(PS_DASH,1,RGB(0,0,255); hBrush=CreateHatchBrush(HS_CROSS,RGB(0,0,255); lRadious=(long)(dfRange*0.2+i%25*dfRange*0
36、.4/25); ,else/第四個周期. hPen=CreatePen(PS_DASH,1,RGB(255,255,0); hBrush=CreateHatchBrush(HS_VERTICAL,RGB(255,255,0); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25); ,1.SelectObject(hDC,hBrush);/選入畫刷. 2.SelectObject(hDC,hPen);/選入畫筆. 3.lCentreX=lpSini.x;/圓心x坐標. 4.lCentreY=lpSini.y;/圓心y坐標. 5.Ellipse(hDC
37、,lCentreX-lRadious,lCentreY-lRadious, lCentreX+lRadious,lCentreY+lRadious); /畫圓 6.i+; 7.DeleteObject(hPen);/刪除畫筆 8.DeleteObject(hBrush);/刪除畫刷 9.EndPaint(hWnd, ,【例4-5】繪圖與刷新。制訂一種重新繪制圖形的刷新方式,將圖形繪制模塊放在消息WM_PAINT的處理過程中,當(dāng)窗口需要刷新時,通知窗口函數(shù)重新繪制圖形以完成刷新工作。本例要求先使用畫筆和畫刷繪制一個矩形,然后使用紅色網(wǎng)格繪制一個橢圓,再使用綠色點劃線繪制橢圓的軸線。,#inclu
38、de #include #include #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) HWND hwnd;MSG Msg;WNDCLASS wndclass; char lpszClassName = 基本繪圖; char lpszTitle= My_Drawing; wndclass.style = 0; /填寫屬性 wndclass.lpszClassName = lpszClassName ;,if(!RegisterClass( ,hwnd = CreateWindow(,); ShowWindow(hwnd, nCmdS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年保密知識競賽試題庫(含答案)
- 保姆面試題及答案大全
- 老碼頭拆除方案
- 【歷史】改革開放的起步教學(xué)課件 2025-2026學(xué)年統(tǒng)編版八年級歷史下冊
- 2026年注冊會計師財務(wù)報告分析模擬試卷
- 2026年安康旬陽某單位基層工作人員招聘備考題庫(4人)完整參考答案詳解
- 2026年上海閔行職業(yè)技術(shù)學(xué)院教師招聘備考題庫及參考答案詳解1套
- 2026江西省歐潭人力資源集團有限公司招聘見習(xí)生3人備考題庫有答案詳解
- 2026山東青島海明城市發(fā)展有限公司全資子公司第一批招聘1人備考題庫參考答案詳解
- 2026上半年云南事業(yè)單位聯(lián)考德宏州招聘教師214人備考題庫及答案詳解(新)
- 交通運輸安全檢查與處理規(guī)范(標準版)
- UCL介紹教學(xué)課件
- 廣東省衡水金卷2025-2026學(xué)年高三上學(xué)期12月聯(lián)考物理試題(含答案)
- 扁鵲凹凸脈法課件
- 2026年開封大學(xué)單招職業(yè)適應(yīng)性測試題庫及完整答案詳解1套
- 北京市2025北京市體育設(shè)施管理中心應(yīng)屆畢業(yè)生招聘2人筆試歷年參考題庫典型考點附帶答案詳解(3卷合一)2套試卷
- 建筑施工現(xiàn)場材料采購流程
- DB31∕T 1234-2020 城市森林碳匯計量監(jiān)測技術(shù)規(guī)程
- 園林綠化施工工藝及注意事項
- 2025年高中語文必修上冊《登泰山記》文言文對比閱讀訓(xùn)練(含答案)
- 2025年金蝶AI蒼穹平臺新一代企業(yè)級AI平臺報告-
評論
0/150
提交評論