燕山大學(xué)-windows-程序設(shè)計(jì)-實(shí)驗(yàn)報(bào)告_第1頁
燕山大學(xué)-windows-程序設(shè)計(jì)-實(shí)驗(yàn)報(bào)告_第2頁
燕山大學(xué)-windows-程序設(shè)計(jì)-實(shí)驗(yàn)報(bào)告_第3頁
燕山大學(xué)-windows-程序設(shè)計(jì)-實(shí)驗(yàn)報(bào)告_第4頁
燕山大學(xué)-windows-程序設(shè)計(jì)-實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Windows 程序設(shè)計(jì)基于Windows API的簡(jiǎn)單繪圖軟件 目錄1 .概述22.工作區(qū)窗口52.1 hWorkWnd窗口的產(chǎn)生52.2結(jié)構(gòu)體定義52.3 文件中函數(shù)定義52.4圖形的繪制63.工具條的實(shí)現(xiàn)93.1 資源編輯93.2 工具條窗口的產(chǎn)生93.3工具欄按鈕效果的實(shí)現(xiàn)93.4消息傳遞114. 調(diào)色板的創(chuàng)建124.1窗口產(chǎn)生124.2調(diào)色功能實(shí)現(xiàn)124.2 消息處理135.保存與打開功能的實(shí)現(xiàn)145.1保存與打開窗口145.2保存功能145.3打開功能156.總結(jié)161 .概述1.1工程簡(jiǎn)介及窗口框架 項(xiàng)目中一共建立了四個(gè)窗口,其中類名為szWindowClass的窗口是父窗口,工

2、作區(qū)窗口(szWorkClass)、工具欄(szToolbarClass)以及調(diào)色板(szColorbarClass)是子窗口。工作區(qū)窗口主要實(shí)現(xiàn)基本的繪圖功能,工具欄和調(diào)色板分別實(shí)現(xiàn)繪圖工具和顏色的選擇功能。另外,為了方便消息的傳遞,將工作區(qū)窗口的句柄hWorkWnd設(shè)為全局變量。 項(xiàng)目中MyDrawProj.cpp文件實(shí)現(xiàn)主窗口框架的產(chǎn)生及消息處理,function.h和function.cpp實(shí)現(xiàn)基本圖形的繪制功能,toolbar.h和 toolbar.cpp完成工具欄的產(chǎn)生和消息處理,color.h 和color.cpp實(shí)現(xiàn)調(diào)色板功能和消息處理。最后file.h和file.cpp完成圖

3、像的保存和打開功能主界面截圖:1.2 GDI(Graphic Device Interface)繪圖概述圖形設(shè)備接口(GDI)處理來自windows應(yīng)用程序的圖形函數(shù)調(diào)用,然后把這些調(diào)用傳遞給合適的設(shè)備驅(qū)動(dòng)程序,由設(shè)備驅(qū)動(dòng)程序來執(zhí)行與硬件相關(guān)的函數(shù),并產(chǎn)生最后的輸出結(jié)果。設(shè)備描述表(DC)是一種windows數(shù)據(jù)結(jié)構(gòu),它包含了與一個(gè)設(shè)備(如顯示器)的繪制屬性的相關(guān)信息。所有的繪制操作通過一個(gè)設(shè)備上下文對(duì)象進(jìn)行,該對(duì)象封裝了實(shí)現(xiàn)繪制線條,矩形,橢圓等圖形windows API函數(shù)。設(shè)備上下文可以用來向屏幕,打印機(jī)和圖元件輸入結(jié)果。1.3 實(shí)現(xiàn)繪圖的基本原理實(shí)驗(yàn)中通過對(duì)API函數(shù)的調(diào)用實(shí)現(xiàn)基本圖形

