計(jì)算機(jī)程序設(shè)計(jì)實(shí)踐MFC畫圖軟件_第1頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)實(shí)踐MFC畫圖軟件_第2頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)實(shí)踐MFC畫圖軟件_第3頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)實(shí)踐MFC畫圖軟件_第4頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)實(shí)踐MFC畫圖軟件_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、文檔供參考,可復(fù)制、編制,期待您的好評(píng)與關(guān)注! 計(jì)算機(jī)程序設(shè)計(jì)實(shí)踐課程設(shè)計(jì)報(bào)告班 級(jí) _ 計(jì)算機(jī)科學(xué)與技術(shù)1303班學(xué) 號(hào) 130405320 姓 名 _韋昌桿_ 指導(dǎo)教師 _楊威_ 2015年1 月 8日交互式繪圖程序1.引言計(jì)算機(jī)的發(fā)展也是計(jì)算機(jī)語(yǔ)言的發(fā)展得到了很大的提高,人們的生活中離不 開(kāi)圖像,除了我們可以用鉛筆在紙上畫圖外,我們也可以在電腦上繪制我們的想象,本實(shí)驗(yàn)就是基于VC+的一個(gè)小型的繪圖軟件。 目的:1.掌握用VC+6.0開(kāi)發(fā)環(huán)境開(kāi)發(fā)軟件的方法;2.熟悉獲得幫助的方法;3.掌握SDI應(yīng)用程序結(jié)構(gòu),熟悉基于對(duì)話框的應(yīng)用程序編程方法;4.掌握用資源編輯器進(jìn)行圖標(biāo),菜單,工具欄,對(duì)話

2、框等資源的編輯;5.掌握對(duì)話框,常用控件的使用方法;6.熟悉文檔/視圖結(jié)構(gòu),掌握文檔和視圖的相互控制技巧;2.需求分析2.1系統(tǒng)功能分析自定義一個(gè)工具欄,工具欄提供功能按鈕,實(shí)現(xiàn)簡(jiǎn)單基本圖形的繪制,如直線、矩形、圓形、橢圓形、扇形,多邊形,填充色等。實(shí)現(xiàn)對(duì)圖形的交互編輯,如修改顏色和線型等;2.2系統(tǒng)設(shè)計(jì)目標(biāo)本系統(tǒng)實(shí)現(xiàn)了繪圖程序的基本功能,新建的工具欄中包含了繪圖的基本按鈕,例如點(diǎn),直線,矩形,圓,扇形,五角星,多邊形,填充色等在菜單欄中加入了對(duì)圖形的基本編輯,比如對(duì)圖形邊框的顏色,線型,線寬等編輯在工具中加入了連續(xù)畫筆這一功能,使大家可以在電腦上和在紙上一樣自由的畫圖。3.系統(tǒng)設(shè)計(jì) 3.1系

3、統(tǒng)功能設(shè)計(jì) CGraphics CCGraphicsView CSettingDlg工具欄和菜單欄的命令響應(yīng)函數(shù)編輯類的消息響應(yīng)函數(shù)鼠標(biāo)的消息響應(yīng)函數(shù)3.2系統(tǒng)工作流程CCGraphicsDocCCGraphicsView CAboutDlgCCGraphicsApp3.3類設(shè)計(jì)與類結(jié)構(gòu)CGraphics CAboutDlgCCGraphicsAppCCGraphicsDocCCGraphicsViewCMainFrameCSettingDlgGlobals 編輯類的消息響應(yīng)函數(shù)鼠標(biāo)的消息響應(yīng)函數(shù)工具欄和菜單欄的命令響應(yīng)函數(shù)3.4 開(kāi)發(fā)與運(yùn)行環(huán)境 Microsoft Visual c+ 6.0

