




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 高級(jí)語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告Technology Chmistry Experiment Report班 級(jí):學(xué) 號(hào):學(xué)生姓名:指導(dǎo)教師:教 務(wù) 處2015年 11 月簡(jiǎn)單繪圖軟件的實(shí)現(xiàn)實(shí)驗(yàn)內(nèi)容:使用Windows API或MFC設(shè)計(jì)一個(gè)繪圖軟件,可以實(shí)現(xiàn)繪制線段、橢圓、矩形和曲線,線的顏色與寬帶、圖形是否填充可以由用戶選擇,可以實(shí)現(xiàn)所繪制圖形的保存與打開,窗口大小改變后圖形不消失。實(shí)驗(yàn)步驟:(寫出模塊劃分、函數(shù)的調(diào)用關(guān)系、類的關(guān)系、關(guān)鍵代碼)本繪圖軟件是使用Window API來(lái)進(jìn)行編寫的,主要分為1、 圖形的選擇與繪制2、 顏色的選擇3、 畫筆寬度的選擇4、 圖形的保存、打開與重繪1 圖形的
2、選擇與繪制1.1 畫圖時(shí)所需用的結(jié)構(gòu)體 typedef struct POINT ptStart,ptEnd;BOOL bMouseDown;HPEN hPen;HBRUSH hBr;INT PenWidth;COLORREF icolor;BOOL bFill;DRAWSTRUCT,*PDRAWSTRUCT;1.2 畫圖所用的函數(shù) 畫橢圓時(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;本段代碼用來(lái)實(shí)現(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é)構(gòu)體與主要變量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í)所需用到的函數(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何有效記錄工作進(jìn)度計(jì)劃
- 倉(cāng)庫(kù)貨物拆零與分揀管理策略計(jì)劃
- 2025年路面清潔裝備合作協(xié)議書
- 如何制定品牌宣傳計(jì)劃
- 2025年優(yōu)良動(dòng)植物新品種項(xiàng)目合作計(jì)劃書
- 班主任與學(xué)科教師協(xié)作計(jì)劃
- 2025年鈷粉系列合作協(xié)議書
- 2025年中國(guó)頁(yè)巖氣行業(yè)市場(chǎng)現(xiàn)狀及投資態(tài)勢(shì)分析報(bào)告(智研咨詢)
- 2025年氣體摻混設(shè)備合作協(xié)議書
- 2025年動(dòng)葉可調(diào)軸流電站用風(fēng)機(jī)項(xiàng)目發(fā)展計(jì)劃
- 2025年潞安化工集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 供應(yīng)鏈管理(第2版)課件:常用的供應(yīng)鏈管理方法
- 腰椎手術(shù)的疑難討論
- 幼兒園一日生活安全課件
- 2025屆高考數(shù)學(xué)專項(xiàng)復(fù)習(xí):阿基米德三角形【六大題型】含答案
- 高中語(yǔ)文2021學(xué)年專題復(fù)習(xí)-外國(guó)文學(xué)訓(xùn)練題【含詳解】
- 高中語(yǔ)文(統(tǒng)編版)選必中冊(cè)-第二單元教材分析解讀課件
- 鄉(xiāng)鎮(zhèn)教育管理中心2025年教育教學(xué)工作計(jì)劃
- 2024年中考模擬試卷語(yǔ)文(考試版A4)
- 多旋翼無(wú)人飛行器嵌入式飛控開發(fā)實(shí)戰(zhàn)-基于STM32系列微控制器的代碼實(shí)現(xiàn)
- 國(guó)家開放大學(xué)護(hù)理社會(huì)實(shí)踐報(bào)告
評(píng)論
0/150
提交評(píng)論