4、的繪制,由于窗口大小發(fā)生改變或者客戶區(qū)無效時(shí)發(fā)生重繪,故采用雙緩沖技術(shù)繪圖,即在內(nèi)存中創(chuàng)建一個(gè)與屏幕繪圖區(qū)域一致的對(duì)象,先將圖形繪制到內(nèi)存中的這個(gè)對(duì)象上,再一次性將這個(gè)對(duì)象上的圖形拷貝到屏幕上,這樣在保持繪圖的同時(shí)還可以避免閃爍。工具欄和調(diào)色板的選擇可通過SendMessage函數(shù)將用戶的選擇傳到工作區(qū)窗口處理,從而畫出不同顏色的不同圖形。通過對(duì)添加bmp文件頭將畫布保存為bmp圖像實(shí)現(xiàn)文件的保存功能,通過把打開的bmp圖像拷貝到當(dāng)前工作區(qū)實(shí)現(xiàn)打開功能,使用OPENFILENAME結(jié)構(gòu)彈出打開和保存對(duì)話框。使用一個(gè)比當(dāng)前工作區(qū)大以及背景顏色一樣的矩形填充當(dāng)前工作區(qū),實(shí)現(xiàn)對(duì)圖像的清除功能。1.4

5、相關(guān)的基本數(shù)據(jù)類型和函數(shù)1.顯示窗口的步驟1.注冊(cè)窗口類typedef struct WNDCLASSEX UINT cbSize; /結(jié)構(gòu)的大小UINT style; /窗口風(fēng)格WNDPROC lpfnWndProc; /窗口函數(shù)指針,指向消息處理函數(shù)int cbClsExtra; int cbWndExtra;HINSTANCE hInstance; /實(shí)例句柄HICON hIcon; /圖標(biāo)HCURSOR hCursor; /光標(biāo)HBRUSH hbrBackground; /背景畫刷LPCTSTR lpszMenuName; /菜單LPCTSTR lpszClassName; /窗口類名

6、稱HICON hIconSm; /窗口圖標(biāo) WNDCLASSEX, *PWNDCLASSEX;2.創(chuàng)建窗口HWND CreateWindow(LPCTSTR lpClassName, /窗口類名LPCTSTR lpWindowName, /窗口標(biāo)題DWORD dwStyle, /指定創(chuàng)建窗口的風(fēng)格int x, /指定窗口的初始水平位置int y, /指定窗口的初始垂直位置int nWidth,/窗口的寬度int nHeight, /窗口的高度HWND hWndParent, /窗口的父窗口HMENU hMenu, /菜單句柄HANDLE hlnstance,/與窗口相關(guān)聯(lián)的模塊實(shí)例的句柄LPV

7、OID lpParam);3.顯示窗口ShowWindow(HWND hWnd, int nCmdShow);hWnd指窗口句柄,nCmdShow指定窗口如何顯示,可取SW_HIDE、SW_SHOW等。4.更新客戶區(qū)UpdateWindow(HWND hWnd);5.進(jìn)入消息循環(huán)WM_CREATE、WM_PAINT、WM_SIZE等消息的處理2.菜單、圖標(biāo)和位圖 菜單 LoadMenu(HINSTANCE hlnstance,LPCTSTR lpMenuName)圖標(biāo) LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName)位圖 LoadImage(HI

8、NSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int cyDesired,UINT fuLoad)3. 簡(jiǎn)單GDI繪圖函數(shù).直線MoveToEx(HDC hdc,int x,int y, LPPOINTlpPoint);LineTo(HDC hdc,int x,int y);2.矩形Rectangle(HDC hdc,int nLeftRect,int nTopRect, int nRightRect, int nBottomRect)3.橢圓Ellipse(HDC hdc, int nLeftRect, int nTopRec

9、t, int nRightRect, int nBottomRect)2.工作區(qū)窗口2.1. hWorkWnd窗口的產(chǎn)生 (1)在主窗口的WM_CREATE中初始化窗口 hWorkWnd=CreateWindowEx(WS_EX_TRANSPARENT, szWorkClass, NULL,WS_CHILD ,0, 0, 0,0,hWnd,NULL, hInst, NULL);if(!hWorkWnd)MessageBox(hWnd,_T(創(chuàng)建工作區(qū)?失敗),NULL,NULL);ShowWindow(hWorkWnd,SW_SHOW);(2)在主窗口WM_SIZE中添加代碼使工作區(qū)窗口占滿客