4、4 設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)的界面為下圖所示 1.添加消息響應(yīng)函數(shù)OnSetting(),并添加頭文件"SettingDlg.h",在view類中添加成員變量m_nLineWidth,初始化。給單選按鈕增加成員變量m_nLineStyle,初始化。2.當(dāng)用戶點(diǎn)擊OK時(shí),將其保存: CSettingDlg dlg;dlg.m_nLineWidth=m_nLineWidth;/*保存用戶設(shè)定的值*/dlg.m_nLineStyle=m_nLineStyle;if (IDOK=dlg.DoModal()m_nLineWidth=dlg.m_nLineWidth;/*點(diǎn)擊確定時(shí)保存下來(lái)*/m

5、_nLineStyle=dlg.m_nLineStyle;3.對(duì)顏色這一項(xiàng)增加命令響應(yīng),創(chuàng)建dlg對(duì)象,并在view類中增加成員變量m_clr,初始化:CColorDialog dlg;dlg.m_cc.Flags|=CC_RGBINIT; /*標(biāo)記*/ dlg.m_cc.rgbResult=m_clr; /*保存用戶設(shè)定的值*/if(IDOK=dlg.DoModal()m_clr=dlg.m_cc.rgbResult; /*點(diǎn)擊確定時(shí)保存下來(lái)*/4.添加繪圖菜單,添加菜單項(xiàng),并添加消息響應(yīng)函數(shù),如下圖所示:5.在之前的OnLButtonUp函數(shù)中加入畫筆函數(shù),并將之前設(shè)定的m_nLineSt

6、yle,m_nLineWidth,m_clr作為畫筆函數(shù)的形參添加到其中,并作為nDrawType=9對(duì)其進(jìn)行響應(yīng): CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);/*繪制畫筆*/dc.SelectObject(&pen);6.捕獲鼠標(biāo)移動(dòng)命令并將畫筆函數(shù)寫入其中:dc.MoveTo(m_ptOrigin); dc.LineTo(point); m_ptOrigin=point;7.對(duì)填充色增加命令響應(yīng),在響應(yīng)函數(shù)中將nDrawType=10寫在里面,在OnLButtonUp中編寫函數(shù): CBrush brFi

7、ll; brFill.CreateSolidBrush(m_clr);pBrush = dc.SelectObject(&brFill);dc.ExtFloodFill(point.x,point.y, dc.GetPixel(point), FLOODFILLSURFACE);dc.SelectObject(pBrush);8.對(duì)橡皮增加命令響應(yīng),在響應(yīng)函數(shù)中將nDrawType=11,寫在里面,,在OnMouseMove中編寫函數(shù): CClientDC dc(this); CPen pen(0,10,RGB(255,255,255); dc.SelectObject(&pe

8、n); dc.MoveTo(m_ptOrigin); dc.LineTo(point); m_ptOrigin=point;測(cè)試與運(yùn)行結(jié)果: 無(wú)錯(cuò)誤和警告,運(yùn)行時(shí),符合預(yù)先設(shè)定的標(biāo)準(zhǔn)5結(jié)語(yǔ) 5.1結(jié)論與討論:通過(guò)認(rèn)真學(xué)習(xí)視頻和研究課外書(shū)籍以及網(wǎng)上查資料,不斷嘗試,完成了任務(wù),基本滿足了設(shè)計(jì)的要求。5.2 設(shè)計(jì)體會(huì): 通過(guò)親手操作,明顯感到編程的不易。因?yàn)槟芰Φ牟蛔悖嗵幒瘮?shù)的實(shí)現(xiàn)通過(guò)看書(shū)和視頻的情況下寫出來(lái)。為得到更好的程序,今后還須努力鉆研編程以獲得更好的成果。本系統(tǒng)適合運(yùn)行于XP、WIN7等系統(tǒng)平臺(tái)下。 參考文獻(xiàn)VC+深入詳解 孫鑫 編著 計(jì)算機(jī)程序設(shè)計(jì)實(shí)踐課程設(shè)計(jì)任務(wù)劃分課程設(shè)計(jì)題目:姓

9、 名設(shè)計(jì)職務(wù)任 務(wù)工作量比例寧相如組長(zhǎng)將組員查找并編寫的程序代碼整理到主程序中40%李則漢組員查找并編寫工具菜單項(xiàng)的函數(shù)30%韋昌桿組員查找并編寫繪圖菜單項(xiàng)的函數(shù)30% 附錄CCGraphicsView:CCGraphicsView()/ TODO: add construction code here m_nDrawType=0; /*用來(lái)保存用戶的選擇*/m_ptOrigin=0; /* 保存下來(lái)的鼠標(biāo)左鍵按下的點(diǎn),即原點(diǎn)為(0,0 ) */m_nLineWidth=0; /*用戶輸入的線寬*/m_nLineStyle=0; /*線型*/m_clr=RGB(0,0,0); /*顏色*/m_

10、bDraw=FALSE; CObArray m_backup; m_Index=0; m_IsLastMove=false;void CCGraphicsView:OnDot() / TODO: Add your command handler code herem_nDrawType=1; void CCGraphicsView:OnLine() / TODO: Add your command handler code herem_nDrawType=2; void CCGraphicsView:OnRectangle() / TODO: Add your command handler

11、code herem_nDrawType=3; void CCGraphicsView:OnEllipse() / TODO: Add your command handler code herem_nDrawType=4; void CCGraphicsView:OnArc() / TODO: Add your command handler code herem_nDrawType=5; void CCGraphicsView:OnChord() / TODO: Add your command handler code herem_nDrawType=6; void CCGraphics

