




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο缶幊碳夹g(shù)實(shí)驗(yàn)四實(shí)驗(yàn)報(bào)告班 級(jí):通信2 班學(xué) 號(hào):201000800212姓 名: 王煜瑩時(shí) 間:2012-10-20目錄1 實(shí)驗(yàn)要求32 實(shí)驗(yàn)過程及結(jié)果3A、對(duì)話框部分:3B、圖形繪制函數(shù)的使用5C、定時(shí)器使用103 問題及解決方案114 實(shí)驗(yàn)總結(jié)11附件12關(guān)鍵程序代碼12A、對(duì)話框部分:12B、自定義對(duì)話框:151 實(shí)驗(yàn)要求 掌握通用對(duì)話框和自定義對(duì)話框的使用;掌握?qǐng)D形繪制函數(shù)的使用;掌握定時(shí)器的設(shè)置和定時(shí)消息響應(yīng)。2 實(shí)驗(yàn)過程及結(jié)果A、對(duì)話框部分:1. 研究第五章示例程序,理解通用對(duì)話框、自定義對(duì)話框的使用方式,為本次實(shí)驗(yàn)打基礎(chǔ)。2. 在自己的工作目錄中建立新工程。從已有的示例程序中選取適當(dāng)?shù)拇a,修改形成自己的框架。代碼整理過程中要特別注意代碼的格式。源文件名后綴必須是.cpp,不可以是.c3. 增加對(duì)WM_PAINT消息的處理,在窗口客戶區(qū)輸出文本。case WM_PAINT: hdc = BeginPaint (hWnd, &ps); GetClientRect (hWnd, &rect);DrawText (hdc, TEXT (歡迎使用), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint (hWnd, &ps);return 0; 4. 增加菜單資源,要求至少包含“更改文本顏色”和“更改背景顏色”兩個(gè)命令。 5. 自定義一個(gè)簡(jiǎn)單的對(duì)話框,該對(duì)話框內(nèi)至少有一個(gè)“選擇背景色”按鈕和一個(gè)靜態(tài)文本框(或Edit框)以及確定、取消兩個(gè)按鈕。該簡(jiǎn)單對(duì)話框的處理邏輯為:點(diǎn)擊“選擇背景色”按鈕,彈出通用對(duì)話框選擇顏色,選擇完顏色后,將顏色值顯示到靜態(tài)文本框(或Edit框)中。再點(diǎn)擊該對(duì)話框的“確定”按鈕,可將結(jié)果顏色值通過變量交接給外部程序使用。6. 編寫上述自定義對(duì)話框的處理函數(shù)。switch(LOWORD(wParam)case IDM_SET_BKColor:if (DialogBox ( (HINSTANCE)GetWindowLong (hWnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDD_DIALOG1), hWnd, ColorDlgProc)=IDOK)if (change)hold=(HBRUSH)GetWindowLong(hWnd,GCL_HBRBACKGROUND);SetClassLong(hWnd,GCL_HBRBACKGROUND,(LONG)CreateSolidBrush(g_Color);change=TRUE;if (change) DeleteObject(hold); InvalidateRect(hWnd,NULL,TRUE);case IDM_SET_SCRIPTColor:if (ChooseColor (&cc)crText=cc.rgbResult;InvalidateRect (hWnd, NULL, TRUE);7. 增加響應(yīng)菜單命令的代碼。 在“更改文本顏色”命令的響應(yīng)中調(diào)用通用顏色對(duì)話框選擇新的顏色。新選定的文本顏色用全局變量或靜態(tài)變量保存,在主窗口刷新消息(WM_PAINT)處理中用該顏色顯示原來輸出的文本。case IDC_BUT_SELCOLOR:SetDlgItemInt(hDlg, IDC_COLORVALUE, GetMyColor(hDlg), FALSE); return TRUE; case WM_PAINT: hdc = BeginPaint (hWnd, &ps); GetClientRect (hWnd, &rect);SetTextColor (hdc, crText);DrawText (hdc, TEXT (歡迎使用), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint (hWnd, &ps);return 0; 更改背景顏色命令響應(yīng)中激活自定義對(duì)話框,對(duì)話框結(jié)束后,根據(jù)選擇的顏色,結(jié)合SetClassLong和CreateSolidBrush函數(shù),創(chuàng)建新的畫刷,并替換原來主窗口類使用的畫刷。if (change)hold=(HBRUSH)GetWindowLong(hWnd,GCL_HBRBACKGROUND);SetClassLong(hWnd,GCL_HBRBACKGROUND,(LONG)CreateSolidBrush(g_Color);change=TRUE;if (change) DeleteObject(hold); InvalidateRect(hWnd,NULL,TRUE);8. 刷新窗口看顯示結(jié)果是否符合要求(可在設(shè)置完顏色或畫刷之后直接用InvalidateRect函數(shù)激發(fā)WM_PAINT消息)。B、圖形繪制函數(shù)的使用1. 研習(xí)EASYGDI示例程序。查看各個(gè)GDI繪制函數(shù)的使用方法。2. 在自己的工作目錄中建立新工程。要求同2。3. 增加對(duì)WM_PAINT消息的處理,在其中使用:PolylinePolyPolylinePolygonPolyPolygon等函數(shù),注意在WM_PAINT消息中對(duì)HDC的獲取和釋放使用的函數(shù)是BeginPaint和EndPaint函數(shù)。 switch(iSelectionFunc)case IDM_FUNC_POLYLINE:ptDiamond0.x = 0;ptDiamond0.y = rect.bottom / 2;ptDiamond1.x = rect.right / 2;ptDiamond1.y = 0;ptDiamond2.x = rect.right;ptDiamond2.y = rect.bottom / 2;ptDiamond3.x = rect.right / 2;ptDiamond3.y = rect.bottom;ptDiamond4.x = 0;ptDiamond4.y = rect.bottom / 2;Polyline (hdc, ptDiamond, 5);break;case IDM_FUNC_POLYGON:if (GetPolyFillMode(hdc)=WINDING)SetPolyFillMode(hdc, ALTERNATE);elseSetPolyFillMode(hdc, WINDING);ptDiamond0.x = 0;ptDiamond0.y = rect.bottom / 3;ptDiamond1.x = rect.right;ptDiamond1.y = rect.bottom / 3;ptDiamond2.x = rect.right / 4;ptDiamond2.y = rect.bottom;ptDiamond3.x = rect.right / 2;ptDiamond3.y = 0;ptDiamond4.x = 3 * rect.right / 4;ptDiamond4.y = rect.bottom;Polygon (hdc, ptDiamond, 5);break;case IDM_FUNC_POLYPOLYLINE: ptDiamond20.x = 0;ptDiamond20.y = rect.bottom / 4;ptDiamond21.x = rect.right / 4;ptDiamond21.y = 0;ptDiamond22.x = rect.right;ptDiamond22.y = rect.bottom / 4;ptDiamond23.x = rect.right / 4;ptDiamond23.y = rect.bottom;ptDiamond24.x = 0;ptDiamond24.y = rect.bottom / 4; ptDiamond25.x = 0;ptDiamond25.y =3 * rect.bottom / 4;ptDiamond26.x =3 * rect.right / 4;ptDiamond26.y = 0;ptDiamond27.x = rect.right;ptDiamond27.y =3 * rect.bottom / 4;ptDiamond28.x = 3 *rect.right / 4;ptDiamond28.y = rect.bottom;ptDiamond29.x = 0;ptDiamond29.y = 3 *rect.bottom / 4;PolyPolyline (hdc, ptDiamond2, b,2);break;case IDM_FUNC_POLYPOLYGON:if (GetPolyFillMode(hdc)=WINDING)SetPolyFillMode(hdc, ALTERNATE);elseSetPolyFillMode(hdc, WINDING);ptDiamond30.x = 0;ptDiamond30.y = rect.bottom / 6;ptDiamond31.x = rect.right;ptDiamond31.y = rect.bottom /6;ptDiamond32.x = rect.right / 4;ptDiamond32.y = rect.bottom / 2;ptDiamond33.x = rect.right /2;ptDiamond33.y = 0;ptDiamond34.x = 3 * rect.right / 4;ptDiamond34.y = rect.bottom/2; ptDiamond35.x = 0;ptDiamond35.y = 2* rect.bottom / 3;ptDiamond36.x = rect.right;ptDiamond36.y = 2*rect.bottom /3;ptDiamond37.x = rect.right / 4;ptDiamond37.y = rect.bottom;ptDiamond38.x = rect.right /2;ptDiamond38.y = rect.bottom /2;ptDiamond39.x = 3 * rect.right / 4;ptDiamond39.y = rect.bottom;PolyPolygon (hdc, ptDiamond3, c,2);break;4. 按與Polyline相同的函數(shù)格式編寫自定義的折線繪制函數(shù),新函數(shù)命名為MyPolyline(用MoveToEx和LineTo實(shí)現(xiàn)),用該函數(shù)替換上一步代碼(11)中的Polyline,應(yīng)該獲得同樣的運(yùn)行結(jié)果。BOOL MyPolyline(HDC hdc,CONST POINT *lppt,int cPoints)MoveToEx(hdc,(*lppt).x,(*lppt).y,NULL);for (int i=1;icPoints;i+)LineTo(hdc,(*(lppt+i).x,(*(lppt+i).y);return TRUE;5. 編寫MyPolyPolyline和MyPolyPolygon,替換11中相應(yīng)的庫函數(shù),獲得同樣的運(yùn)行結(jié)果,以此加深對(duì)函數(shù)編寫、指針方式參數(shù)傳遞的理解。BOOL MyPolyPolyline(HDC hdc,CONST POINT *lppt,CONST DWORD *lpdwPolyPoints,int count)int i=0;for (int n=0;ncount;n+)MyPolyline(hdc,lppt+i,*(lpdwPolyPoints+n);i+=*(lpdwPolyPoints+n);return TRUE;BOOL MyPolyPolygon(HDC hdc,CONST POINT*lpPoints,CONST INT*lpPolyCounts,int nCount)PolyPolygon(hdc,lpPoints,lpPolyCounts,nCount);return TRUE;6. 一個(gè)工程多個(gè).cpp文件的試驗(yàn):可嘗試將這些自定義函數(shù)用單獨(dú)的.cpp文件管理,并編寫相應(yīng)的頭文件,使這些函數(shù)可以在其他.cpp文件中被調(diào)用。7. 在調(diào)試完上述代碼的基礎(chǔ)上增加繪圖函數(shù)的使用,嘗試?yán)L制橢圓、矩形等圖形。case IDM_FUNC_RECTANGLE:Rectangle (hdc, rect.right / 4, rect.bottom / 4, 3 * rect.right / 4, 3 * rect.bottom / 4);break;case IDM_FUNC_ROUNDRECT:RoundRect (hdc, rect.right / 4, rect.bottom / 4, 3 * rect.right / 4, 3 * rect.bottom / 4, rect.right / 4, rect.bottom / 4);break;C、定時(shí)器使用8. 在WM_CREATE消息中增加設(shè)置定時(shí)器的代碼(用SetTimer函數(shù));case WM_CREATE: /創(chuàng)建消息SetTimer(hWnd,1,1000,NULL);return 0;9. 在窗口過程的消息處理代碼中增加WM_TIMER消息的處理,處理的內(nèi)容包括: 用SYSTEMTIME結(jié)構(gòu)定義一個(gè)時(shí)間結(jié)構(gòu)變量 用GetSysteTime函數(shù)或GetLocalTime函數(shù)取出系統(tǒng)時(shí)間或本地時(shí)間 將時(shí)間值打印成字符串(可以使用wsprintf函數(shù)或sprintf函數(shù)) 使用GetDC函數(shù)獲取HDC 用TextOut 或 DrawText函數(shù)輸出文本 用ReleaseDC函數(shù)釋放先前獲取的HDC上述操作完成后,能夠在窗口客戶區(qū)中看到不斷刷新的時(shí)間顯示。case WM_TIMER:GetLocalTime(&systemtime); InvalidateRect (hWnd, NULL, TRUE);return 0;case WM_PAINT: wsprintf(str, %s %u/%u/%u %u:%u:%u, day, systemtime.wYear, systemtime.wMonth, systemtime.wDay, systemtime.wHour, systemtime.wMinute, systemtime.wSecond, systemtime.wMilliseconds); DrawTextA(hdc,str,strlen(str),&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER); EndPaint (hWnd, &ps);10. 在WM_DESTROY消息中增加刪除已創(chuàng)建的定時(shí)器的代碼(用KillTimer函數(shù))case WM_DESTROY:KillTimer(hWnd,NULL);PostQuitMessage(0);return 0;3 問題及解決方案1 調(diào)用通用顏色對(duì)話框的時(shí)候要先添加到自定義顏色中才可使其變色,為使其更方便,將代碼ctText=crCustomColors0;改為ctText=cc.rgbResult;2 編寫MyPolyPolyline函數(shù)時(shí),出現(xiàn)很多問題,先是在編寫函數(shù)時(shí)總是不能實(shí)現(xiàn)特定的功能,調(diào)用時(shí)忘記申明,最后編寫時(shí)仔細(xì)理解了LineTo和MoveToEx,利用這兩個(gè)函數(shù)先寫出了MyPolyline,然后在這基礎(chǔ)上編寫了MyPolyPolyline;3 MyPolyPolygon編寫時(shí)也同樣出現(xiàn)很多問題,沒法實(shí)現(xiàn)填充,最后直接調(diào)用的PolyPolygon,編寫時(shí)按照一個(gè)在頭文件中編寫,另一個(gè)新建一個(gè)cpp,理解函數(shù)的調(diào)用;#include BOOL MyPolyPolygon(HDC hdc,CONST POINT*lpPoints,CONST INT*lpPolyCounts,int nCount)PolyPolygon(hdc,lpPoints,lpPolyCounts,nCount);return TRUE;4 在定時(shí)器的編寫時(shí)運(yùn)行無錯(cuò),卻總是出現(xiàn)528528528,無法成功計(jì)時(shí),此時(shí)#define Time 1;SetTimer(hWnd,1,1000,NULL);確認(rèn)無錯(cuò)的情況下,將GetSystem(&systemtime);改為GetLocalTime(&systemtime);可成功計(jì)時(shí);5 編寫時(shí)依舊存在括號(hào)漏寫,未定義等錯(cuò)誤,在出現(xiàn)錯(cuò)誤很多的情況下檢查括號(hào)是否漏寫,未定義的在定義的類型上要仔細(xì)考慮,不能把類型弄錯(cuò);4 實(shí)驗(yàn)總結(jié) 這次的實(shí)驗(yàn),總體來說不向以往幾次都是趕著上交之前才完成,有了一定的進(jìn)步吧。初次拿到題目時(shí)還是一樣的大量的題目,然而仔細(xì)的去一點(diǎn)點(diǎn)的研究,去做的時(shí)候發(fā)現(xiàn)也許有了上幾次的練習(xí)作為積淀,做起來也不向以前一樣剛開始毫無頭緒。在仔細(xì)的研究完實(shí)例程序后,按照特定的步驟和方法都能一步步的做出來。也許是有著實(shí)例程序的運(yùn)用,為我們提供了很多的借鑒及參考。這次的實(shí)驗(yàn)中花費(fèi)時(shí)間最長(zhǎng)的是函數(shù)的編寫,因?yàn)橹雷约旱娜觞c(diǎn)一直在函數(shù)這邊,所以這次的練習(xí)在函數(shù)上下了很大的功夫。雖然說是簡(jiǎn)單的函數(shù)編寫,但是我還是經(jīng)過了多次的推敲,嘗試,最終順利的實(shí)現(xiàn)時(shí)的卻十分開心。在一次次的實(shí)驗(yàn)中,看著一點(diǎn)點(diǎn)的進(jìn)步,從不妄想能夠一步登天,亦知自己還需努力,于是耐下心來一點(diǎn)點(diǎn)的去做,去積累,去領(lǐng)悟編程的思想。附件關(guān)鍵程序代碼A、對(duì)話框部分:#include #include #include resource.hBOOL InitWindow (HINSTANCE hInstance, int nCmdShow);LRESULT CALLBACK MainWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);COLORREF GetMyColor(HWND hWnd)COLORREF cr = 0;CHOOSECOLOR cc;COLORREF crCustomColors16;/初始化CHOOSECOLOR結(jié)構(gòu)變量 cccc.lStructSize = sizeof (CHOOSECOLOR);cc.hwndOwner = hWnd;cc.hInstance = NULL;cc.rgbResult = RGB (0, 0, 0);cc.lpCustColors = crCustomColors;cc.Flags = CC_RGBINIT | CC_FULLOPEN;cc.lCustData = 0;cc.lpfnHook = NULL;cc.lpTemplateName = NULL;if (ChooseColor (&cc)cr = cc.rgbResult;return cr;COLORREF g_Color;BOOL CALLBACK ColorDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)BOOL b; static int iColor; /用戶選擇的顏色 switch (message) case WM_INITDIALOG: /先設(shè)置為紅色 CheckRadioButton (hDlg, IDC_RADIO_RED, IDC_RADIO_GREEN, IDC_RADIO_RED); SetDlgItemInt (hDlg, IDC_COLORVALUE, RGB(255,0,0), FALSE); return FALSE; case WM_COMMAND:/處理對(duì)話框中各控件通知消息 switch (LOWORD (wParam) case IDOK: /響應(yīng)確認(rèn)按鈕,改寫文本顏色 iCurrentColor 為iColor g_Color = GetDlgItemInt(hDlg, IDC_COLORVALUE, &b, FALSE); /關(guān)閉對(duì)話框 EndDialog (hDlg, TRUE); /關(guān)閉對(duì)話框 return TRUE; case IDCANCEL: /響應(yīng)取消按鈕,直接關(guān)閉對(duì)話框 EndDialog (hDlg, FALSE); return TRUE;case IDC_BUT_SELCOLOR:SetDlgItemInt(hDlg, IDC_COLORVALUE, GetMyColor(hDlg), FALSE);return TRUE; case IDC_RADIO_RED: case IDC_RADIO_GREEN: case IDC_RADIO_BLUE: CheckRadioButton (hDlg, IDC_RADIO_RED, IDC_RADIO_BLUE, LOWORD (wParam);switch(LOWORD (wParam)case IDC_RADIO_RED: SetDlgItemInt (hDlg, IDC_COLORVALUE, RGB(255,0,0), FALSE); break;case IDC_RADIO_GREEN: SetDlgItemInt (hDlg, IDC_COLORVALUE, RGB(0,255,0), FALSE); break;case IDC_RADIO_BLUE: SetDlgItemInt (hDlg, IDC_COLORVALUE, RGB(0,0,255), FALSE); break; return TRUE; break; return FALSE;/結(jié)束 ColorDlgProcint WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow).LRESULT CALLBACK MainWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)static HWND hWndEdit;static HMENU hMenuPop;HDC hdc;PAINTSTRUCT ps;RECT rect;static COLORREF crText = RGB (0, 0, 0);static BOOL change=FALSE;HBRUSH hold; static CHOOSECOLOR cc;static COLORREF crCustomColors16;switch (message)case WM_CREATE:/初始化結(jié)構(gòu) cccc.lStructSize = sizeof (CHOOSECOLOR);cc.hwndOwner = hWnd;cc.hInstance = NULL;cc.rgbResult = RGB (0, 0, 0);cc.lpCustColors = crCustomColors;cc.Flags = CC_RGBINIT | CC_FULLOPEN;cc.lCustData = 0;cc.lpfnHook = NULL;cc.lpTemplateName = NULL; hMenuPop = LoadMenu (LPCREATESTRUCT)lParam)-hInstance, IDR_MENU1); hMenuPop = GetSubMenu (hMenuPop, 1);return 0;case WM_SETFOCUS:SetFocus (hWndEdit);return 0;case WM_COMMAND: / 響應(yīng)編輯控件通知消息if (lParam)WORD w, W1, W2, W3;w = LOWORD (wParam);W1 = HIWORD(wParam);W2 = LOWORD (lParam);W3 = HIWORD(lParam);/編輯控件通知消息if (LOWORD (wParam) = 1) &(HIWORD(wParam) = EN_ERRSPACE | HIWORD (wParam) = EN_MAXTEXT)MessageBox (hWnd,TEXT (編輯控件內(nèi)存溢出), TEXT (菜單示例程序), MB_OK|MB_ICONSTOP);return 0;elseswitch(LOWORD(wParam);case IDM_SET_BKColor:if (DialogBox ( (HINSTANCE)GetWindowLong (hWnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDD_DIALOG1), hWnd, ColorDlgProc)=IDOK)if (change)hold=(HBRUSH)GetWindowLong(hWnd,GCL_HBRBACKGROUND);SetClassLong(hWnd,GCL_HBRBACKGROUND,(LONG)CreateSolidBrush(g_Color);change=TRUE;if (change) DeleteObject(hold); InvalidateRect(hWnd,NULL,TRUE);case IDM_SET_SCRIPTColor:if (ChooseColor (&cc)crText=cc.rgbResult;InvalidateRect (hWnd, NULL, TRUE);return 0;return 0;case WM_PAINT: hdc = BeginPaint (hWnd, &ps); GetClientRect (hWnd, &rect);SetTextColor (hdc, crText);DrawText (hdc, TEXT (歡迎使用), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint (hWnd, &ps);return 0;case WM_DESTROY: PostQuitMessage (0);return 0;return DefWindowProc (hWnd, message, wParam, lParam); /函數(shù) MainWndProc 結(jié)束B、自定義對(duì)話框:#include #include #include resource.h#include mypolyolygon.hBOOL InitWindow (HINSTANCE hInstance, int nCmdShow);LRESULT CALLBACK WinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);BOOL MyPolyline(HDC hdc,CONST POINT *lppt,int cPoints);.LRESULT CALLBACK WinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)HDC hdc;PAINTSTRUCT ps;RECT rect;LOGPEN logpen;CONST DWORD b2=5,5;int c2=5,5; static HMENU hMenuPop;HMENU hMenu;static int iSelectionFunc=IDM_FUNC_POLYLINE;static int iSelectionPen=IDM_PEN_BLACK;static int iSelectionBrush=IDM_BRUSH_WHITE;static HPEN hRedDashdotPen, hBlueSolidPen;HPEN hOldPen;HBRUSH hNewBrush, hOldBrush;POINT ptDiamond5;POINT ptDiamond210;POINT ptDiamond310, pt;switch (message)case WM_CREATE:hRedDashdotPen = CreatePen (PS_DASHDOT, 1, RGB (255, 0, 0);/創(chuàng)建寬度為3的藍(lán)色畫筆logpen.lopnStyle = PS_SOLID;logpen.lopnWidth.x = 3;logpen.lopnColor = RGB (0, 0, 255); hBlueSolidPen = CreatePenIndirect (&logpen); hMenuPop = LoadMenu (LPCREATESTRUCT)lParam)-hInstance, IDR_MENU1);hMenuPop = GetSubMenu (hMenuPop, 1);return 0;case WM_COMMAND: hMenu = GetMenu (hWnd) ; switch (LOWORD (wParam) case IDM_FUNC_POLYPOLYLINE:case IDM_FUNC_POLYLINE:case IDM_FUNC_POLYGON:case IDM_FUNC_POLYPOLYGON:case IDM_FUNC_LINETO:case IDM_FUNC_RECTANGLE:case IDM_FUNC_ROUNDRECT:case IDM_FUNC_MYPOLYPOLYLINE:case IDM_FUNC_MYPOLYPOLYGON: CheckMenuItem(hMenu,iSelectionFunc,MF_UNCHECKED); iSelectionFunc=LOWORD(wParam); CheckMenuItem(hMenu,iSelectionFunc,MF_CHECKED); InvalidateRect(hWnd,NULL,TRUE); return 0;case IDM_PEN_BLACK:case IDM_PEN_REDDASHDOT:case IDM_PEN_BLUESOLID: CheckMenuItem(hMenu,iSelectionPen,MF_UNCHECKED);iSelectionPen=LOWORD(wParam); CheckMenuItem(hMenu,iSelectionPen,MF_CHECKED); InvalidateRect(hWnd,NULL,TRUE);return 0;case IDM_BRUSH_WHITE: case IDM_BRUSH_LTGRAY:case IDM_BRUSH_COLORSOLID: case IDM_BRUSH_CROSS:CheckMenuItem (hMenu, iSelectionBrush, MF_UNCHECKED) ; iSelectionBrush = LOWORD (wParam) ; CheckMenuItem (hMenu, iSelectionBrush , MF_CHECKED) ; InvalidateRect (hWnd, NULL, TRUE) ; return 0 ;case WM_KEYDOWN: switch (wParam)case VK_ESCAPE:MessageBox (hWnd, TEXT (ESC鍵按下了!), TEXT (鍵盤), MB_OK);break;return 0;case WM_RBUTTONDOWN: /鼠標(biāo)消息MessageBox (hWnd, TEXT (鼠標(biāo)右鍵按下了!), TEXT (鼠標(biāo)), MB_OK);return 0;case WM_PAINT: /客戶區(qū)重繪消息hdc = BeginPaint (hWnd, &ps); GetClientRect (hWnd, &rect); /選用新畫筆switch (iSelectionPen)case IDM_PEN_BLACK:hOldPen =(HPEN) SelectObject (hdc, GetStockObject(BLACK_PEN);break;case IDM_PEN_REDDASHDOT:hOldPen = (HPEN)SelectObject (hdc, hRedDashdotPen);break;case IDM_PEN_BLUESOLID:hOldPen =(HPEN) SelectObject (hdc, hBlueSolidPen);break; /選用新畫刷switch (iSelectionBrush)case IDM_BRUSH_WHITE:hOldBrush = (HBRUSH)SelectObject (hdc, GetStockObject(WHITE_BRUSH);break;case IDM_BRUSH_LTGRAY:hOldBrush =(HBRUSH) SelectObject (hdc, GetStockObject(LTGRAY_BRUSH);break;case IDM_BRUSH_COLORSOLID:/創(chuàng)建并選擇彩色實(shí)體畫刷hNewBrush =(HBRUSH) CreateSolidBrush (RGB (0, 255, 255);hOldBrush =(HBRUSH) SelectObject (hdc, hNewBrush);break;case IDM_BRUSH_CROSS:/創(chuàng)建并選擇綠色十字影線畫刷hNewBrush =(HBRUSH) CreateHatchBrush (HS_CROSS, RGB (0, 255, 0);hOldBrush = (HBRUSH)SelectObject (hdc, hNewBrush);break; switch(iSelectionFunc)case IDM_FUNC_POLYLINE:ptDiamond0.x = 0;ptDiamond0.y = rect.bottom / 2;ptDiamond1.x = rect.right / 2;ptDiamond1.y = 0;ptDiamond2.x = rect.right;ptDiamond2.y = rect.bottom / 2;ptDiamond3.x = rect.right / 2;ptDiamond3.y = rect.bottom;ptDiamond4.x = 0;ptDiamond4.y = rect.bottom / 2;Polyline (hdc, ptDiamond, 5);break;case IDM_FUNC_POLYGON:if (GetP
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)鍍鋅波形梁護(hù)欄市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)金剛石產(chǎn)品市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)西服外包裝袋市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)肝絡(luò)欣丸市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)竹編果盤市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)電腦繡花機(jī)齒輪市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)爽足軟膏市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)活動(dòng)腳手市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)槽型支架市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)無線紅外現(xiàn)場(chǎng)報(bào)警探測(cè)器市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 拉薩市墨竹工卡縣思金拉措小學(xué)-2025年春季英語教研組工作總結(jié)-一路求索不停歇【課件】
- 山東省菏澤市2023?2024學(xué)年高一下學(xué)期7月期末考試 數(shù)學(xué)試題(含解析)
- (三級(jí))人工智能訓(xùn)練師職業(yè)技能鑒定理論考試題(附答案)
- 2025杭州市臨安區(qū)事業(yè)單位招聘80人考前自測(cè)高頻考點(diǎn)模擬試題附答案詳解(鞏固)
- 2025年北京二十中中考英語零模試卷
- 護(hù)理服務(wù)質(zhì)量提升路徑與實(shí)踐
- 糞肥還田協(xié)議書范本
- 商務(wù)數(shù)據(jù)分析-形考作業(yè)4(第5章)-國(guó)開(ZJ)-參考資料
- 有機(jī)合成與推斷綜合大題(解析版)
- 智能客服語音識(shí)別技術(shù)在醫(yī)療行業(yè)的應(yīng)用現(xiàn)狀與發(fā)展報(bào)告
- 工勤技師考試試題及答案
評(píng)論
0/150
提交評(píng)論