版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 高級語言程序設計實驗報告Technology Chmistry Experiment Report班 級:學 號:學生姓名:指導教師:教 務 處2015年 11 月簡單繪圖軟件的實現(xiàn)實驗內(nèi)容:使用Windows API或MFC設計一個繪圖軟件,可以實現(xiàn)繪制線段、橢圓、矩形和曲線,線的顏色與寬帶、圖形是否填充可以由用戶選擇,可以實現(xiàn)所繪制圖形的保存與打開,窗口大小改變后圖形不消失。實驗步驟:(寫出模塊劃分、函數(shù)的調(diào)用關系、類的關系、關鍵代碼)本繪圖軟件是使用Window API來進行編寫的,主要分為1、 圖形的選擇與繪制2、 顏色的選擇3、 畫筆寬度的選擇4、 圖形的保存、打開與重繪1 圖形的
2、選擇與繪制1.1 畫圖時所需用的結(jié)構體 typedef struct POINT ptStart,ptEnd;BOOL bMouseDown;HPEN hPen;HBRUSH hBr;INT PenWidth;COLORREF icolor;BOOL bFill;DRAWSTRUCT,*PDRAWSTRUCT;1.2 畫圖所用的函數(shù) 畫橢圓時所用的函數(shù)VOID EllipseMouseDown(PDRAWSTRUCT pDs,HWND hWnd,WPARAM wParam,LPARAM lParam)pDs-ptStart.x=GET_X_LPARAM(lParam);pDs-ptStart.
3、y=GET_Y_LPARAM(lParam);pDs-ptEnd.x=pDs-ptStart.x;pDs-ptEnd.y=pDs-ptStart.y;pDs-bMouseDown=TRUE;SetCapture(hWnd);VOID EllipseMouseMove(PDRAWSTRUCT pDs,HWND hWnd,WPARAM wParam,LPARAM lParam)if(pDs-bMouseDown)HDC hdc=GetDC(hWnd);HBRUSH hBrOld;SetROP2(hdc,R2_NOTXORPEN);HPEN hPenOld=(HPEN)SelectObject(hd
4、c,pDs-hPen); if(pDs-bFill) hBrOld=(HBRUSH)SelectObject(hdc,pDs-hBr); else SelectObject(hdc,(HBRUSH)GetStockObject(NULL_BRUSH);Ellipse(hdc,pDs-ptStart.x,pDs-ptStart.y,pDs-ptEnd.x,pDs-ptEnd.y);pDs-ptEnd.x=GET_X_LPARAM(lParam);pDs-ptEnd.y=GET_Y_LPARAM(lParam);Ellipse(hdc,pDs-ptStart.x,pDs-ptStart.y,pDs
5、-ptEnd.x,pDs-ptEnd.y);SelectObject(hdc,hPenOld);if(pDs-bFill)SelectObject(hdc,hBrOld);ReleaseDC(hWnd,hdc);VOID EllipseMouseUp(PDRAWSTRUCT pDs,HWND hWnd,WPARAM wParam,LPARAM lParam)HDC hdc;HBRUSH hBrOld;pDs-bMouseDown=FALSE;ReleaseCapture();hdc=GetDC(hWnd);SetROP2(hdc,R2_NOTXORPEN);HPEN hPenOld=(HPEN
6、)SelectObject(hdc,pDs-hPen); if(pDs-bFill) hBrOld=(HBRUSH)SelectObject(hdc,pDs-hBr); else SelectObject(hdc,(HBRUSH)GetStockObject(NULL_BRUSH);Ellipse(hdc,pDs-ptStart.x,pDs-ptStart.y,pDs-ptEnd.x,pDs-ptEnd.y);pDs-ptEnd.x=GET_X_LPARAM(lParam);pDs-ptEnd.y=GET_Y_LPARAM(lParam);SetROP2(hdc,R2_COPYPEN);Ell
7、ipse(hdc,pDs-ptStart.x,pDs-ptStart.y,pDs-ptEnd.x,pDs-ptEnd.y);myshape.shape=SHAPECIRCLE;myshape.DrawCircle.rect.left=pDs-ptStart.x;myshape.DrawCircle.rect.top=pDs-ptStart.y;myshape.DrawCircle.rect.right=pDs-ptEnd.x;myshape.DrawCircle.rect.bottom=pDs-ptEnd.y;myshape.DrawCircle.icolor=pDs-icolor;mysha
8、pe.DrawCircle.PenWidth=pDs-PenWidth;myshape.DrawCircle.bFill=pDs-bFill;graphicArray.Add(myshape);SelectObject(hdc,hPenOld);if(pDs-bFill)SelectObject(hdc,hBrOld);ReleaseDC(hWnd,hdc);ReleaseDC(hWnd,hdc);注:直線、矩形、曲線的繪制函數(shù)由于與橢圓的繪制函數(shù)非常相似,以及限于篇幅的原因就不多寫了。1.3 圖形的選擇case IDM_DRAW_ELLIPSE:pMouseDown=EllipseMouse
9、Down;pMouseUp=EllipseMouseUp; pMouseMove=EllipseMouseMove;CheckMenuItem(hMenu,IDM_DRAW_LINE,MF_BYCOMMAND|MF_UNCHECKED);CheckMenuItem(hMenu,IDM_DRAW_RECTANGLE,MF_BYCOMMAND|MF_UNCHECKED);CheckMenuItem(hMenu,IDM_DRAW_ELLIPSE,MF_BYCOMMAND|MF_CHECKED);CheckMenuItem(hMenu,IDM_DRAW_CURVE,MF_BYCOMMAND|MF_UN
10、CHECKED);break;本段代碼用來實現(xiàn)橢圓這一圖形的選擇。其他圖形的選擇方法類似。1.4 圖形填充與否case IDM_DRAW_FILL:ds.bFill=!ds.bFill;if(ds.bFill)CheckMenuItem(hMenu,IDM_DRAW_FILL,MF_BYCOMMAND|MF_CHECKED);elseCheckMenuItem(hMenu,IDM_DRAW_FILL,MF_BYCOMMAND|MF_UNCHECKED);break;1.5 圖形的繪制case WM_LBUTTONDOWN:pMouseDown(&ds,hWnd,wParam,lParam);b
11、reak;case WM_MOUSEMOVE:pMouseMove(&ds,hWnd,wParam,lParam);break;case WM_LBUTTONUP:pMouseUp(&ds,hWnd,wParam,lParam);break;2 顏色的選擇case IDM_COLOR_RED:ds.icolor=RGB(255,0,0); ChangeColorWidth(ds,hMenu);break;case IDM_COLOR_GREEN:ds.icolor=RGB(0,255,0); ChangeColorWidth(ds,hMenu);break;case IDM_COLOR_BLU
12、E:ds.icolor=RGB(0,0,255); ChangeColorWidth(ds,hMenu);break;3 畫筆寬度的選擇3.1 寬度值的接收與傳遞case WM_COMMAND:if (LOWORD(wParam) = IDOK | LOWORD(wParam) = IDCANCEL)HWND hEdit=GetDlgItem(hDlg,IDC_EDITWITH);GetWindowText(hEdit,buffer,sizeof(buffer);/int a=_wtoi(buffer);/SendMessage(GetParent(hDlg),WM_CHANGWIDTH,(W
13、PARAM)0,(LPARAM)a);SendMessage(GetParent(hDlg),WM_CHANGWIDTH,(WPARAM)0,(LPARAM)buffer);EndDialog(hDlg, LOWORD(wParam);return (INT_PTR)TRUE;case WM_CHANGWIDTH:ds.PenWidth=_wtoi(WCHAR *)lParam);/ds.PenWidth=lParam; ChangeColorWidth(ds,hMenu);break;3.2 改變畫筆顏色與寬度的函數(shù)void ChangeColorWidth(DRAWSTRUCT &ds,H
14、MENU hMenu)DeleteObject(ds.hPen);DeleteObject(ds.hBr);ds.hPen=CreatePen(PS_SOLID,ds.PenWidth,ds.icolor); ds.hBr=CreateSolidBrush(ds.icolor);CheckMenuItem(hMenu,IDM_COLOR_RED,MF_BYCOMMAND|MF_CHECKED); CheckMenuItem(hMenu,IDM_COLOR_GREEN,MF_BYCOMMAND|MF_UNCHECKED); CheckMenuItem(hMenu, IDM_COLOR_BLUE,
15、MF_BYCOMMAND|MF_UNCHECKED);4 圖形的保存、打開與重繪4.1 所需用到的結(jié)構體與主要變量struct DRAWLINEPOINT ptStart,ptEnd;INT PenWidth;COLORREF icolor;typedef structRECT rect;INT PenWidth;COLORREF icolor;BOOL bFill;DRAWRECT,DRAWCIRCLE;enum SHAPESHAPELINE,SHAPERECT,SHAPECIRCLE;typedef structSHAPE shape;unionDRAWLINE DrawLine;DRAW
16、RECT DrawRect;DRAWCIRCLE DrawCircle;DRAWSHAPE;CArray graphicArray;4.2 圖形的保存case IDM_SAVE:CFile file(TEXT(shiyan.shp),CFile:modeWrite|CFile:modeCreate);CArchive ar(&file,CArchive:store);graphicArray.Serialize(ar);break;4.3 圖形的打開case IDM_OPEN:CFile file(TEXT(shiyan.shp),CFile:modeRead);CArchive ar(&fi
17、le,CArchive:load);graphicArray.Serialize(ar);SendMessage(hWnd,WM_PAINT,0,0);break;4.4 圖形的重繪case WM_PAINT:hdc = BeginPaint(hWnd, &ps);for(int i=0;igraphicArray.GetSize();i+) myshape=graphicArrayi; Paint(hWnd,myshape); EndPaint(hWnd, &ps);break;4.5 在圖形的打開與重繪時所需用到的函數(shù)void Paint(HWND hWnd,DRAWSHAPE &mysh
18、ape)HDC hdc=GetDC(hWnd); HPEN hPen,hPenOld;HBRUSH hBr,hBrOld;switch(myshape.shape)case SHAPELINE:hPen=CreatePen(PS_SOLID,myshape.DrawLine.PenWidth,myshape.DrawLine.icolor);hPenOld=(HPEN)SelectObject(hdc,hPen);MoveToEx(hdc,myshape.DrawLine.ptStart.x,myshape.DrawLine.ptStart.y,NULL); LineTo(hdc,myshap
19、e.DrawLine.ptEnd.x,myshape.DrawLine.ptEnd.y);SelectObject(hdc,hPenOld);DeleteObject(hPen);break;case SHAPERECT:hPen=CreatePen(PS_SOLID,myshape.DrawRect.PenWidth,myshape.DrawRect.icolor);hPenOld=(HPEN)SelectObject(hdc,hPen);if(myshape.DrawRect.bFill)hBr=CreateSolidBrush(myshape.DrawRect.icolor); hBrO
20、ld=(HBRUSH)SelectObject(hdc,hBr);elsehBr=(HBRUSH)GetStockObject(NULL_BRUSH);hBrOld=(HBRUSH)SelectObject(hdc,hBr);Rectangle(hdc,myshape.DrawRect.rect.left,myshape.DrawRect.rect.top,myshape.DrawRect.rect.right,myshape.DrawRect.rect.bottom);SelectObject(hdc,hPenOld);SelectObject(hdc,hBrOld);DeleteObject(hPen);DeleteObject(hBr);break;case SHAPECIRCLE:hPen=CreatePen(PS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人洗衣設備轉(zhuǎn)讓合同范例
- 家具雙方協(xié)議合同范例
- 個人按揭房貸合同范例
- 宜賓代辦勞務派遣合同范例
- 賓館臨時用工合同模板
- 在建房抵押合同范例
- 代理天貓合同范例
- 養(yǎng)殖生產(chǎn)合同范例
- 吳江區(qū)用工合同范例
- 廣州白云租房合同范例
- 2024年新人教版一年級語文上冊全套試卷
- 2024年高考英語一模試題分類匯編:概要寫作(上海專用)(解析版)
- 《師說》教學課件 2024-2025學年統(tǒng)編版高中語文必修上冊
- 非暴力溝通課件
- 年產(chǎn)5萬噸高密度聚乙烯聚合工段基本工藝設計
- 八年級英語上冊 Unit 4 Whats the best movie theater(第1課時)說課稿
- 人教版道德與法治六年級上冊全冊單元測試卷課件
- JTG∕T L80-2014 高速公路改擴建交通工程及沿線設施設計細則
- 五年級上冊小學高年級學生讀本第11講《國家安全是頭等大事》教學設計
- 2024年全國注冊消防工程師之消防技術綜合能力考試重點試題(詳細參考解析)
- 2024年北京工業(yè)職業(yè)技術學院高職單招筆試歷年職業(yè)技能測驗典型例題與考點解析含答案
評論
0/150
提交評論