12、View:OnPie() / TODO: Add your command handler code herem_nDrawType=7; void CCGraphicsView:OnRoundrect() / TODO: Add your command handler code herem_nDrawType=8; void CCGraphicsView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_ptOrigin=point

13、; /*將按下的點(diǎn)保存在成員變量當(dāng)中*/m_bDraw=TRUE;CView:OnLButtonDown(nFlags, point);void CCGraphicsView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);/*繪制畫筆*/dc.SelectObject(&pen);CBrush *pBrush=C

14、Brush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH); /*創(chuàng)建透明畫刷*/dc.SelectObject(pBrush); /*將畫刷選到設(shè)備描述表中*/switch(m_nDrawType)case 1: dc.SetPixel(point,m_clr);break;case 2: dc.MoveTo(m_ptOrigin); dc.LineTo(point);break;case 3: dc.Rectangle(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y);break;case 4: dc.Ellip

15、se(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y);break;case 5: dc.Arc(point.x-100,point.y-100,point.x+100,point.y+100,point.x-100,point.y,point.x+100,point.y);break;case 6: dc.Chord(point.x-100,point.y-30,point.x+100,point.y+30,point.x-100,point.y,point.x+100,point.y);break;case 7: dc.Pie(point.x-100,p

16、oint.y-100,point.x+100,point.y+100,point.x-100,point.y,point.x+100,point.y);break;case 8: dc.RoundRect(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y,50,50); break;case 10: CBrush brFill;brFill.CreateSolidBrush(m_clr);pBrush = dc.SelectObject(&brFill);dc.ExtFloodFill(point.x,point.y, dc.GetPixel(poin

17、t), FLOODFILLSURFACE);dc.SelectObject(pBrush);m_bDraw=FALSE;CView:OnLButtonUp(nFlags, point);void CCGraphicsView:OnSetting() /*響應(yīng)設(shè)置按鈕*/ TODO: Add your command handler code hereCSettingDlg dlg;dlg.m_nLineWidth=m_nLineWidth;/*保存用戶設(shè)定的值*/dlg.m_nLineStyle=m_nLineStyle;if (IDOK=dlg.DoModal() m_nLineWidth=

18、dlg.m_nLineWidth;/*點(diǎn)擊確定時(shí)保存下來(lái)*/ m_nLineStyle=dlg.m_nLineStyle;void CCGraphicsView:OnColor() /*響應(yīng)顏色*/ TODO: Add your command handler code hereCColorDialog dlg;dlg.m_cc.Flags|=CC_RGBINIT; /*標(biāo)記*/ dlg.m_cc.rgbResult=m_clr; /*保存用戶設(shè)定的值*/if(IDOK=dlg.DoModal()m_clr=dlg.m_cc.rgbResult; /*點(diǎn)擊OK時(shí)保存下來(lái)*/void CCGra

19、phicsView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCClientDC dc(this); CPen pen(m_nLineStyle,m_nLineWidth,m_clr);/*繪制畫筆*/dc.SelectObject(&pen); CBrush *pbrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);dc.SelectObject(pbrush);

20、switch(m_nDrawType) case 9: if(m_bDraw=TRUE) CClientDC dc(this); CPen pen(m_nLineStyle,m_nLineWidth,m_clr);/*繪制畫筆*/ dc.SelectObject(&pen); dc.MoveTo(m_ptOrigin); dc.LineTo(point); m_ptOrigin=point;break; case 11: if(m_bDraw=TRUE) CClientDC dc(this); CPen pen(0,10,RGB(255,255,255); dc.SelectObjec

21、t(&pen); dc.MoveTo(m_ptOrigin); dc.LineTo(point); m_ptOrigin=point;break; CView:OnMouseMove(nFlags, point);void CCGraphicsView:OnPen() / TODO: Add your command handler code herem_nDrawType=9;void CCGraphicsView:OnFillcolorSet() / TODO: Add your command handler code herem_nDrawType=10;void CCGrap

22、hicsView:OnRubber() / TODO: Add your command handler code herem_nDrawType=11;int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBR

23、S_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0("Failed to create toolbarn");return -1; / fail to createif (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)TRACE0("Failed to create status barn");r

24、eturn -1; / fail to create/ TODO: Delete these three lines if you don't want the toolbar to/ be dockablem_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar); if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT/*聲明新工具欄函數(shù)*/| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_newToolBar.LoadToolBar(IDR_TOOLBAR1)TRACE0("Failed to create toolbarn");return -1; / fail to create m_newToolBar.EnableDocking(CBRS_ALIGN_ANY); DockC

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論