版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)題目:簡單繪圖板 學(xué)生姓名 :余勇 專 業(yè):數(shù)字媒體技術(shù)班 級:1122202指導(dǎo)教師 :李祥 2013年 01 月 12 日東華理工大學(xué)VC+課程設(shè)計(jì)設(shè)計(jì)目的: (1)要求學(xué)生達(dá)到熟練掌握C+語言的基本知識和技能; (2)基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; (3)能夠利用所學(xué)的基本知識和技能,解決簡單的面向?qū)ο蟪绦蛟O(shè)計(jì)問題。 設(shè)計(jì)要求:(1)要求利用面向?qū)ο蟮姆椒ㄒ约癈+的編程思想來完成系統(tǒng)的系統(tǒng)結(jié)構(gòu); (2)要求在設(shè)計(jì)的過程中,建立清晰的UML類關(guān)系圖,描述出類族之間的關(guān)系; (3)在系統(tǒng)中定義的每個類中要有各自的屬性和方法; (4)在系統(tǒng)的設(shè)計(jì)中,要用到面向?qū)?/p>
2、象的封裝、繼承和派生、多態(tài)的屬性。 設(shè)計(jì)選題:簡單繪圖板要求:(1)程序中包含菜單項(xiàng)和工具欄;(2)先選擇菜單項(xiàng)或單擊工具欄上的命令按鈕,然后在窗體空白區(qū)域單擊鼠標(biāo)后,繪制相應(yīng)菜單項(xiàng)或命令按鈕指定的圖形、文字。設(shè)計(jì)思路:問題分析:繪圖板需要創(chuàng)建一個用戶界面,然后用戶界面中需要有菜單欄和工具欄進(jìn)行不同的操作選擇。 在菜單欄中能指定不同的基本圖形進(jìn)行繪制。設(shè)計(jì)一個單文檔類型的MFC AppWizard (exe)工程,工程取名為:繪圖板。此程序?qū)?shí)現(xiàn)簡單的繪圖功能,包括點(diǎn)、直線、矩形、橢圓、扇形和連續(xù)線的繪制。并且能實(shí)現(xiàn)繪圖的控制,包括線寬、線型和顏色的設(shè)置,圖形的保存和打開簡單繪圖板設(shè)計(jì)圖: 繪
3、圖文件點(diǎn)打開直線保存矩形橢圓連續(xù)線結(jié)構(gòu)分析:首先,新建一個單文檔類型的MFC AppWizard (exe)工程,工程取名為:Graphic。為此程序添加一個子菜單,菜單名稱為“繪圖”,并為其添加六個菜單項(xiàng),分別用來控制不同圖形的繪制。當(dāng)用戶選擇其中的一個菜單項(xiàng)后,程序?qū)凑债?dāng)前的選擇進(jìn)行相應(yīng)圖形的繪制。添加的六個菜單項(xiàng)的ID。然后分別為這六個菜單項(xiàng)添加命令響應(yīng),本程序讓視類(CGraphicView)對這些菜單命令進(jìn)行響應(yīng),在程序運(yùn)行以后,當(dāng)用戶單擊某個菜單項(xiàng)時(shí),應(yīng)該把用戶的選擇保存起來,以便隨后的繪圖操作使用。因此在CMyView類中添加一個私有變量DrawType;用來保存用戶的選擇,該
4、變量的定義如下所述:private: UINT DrawType;在程序運(yùn)行以后,當(dāng)用戶單擊某個菜單項(xiàng)時(shí),應(yīng)該把用戶的選擇保存起來,以便隨后的繪圖操作使用。因此在CGraphicView類中添加一個私有變量m_nDrawType;用來保存用戶的選擇,該變量的定義如下所述:private: UINT m_nDrawType;接著,在視類的構(gòu)造函數(shù)中將此變量初始化為0,程序代碼如下:CGraphicView:CGraphicView()/ TODO: add construction code here m_nDrawType=0;然后利用switch/case語句,來分別完成相應(yīng)圖形的繪制。當(dāng)用
5、戶選擇【繪圖】菜單下的不同子菜單項(xiàng)時(shí),將變量DrawType設(shè)置為不同的值。void CGraphicView:OnDot() / TODO: Add your command handler code herem_nDrawType=1;void CGraphicView:OnLine() / TODO: Add your command handler code herem_nDrawType=2;void CGraphicView:OnRectangle() / TODO: Add your command handler code herem_nDrawType=3;void CGra
6、phicView:OnEllipse() / TODO: Add your command handler code herem_nDrawType=4;void CGraphicView:OnLianxuxian() / TODO: Add your command handler code herem_nDrawType=5;對于直線、矩形和橢圓,在繪制時(shí)都可有兩點(diǎn)來確定其圖形。當(dāng)鼠標(biāo)左擊時(shí)得到一個點(diǎn),當(dāng)鼠標(biāo)左鍵松開時(shí)得到另外一個點(diǎn)。為視類CGraphicView分別捕獲鼠標(biāo)左鍵按下和彈起這兩個消息。另外當(dāng)鼠標(biāo)左鍵按下時(shí),需要將鼠標(biāo)當(dāng)前按下點(diǎn)保存,因此我們?yōu)镃GraphicView再增加一
7、個CPoint類型的私有成員變量:m_ptOrigin,在視類的構(gòu)造函數(shù)中將此變量初始化為0。在鼠標(biāo)按下消息響應(yīng)函數(shù)中,保存該點(diǎn),代碼如下:void CGraphicView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_ptOrigin=point; /保存鼠標(biāo)按下得到點(diǎn),也是繪制一個點(diǎn)CView:OnLButtonDown(nFlags, point);在鼠標(biāo)左鍵彈起消息響應(yīng)函數(shù)中實(shí)現(xiàn)繪圖,代碼如下:void CGraphicV
8、iew:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default/創(chuàng)建并獲得設(shè)備描述CClientDC dc(this); switch (m_nDrawType)case 1:dc.SetPixel(point,RGB(0,255,0)); /*繪制點(diǎn)*/break;case 2: /*繪制直線*/dc.MoveTo(m_ptOrigin);/*調(diào)用MoveTo函數(shù)移動到原點(diǎn)*/dc.LineTo(point);/*調(diào)用LineTo函數(shù)繪制到終點(diǎn)。
9、*/break;case 3: /*繪制矩形*/ dc.Rectangle(CRect(m_ptOrigin,point);break;case 4: /*繪制橢圓*/dc.Ellipse(CRect(m_ptOrigin,point);break;CView:OnLButtonUp(nFlags, point);在上述程序中,設(shè)置一個點(diǎn),用到的函數(shù)是SetPixel,這也是CDC類的一個成員方法,該函數(shù)的生命形式如下:COLORREF SetPixel (POINT point,COLORREF crColor);該函數(shù)是在指定的點(diǎn)設(shè)置一個像素。其中第一個參數(shù)(point)是指定的點(diǎn),第二個
10、參數(shù)(crColor)是指定的顏色。在程序中設(shè)定的顏色在系統(tǒng)顏色表中可能不存在,但系統(tǒng)會選擇一種和這個顏色最接近的顏色。RGB是一個宏,它有三個參數(shù),分別代表紅、綠、藍(lán)三種顏色的值。這三個參數(shù)BYTE類型,取值范圍為0255。RGB(0,0,0)是黑色,RGB(255,255,255)是白色,將這三個分量設(shè)置成為0255之間的任意值,從而得到各種不同的顏色。Windows系統(tǒng)為我們提供了一個畫圖程序,在該程序中,利用畫筆可以繪制連續(xù)的線條,繪制連續(xù)的線條,首先要得到線條的起點(diǎn),然后需要捕獲鼠標(biāo)移動過程中的每一個點(diǎn),這可以通過捕獲鼠標(biāo)移動消息(WM_MOUSEMOVE)來實(shí)現(xiàn)。在此消息響應(yīng)函數(shù)中
11、,在依次捕獲的各個點(diǎn)之間繪制一條條非常短的線段,從而就可以繪制出一條連續(xù)的線條。于是,我增加了一個鼠標(biāo)移動消息(WM_MOUSEMOVE)的響應(yīng)函數(shù)(OnMouseMove)。這樣,只要鼠標(biāo)在應(yīng)用程序窗口中移動時(shí)都會進(jìn)入到這個消息響應(yīng)函數(shù)中。然后我為CMyview添加一個BOOL型的私有變量Draw,當(dāng)鼠標(biāo)左鍵按下去時(shí),此變量為真;當(dāng)鼠標(biāo)左鍵彈起時(shí),此變量為假。主題程序代碼 / 繪圖板View.cpp : implementation of the CMyView class/#include "stdafx.h"#include "繪圖板.h"#inc
12、lude "繪圖板Doc.h"#include "繪圖板View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyViewIMPLEMENT_DYNCREATE(CMyView, CView)BEGIN_MESSAGE_MAP(CMyView, CView)/AFX_MSG_MAP(CMyView)ON_COMMAND(ID_LINE, OnLine)ON_COMMAND(ID_LIANXUXIAN, OnLianx
13、uxian)ON_COMMAND(ID_DOT, OnDot)ON_COMMAND(ID_RECGANGLE, OnRecgangle)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()ON_COMMAND(ID_CIRCLE, OnCircle)ON_COMMAND(ID_COLOR, OnColor)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CV
14、iew:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CMyView construction/destructionCMyView:CMyView()/ TODO: add construction code hereDrawType=0;savepoint=0; Draw=FALSE;m_color=(255,0,0);CMyView:CMyView()BOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ T
15、ODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CMyView drawingvoid CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/ CMyView printingBOOL CMyView:OnPreparePrinting(CPrin
16、tInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CMyView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CMyView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CMyView diagnostics#if
17、def _DEBUGvoid CMyView:AssertValid() constCView:AssertValid();void CMyView:Dump(CDumpContext& dc) constCView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_DEBUG/ CMyView message handl
18、ersvoid CMyView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultsavepoint=point;Draw=TRUE;CView:OnLButtonDown(nFlags, point);void CMyView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCView:
19、OnLButtonUp(nFlags, point);CClientDC dc(this);switch (DrawType)/繪制橢圓case 1:dc.Ellipse(CRect(savepoint,point);break;/繪制點(diǎn)case 2:dc.SetPixel(point,m_color);break;/繪制直線case 3:if(Draw=true)dc.MoveTo(savepoint);dc.LineTo(point);savepoint=point;break;/繪制矩形case 4:dc.Rectangle(CRect(savepoint,point);break;Dr
20、aw=FALSE;void CMyView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCView:OnMouseMove(nFlags, point);/創(chuàng)建并獲得描述 CClientDC dc(this);switch (DrawType)/繪制連續(xù)線case 5:CPen pen1;CPen *oldPen;pen1.CreatePen(PS_SOLID,2,m_color); CPen *Oldpen=dc.SelectObjec
21、t(&pen1);if(Draw=true)dc.MoveTo(savepoint); dc.LineTo(point);/修改線段的起點(diǎn) savepoint=point;/恢復(fù)描述dc.SelectObject(Oldpen);break;void CMyView:OnCircle() / TODO: Add your command handler code hereDrawType=1;void CMyView:OnDot() / TODO: Add your command handler code hereDrawType=2;void CMyView:OnLine() /
22、TODO: Add your command handler code hereDrawType=3;void CMyView:OnRecgangle() / TODO: Add your command handler code hereDrawType=4;void CMyView:OnLianxuxian() / TODO: Add your command handler code hereDrawType=5;實(shí)驗(yàn)心得: 這次課程設(shè)計(jì)我成功的完成了。通過本次課程設(shè)計(jì),我完成了用移動鼠標(biāo)對直線,矩形,橢圓、連續(xù)線的簡單繪制工具的的制作,其中完成了繪圖形狀的選擇。 基于平時(shí)課外上機(jī)實(shí)驗(yàn)的練習(xí),對菜單的創(chuàng)建,COMMAND消息處理函數(shù)和 UPDATE_COMMAND_UI消息函數(shù)的添加過程比較熟練,這部分還算簡單。難的是代碼的添加,對繪制圖形的程序有大概的思路,但具體編寫時(shí)變量的運(yùn)用以及函數(shù)的調(diào)用設(shè)置。這次實(shí)驗(yàn)中關(guān)鍵就是確定畫圖起點(diǎn)及終點(diǎn)坐標(biāo),因?yàn)槭怯檬髽?biāo)繪制圖形,所以需用函數(shù)來捕獲鼠標(biāo)當(dāng)前所在位置的坐標(biāo),因此我設(shè)置了OnLButtonDown()函數(shù)來捕獲起點(diǎn)坐標(biāo),OnMouseMove()函數(shù)來捕獲鼠標(biāo)移
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度哺乳期離婚雙方子女保險(xiǎn)權(quán)益轉(zhuǎn)移協(xié)議2篇
- 2024證券公司與其合作方之間國際證券交易合同
- 二零二五版領(lǐng)養(yǎng)未成年人監(jiān)護(hù)責(zé)任協(xié)議參考4篇
- 二零二五版園林景觀木工施工合作協(xié)議4篇
- 二零二五版合伙房產(chǎn)買賣合同及配套裝修設(shè)計(jì)服務(wù)6篇
- 2025年度特種運(yùn)輸服務(wù)買賣合同安全與時(shí)效承諾
- 2025版彩禮退還與婚姻解除條件及財(cái)產(chǎn)分割協(xié)議書范本3篇
- 基于2025年度規(guī)劃的文化園區(qū)停車場建設(shè)與運(yùn)營合同3篇
- 二零二五年豪華別墅買賣合同與預(yù)售協(xié)議3篇
- 二零二五年度影視角色選拔拍攝合同
- 職業(yè)衛(wèi)生培訓(xùn)課件
- 柴油墊資合同模板
- 湖北省五市州2023-2024學(xué)年高一下學(xué)期期末聯(lián)考數(shù)學(xué)試題
- 城市作戰(zhàn)案例研究報(bào)告
- 【正版授權(quán)】 ISO 12803:1997 EN Representative sampling of plutonium nitrate solutions for determination of plutonium concentration
- 道德經(jīng)全文及注釋
- 2024中考考前地理沖刺卷及答案(含答題卡)
- 多子女贍養(yǎng)老人協(xié)議書范文
- 彩票市場銷售計(jì)劃書
- 骨科抗菌藥物應(yīng)用分析報(bào)告
- 支付行業(yè)反洗錢與反恐怖融資
評論
0/150
提交評論