10、戶區(qū)SetWindowPos(hWorkWnd,NULL,2,2,LOWORD(lParam)-2*2,HIWORD(lParam)-2*2,SWP_NOACTIVATE | SWP_NOZORDER); SetFocus(hWorkWnd);2.2結(jié)構(gòu)體定義typedef struct tagDRAWSTRUbool bDrawing; /工作區(qū)是否在繪圖的標(biāo)志POINT PtStart; /起點(diǎn)POINT PtEnd; /終點(diǎn)POINT PtPrev; /前一個(gè)點(diǎn)HPEN hpen; /當(dāng)前選中的畫筆HPEN hOldPen; /返回的畫筆DWORD Color; /當(dāng)前選中的顏色DRAW

11、STRU ,*PDRAWSTRU;2.3 function文件中函數(shù)定義/定義函數(shù)指針類型 typedef void (*PDRAWFUN) (PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/繪制直線void LineMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void LineMouseMove(PDRAWSTRU pDrawStruc,HWND

12、 hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void LineMouseDown(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/繪制矩形void RectMouseDown(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void RectMouseMove(PDRAWSTRU pDrawStruc

13、,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void RectMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/繪制橢圓void CircleMouseDown(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void CircleMouseMove(PDRAWSTRU pDr

14、awStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void CircleMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/繪制線條void CurveMouseDown(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void CurveMouseMove(PDRAWS

15、TRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void CurveMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/畫刷void BrushMouseDown(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void BrushMouseMove(PD

16、RAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void BrushMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);2.4 圖形的繪制(1)基本原理鼠標(biāo)按下時(shí),即產(chǎn)生WM_LBUTTONDOWN消息時(shí)記錄鼠標(biāo)按下點(diǎn)的坐標(biāo),鼠標(biāo)移動(dòng)產(chǎn)生WM_MOUSEMOVE時(shí)進(jìn)行相應(yīng)繪制,為實(shí)現(xiàn)橡皮筋效果需要改變繪圖模式,將上一次所畫圖像用背景色擦掉。鼠標(biāo)彈起產(chǎn)生WM_LB

17、UTTONUP消息,記錄相應(yīng)坐標(biāo)繪制圖形。 另外,處在屏幕繪圖外,還要在Windows內(nèi)存DC中實(shí)現(xiàn)相同操作以保持繪圖。(2)主要代碼(以繪制矩形)1.鼠標(biāo)按下操作void RectMouseDown(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam)pDrawStruc-bDrawing=TRUE;pDrawStruc-PtStart.x=LOWORD(lParam);pDrawStruc-PtStart.y=HIWORD(lParam);pDrawStruc-PtEnd=pDraw

18、Struc-PtStart;2.鼠標(biāo)移動(dòng)void RectMouseMove(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam)HDC phdc; phdc=GetDC(hWnd); /屏幕DCpDrawStruc-hpen=CreatePen(PS_SOLID ,0,pDrawStruc-Color );/創(chuàng)建畫筆pDrawStruc-hOldPen=(HPEN)SelectObject(hdc,pDrawStruc-hpen);/選入設(shè)備上下文SelectObject(phdc,p

19、DrawStruc-hpen);if(pDrawStruc-bDrawing)/當(dāng)前正在繪圖SetCapture(hWnd);/捕獲鼠標(biāo)SetROP2(hdc,R2_NOTXORPEN);/改變繪圖SelectObject(hdc,GetStockObject(NULL_BRUSH);SetROP2(phdc,R2_NOTXORPEN);SelectObject(phdc,GetStockObject(NULL_BRUSH);/擦掉鼠標(biāo)上次移動(dòng)繪制的圖形ectangle(hdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd

20、.x,pDrawStruc-PtEnd.y);Rectangle(phdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);/獲得新的點(diǎn)pDrawStruc-PtEnd.x=LOWORD(lParam);pDrawStruc-PtEnd.y=HIWORD(lParam); /繪制新的圖形 Rectangle(hdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);Rec

21、tangle(phdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);SelectObject (hdc , pDrawStruc-hOldPen);SelectObject (phdc , pDrawStruc-hOldPen);DeleteObject (pDrawStruc-hpen);ReleaseDC(hWnd,phdc); /釋放DC3.鼠標(biāo)彈起void RectMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT M

22、essage,WPARAM wParam,LPARAM lParam) HDC phdc;phdc=GetDC(hWnd); /獲得屏幕DC/創(chuàng)建畫筆并選入pDrawStruc-hpen=CreatePen(PS_SOLID ,0,pDrawStruc-Color );pDrawStruc-hOldPen=(HPEN)SelectObject(hdc,pDrawStruc-hpen);SelectObject(phdc,pDrawStruc-hpen);/改變繪圖模式SetROP2(hdc,R2_COPYPEN);SelectObject(hdc,GetStockObject(NULL_BRU

23、SH);SetROP2(phdc,R2_COPYPEN);SelectObject(phdc,GetStockObject(NULL_BRUSH);Rectangle(hdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);Rectangle(phdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);/繪制新的圖形pDrawStruc-PtEnd.x=LOWORD(lP

24、aram);pDrawStruc-PtEnd.y=HIWORD(lParam);Rectangle(hdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);Rectangle(phdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);pDrawStruc-bDrawing=false;/鼠標(biāo)彈起停止繪圖SelectObject (hdc , pDrawStruc-hOl

25、dPen);SelectObject (phdc , pDrawStruc-hOldPen);DeleteObject (pDrawStruc-hpen);/釋放DC和捕獲ReleaseCapture();ReleaseDC(hWnd,phdc);注:由于繪制直線和矩形與之相似,不再贅述,繪制連續(xù)線條時(shí),只需保存前一個(gè)點(diǎn)然后再畫便可實(shí)現(xiàn)連續(xù)效果,另外由于還得再內(nèi)存畫圖,故需要在hdc和phdc上執(zhí)行相同的繪圖操作。3.工具條的實(shí)現(xiàn)3.1資源編輯 工具欄的每一個(gè)圖標(biāo)都對(duì)應(yīng)兩個(gè)位圖,鼠標(biāo)按下和彈起對(duì)應(yīng)不同的位圖從而實(shí)現(xiàn)按鈕效果,資源列表如下#define IDB_BRUSHDOWN 140#def

26、ine IDB_CIRCLEDOWN 141#define IDB_LINEDOWN 142#define IDB_PENDOWN 143#define IDB_RECTDOWN 144#define IDB_BRUSHUP 145#define IDB_CIRCLEUP 146#define IDB_LINEUP 147#define IDB_PEN_UP 148#define IDB_RECTUP 1493.2.工具欄窗口的產(chǎn)生 void CreateStandardToolbar(HWND hParent,HINSTANCE hInst)if(!RegistToolbar(hInst)

27、return;HWND hWnd=CreateWindow(szToolbarClass,_T(工具欄),WS_POPUP | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU ,600, 100, 155, 55,hParent,NULL, hInst, NULL);ShowWindow(hWnd,SW_SHOW);在主窗口的WM_CREATE消息中調(diào)用以上函數(shù)產(chǎn)生工具欄窗口3.3工具欄按鈕效果的實(shí)現(xiàn)(1)基本原理初始化時(shí)將所有彈起時(shí)的位圖選入設(shè)備描述句柄,并拷貝到窗口對(duì)應(yīng)的矩形區(qū)域,當(dāng)鼠標(biāo)按下時(shí),在指定位置拷貝新的位圖將原位圖覆蓋即可實(shí)現(xiàn)按鈕效果(2)結(jié)構(gòu)

28、體和數(shù)組BUTTON Buttons = IDB_PENDOWN,IDB_PEN_UP,IDB_LINEDOWN,IDB_LINEUP,IDB_BRUSHDOWN,IDB_BRUSHUP,IDB_CIRCLEDOWN,IDB_CIRCLEUP, IDB_RECTDOWN,IDB_RECTUP; /定義一個(gè)Button數(shù)組保存按鈕位圖的IDtypedef struct tagBUTTON INT DownID; /鼠標(biāo)按下的位圖 INT UpID; /鼠標(biāo)彈起的位圖BUTTON,*PBUTTON;(3)實(shí)現(xiàn)的部分代碼case WM_PAINT:hdc = BeginPaint(hWnd, &ps

29、);HDC hdcMem;hdcMem=CreateCompatibleDC(hdc);/創(chuàng)建內(nèi)存兼容DCHBITMAP hbmp,hbmpOld; for(int i=0;i5;i+)if(Statei)hbmpOld=(HBITMAP)SelectObject(hdcMem,LoadBitmap(hInst,MAKEINTRESOURCE(Buttonsi.DownID);BitBlt(hdc,30*i,0,32,32,hdcMem,0,0,SRCCOPY);hbmp=(HBITMAP)SelectObject(hdcMem,hbmpOld);DeleteObject(hbmp);else

30、hbmpOld=(HBITMAP)SelectObject(hdcMem,LoadBitmap(hInst,MAKEINTRESOURCE(Buttonsi.UpID);BitBlt(hdc,30*i,0,32,32,hdcMem,0,0,SRCCOPY);hbmp=(HBITMAP)SelectObject(hdcMem,hbmpOld);DeleteObject(hbmp);EndPaint(hWnd, &ps);break;注: 將代碼放入WM_PAINT消息中,每當(dāng)有鼠標(biāo)在按鈕位置按下時(shí),指定窗口無效進(jìn)行重繪,實(shí)現(xiàn)動(dòng)態(tài)顯示。 State數(shù)組標(biāo)識(shí)按鈕的狀態(tài),Statei=true表示鼠標(biāo)

31、按下,Statei=false表示鼠標(biāo)彈起,從而根據(jù)State狀態(tài)選入響應(yīng)的位圖。3.4消息傳遞(1)實(shí)現(xiàn)原理 由鼠標(biāo)按下的點(diǎn)的位置計(jì)算出對(duì)應(yīng)的按鈕索引,自定義TOOL_CHANGE消息采用SendMessage將消息和整型的索引值傳遞給hWorkWnd窗口,由工作區(qū)窗口響應(yīng)做出響應(yīng)的繪圖處理。(2)部分代碼case WM_LBUTTONDOWN: index=LOWORD(lParam)/32; for(int i=0;i5;i+) if(i=index) Statei=true; else Statei=false;SendMessage(hWorkWnd,TOOL_CHANGE,inde

32、x,lParam);InvalidateRect(hWnd,NULL,TRUE);break;工作區(qū)窗口的處理:case TOOL_CHANGE: switch(int(wParam) case 0: /連續(xù)線條 Down=CurveMouseDown; Move=CurveMouseMove; Up=CurveMouseUp; break; case 1: /畫直線Down=LineMouseDown;Move=LineMouseMove;Up=LineMouseUp;break; case 2: /刷子 Down=BrushMouseDown; Move=BrushMouseMove; U

33、p=BrushMouseUp; break; case 3: /畫橢圓 Down=CircleMouseDown; Move=CircleMouseMove; Up=CircleMouseUp; break;4.調(diào)色板的實(shí)現(xiàn)4.1窗口的產(chǎn)生(1)注冊(cè)調(diào)色板窗口類,然后在主窗口的WM_CREATE消息中調(diào)用以下函數(shù)產(chǎn)生調(diào)色板窗口。void CreateColorbar(HWND hParent,HINSTANCE hInst) if(!RegistColorbar(hInst) MessageBox(hParent,_T(注冊(cè)顏色條失敗),NULL,NULL); HWND hWnd=Create

34、Window(szColorbarClass, _T(顏色板), WS_BORDER |WS_CAPTION|WS_SYSMENU ,200, 100, 250, 105,hParent,NULL, hInst, NULL);if(!hWnd)MessageBox(hParent,_T(創(chuàng)建顏色條失敗),NULL,NULL);ShowWindow(hWnd,SW_SHOW);(2)截圖4.2調(diào)色功能實(shí)現(xiàn)(1)創(chuàng)建顏色數(shù)組DWORD Colors= RGB(0,0,0), RGB(0,255,0), RGB(0,0,255), RGB(0,255,255), RGB(255,0,0),RGB(2

35、55,0,255),RGB(255,255,0),RGB(255,192,192);(2)實(shí)現(xiàn)原理 初始化時(shí),在指定位置繪制不用顏色的矩形,即為顏色板。鼠標(biāo)單擊響應(yīng)顏色時(shí),由鼠標(biāo)位置計(jì)算出對(duì)應(yīng)顏色數(shù)組里的顏色值,把相應(yīng)顏色選入設(shè)備描述表,并且在右側(cè)指定位置畫出相應(yīng)顏色的矩形。(3)部分代碼case WM_LBUTTONDOWN:x=LOWORD(lParam);y=HIWORD(lParam);if(x/404&y/402) /在有顏色的區(qū)域內(nèi)處理 index=x/40+y/40*4;/把用戶選擇的顏色交給工作區(qū)窗口處理SendMessage(hWorkWnd,COLOR_CHANGE,ind

36、ex,lParam); HBRUSH hbr1;HBRUSH hbrOld1;hdc=GetDC(hWnd);hbr1 = CreateSolidBrush(Colorsindex);hbrOld1 =(HBRUSH)SelectObject(hdc, hbr1); /右側(cè)繪制相應(yīng)顏色的矩形Rectangle(hdc, 175, 10, 235, 70);SelectObject(hdc, hbrOld1);DeleteObject(hbr1);ReleaseDC(hWnd,hdc);else break;break;case WM_PAINT:hdc = BeginPaint(hWnd, &

37、ps);HBRUSH hbr;HBRUSH hbrOld; /繪制不同顏色的矩形for(int i=0;i8;i+)hbr = CreateSolidBrush(Colorsi);hbrOld =(HBRUSH)SelectObject(hdc, hbr);Rectangle(hdc, i%4*40, i/4*40, i%4*40+40, i/4*40+40);if(i=0) Rectangle(hdc, 175, 10, 235, 70);SelectObject(hdc, hbrOld);DeleteObject(hbr);EndPaint(hWnd, &ps);break;4.3消息處理

38、 Color數(shù)組設(shè)置為全局變量,自定義消息COLOR_CHANGE,工作區(qū)窗口收到消息后,在DRAWSTRU數(shù)組中改變相應(yīng)的顏色進(jìn)行繪圖case COLOR_CHANGE:DrawStru.Color=Colors(int)wParam;break;5.保存與打開功能的實(shí)現(xiàn)5.1保存與打開窗口(1)實(shí)現(xiàn)方式 使用OPENFILENAME結(jié)構(gòu),GetOpenFileName和GetSaveFileName函數(shù)用來初始化打開或保存對(duì)話框的信息,獲得打開和保存路徑,做出相應(yīng)處理(2)截圖(3)部分代碼OPENFILENAME sfn;TCHAR szSaveFileMAX_PATH;ZeroMemory(&sfn,sizeof(sfn); /初始化置0sfn.lStructSize = sizeof(sfn);sfn.lpstrFile = szSaveFile;sfn.lpstrFile0 = TEXT(0);sfn.nMaxFile = sizeof(szSaveFile)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論