




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設(shè)計報告課程設(shè)計題目:簡單繪圖板 學(xué)生姓名 :余勇 專 業(yè):數(shù)字媒體技術(shù)班 級:1122202指導(dǎo)教師 :李祥 2013年 01 月 12 日東華理工大學(xué)VC+課程設(shè)計設(shè)計目的: (1)要求學(xué)生達到熟練掌握C+語言的基本知識和技能; (2)基本掌握面向?qū)ο蟪绦蛟O(shè)計的基本思路和方法; (3)能夠利用所學(xué)的基本知識和技能,解決簡單的面向?qū)ο蟪绦蛟O(shè)計問題。 設(shè)計要求:(1)要求利用面向?qū)ο蟮姆椒ㄒ约癈+的編程思想來完成系統(tǒng)的系統(tǒng)結(jié)構(gòu); (2)要求在設(shè)計的過程中,建立清晰的UML類關(guān)系圖,描述出類族之間的關(guān)系; (3)在系統(tǒng)中定義的每個類中要有各自的屬性和方法; (4)在系統(tǒng)的設(shè)計中,要用到面向?qū)?/p>
2、象的封裝、繼承和派生、多態(tài)的屬性。 設(shè)計選題:簡單繪圖板要求:(1)程序中包含菜單項和工具欄;(2)先選擇菜單項或單擊工具欄上的命令按鈕,然后在窗體空白區(qū)域單擊鼠標后,繪制相應(yīng)菜單項或命令按鈕指定的圖形、文字。設(shè)計思路:問題分析:繪圖板需要創(chuàng)建一個用戶界面,然后用戶界面中需要有菜單欄和工具欄進行不同的操作選擇。 在菜單欄中能指定不同的基本圖形進行繪制。設(shè)計一個單文檔類型的MFC AppWizard (exe)工程,工程取名為:繪圖板。此程序?qū)崿F(xiàn)簡單的繪圖功能,包括點、直線、矩形、橢圓、扇形和連續(xù)線的繪制。并且能實現(xiàn)繪圖的控制,包括線寬、線型和顏色的設(shè)置,圖形的保存和打開簡單繪圖板設(shè)計圖: 繪
3、圖文件點打開直線保存矩形橢圓連續(xù)線結(jié)構(gòu)分析:首先,新建一個單文檔類型的MFC AppWizard (exe)工程,工程取名為:Graphic。為此程序添加一個子菜單,菜單名稱為“繪圖”,并為其添加六個菜單項,分別用來控制不同圖形的繪制。當(dāng)用戶選擇其中的一個菜單項后,程序?qū)凑债?dāng)前的選擇進行相應(yīng)圖形的繪制。添加的六個菜單項的ID。然后分別為這六個菜單項添加命令響應(yīng),本程序讓視類(CGraphicView)對這些菜單命令進行響應(yīng),在程序運行以后,當(dāng)用戶單擊某個菜單項時,應(yīng)該把用戶的選擇保存起來,以便隨后的繪圖操作使用。因此在CMyView類中添加一個私有變量DrawType;用來保存用戶的選擇,該
4、變量的定義如下所述:private: UINT DrawType;在程序運行以后,當(dāng)用戶單擊某個菜單項時,應(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、戶選擇【繪圖】菜單下的不同子菜單項時,將變量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;對于直線、矩形和橢圓,在繪制時都可有兩點來確定其圖形。當(dāng)鼠標左擊時得到一個點,當(dāng)鼠標左鍵松開時得到另外一個點。為視類CGraphicView分別捕獲鼠標左鍵按下和彈起這兩個消息。另外當(dāng)鼠標左鍵按下時,需要將鼠標當(dāng)前按下點保存,因此我們?yōu)镃GraphicView再增加一
7、個CPoint類型的私有成員變量:m_ptOrigin,在視類的構(gòu)造函數(shù)中將此變量初始化為0。在鼠標按下消息響應(yīng)函數(shù)中,保存該點,代碼如下:void CGraphicView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_ptOrigin=point; /保存鼠標按下得到點,也是繪制一個點CView:OnLButtonDown(nFlags, point);在鼠標左鍵彈起消息響應(yīng)函數(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)); /*繪制點*/break;case 2: /*繪制直線*/dc.MoveTo(m_ptOrigin);/*調(diào)用MoveTo函數(shù)移動到原點*/dc.LineTo(point);/*調(diào)用LineTo函數(shù)繪制到終點。
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è)置一個點,用到的函數(shù)是SetPixel,這也是CDC類的一個成員方法,該函數(shù)的生命形式如下:COLORREF SetPixel (POINT point,COLORREF crColor);該函數(shù)是在指定的點設(shè)置一個像素。其中第一個參數(shù)(point)是指定的點,第二個
10、參數(shù)(crColor)是指定的顏色。在程序中設(shè)定的顏色在系統(tǒng)顏色表中可能不存在,但系統(tǒng)會選擇一種和這個顏色最接近的顏色。RGB是一個宏,它有三個參數(shù),分別代表紅、綠、藍三種顏色的值。這三個參數(shù)BYTE類型,取值范圍為0255。RGB(0,0,0)是黑色,RGB(255,255,255)是白色,將這三個分量設(shè)置成為0255之間的任意值,從而得到各種不同的顏色。Windows系統(tǒng)為我們提供了一個畫圖程序,在該程序中,利用畫筆可以繪制連續(xù)的線條,繪制連續(xù)的線條,首先要得到線條的起點,然后需要捕獲鼠標移動過程中的每一個點,這可以通過捕獲鼠標移動消息(WM_MOUSEMOVE)來實現(xiàn)。在此消息響應(yīng)函數(shù)中
11、,在依次捕獲的各個點之間繪制一條條非常短的線段,從而就可以繪制出一條連續(xù)的線條。于是,我增加了一個鼠標移動消息(WM_MOUSEMOVE)的響應(yīng)函數(shù)(OnMouseMove)。這樣,只要鼠標在應(yīng)用程序窗口中移動時都會進入到這個消息響應(yīng)函數(shù)中。然后我為CMyview添加一個BOOL型的私有變量Draw,當(dāng)鼠標左鍵按下去時,此變量為真;當(dāng)鼠標左鍵彈起時,此變量為假。主題程序代碼 / 繪圖板View.cpp : implementation of the CMyView class/#include stdafx.h#include 繪圖板.h#include 繪圖板Doc.h#include 繪圖
12、板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, OnLianxuxian)ON_COMMAND(ID_DOT, OnDot)ON_COMMAND(ID_REC
13、GANGLE, 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, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW
14、, 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)/ TODO: Modify the Window class or styles here by modif
15、ying/ 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(CPrintInfo* pInfo)/ default preparationreturn DoPreparePr
16、inting(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#ifdef _DEBUGvoid CMyView:AssertValid() constCView:Asse
17、rtValid();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 handlersvoid CMyView:OnLButtonDown(UINT nFlags, CPoint point) / T
18、ODO: 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:OnLButtonUp(nFlags, point);CClientDC dc(this);switch (DrawTy
19、pe)/繪制橢圓case 1:dc.Ellipse(CRect(savepoint,point);break;/繪制點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;Draw=FALSE;void CMyView:OnMouseMove(UINT nFlags, CPoint point)
20、 / 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.SelectObject(&pen1);if(Draw=true)dc.MoveTo(savepoint); dc.LineTo(point)
21、;/修改線段的起點 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() / TODO: Add your command handler code hereDrawType=3;void CMyView:
22、OnRecgangle() / TODO: Add your command handler code hereDrawType=4;void CMyView:OnLianxuxian() / TODO: Add your command handler code hereDrawType=5;實驗心得: 這次課程設(shè)計我成功的完成了。通過本次課程設(shè)計,我完成了用移動鼠標對直線,矩形,橢圓、連續(xù)線的簡單繪制工具的的制作,其中完成了繪圖形狀的選擇。 基于平時課外上機實驗的練習(xí),對菜單的創(chuàng)建,COMMAND消息處理函數(shù)和 UPDATE_COMMAND_UI消息函數(shù)的添加過程比較熟練,這部分還算簡單。難的是代碼的添加,對繪制圖形的程序有大概的思路,但具體編寫時變量的運用以及函數(shù)的調(diào)用設(shè)置。這次實驗中關(guān)鍵就是確定畫圖起點及終點坐標,因為是用鼠標繪制圖形,所以需用函數(shù)來捕獲鼠標當(dāng)前所在位置的坐標,因此我設(shè)置了OnLButtonDown()函數(shù)來捕獲起點坐標,OnMouseMove()函數(shù)來捕獲鼠標移動是的當(dāng)前位置
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度海外人文與社會科學(xué)留學(xué)合同
- 二零二五年度集體勞動合同在文化創(chuàng)意產(chǎn)業(yè)中的實踐
- 二零二五年度公司員工綠色環(huán)保項目借款協(xié)議
- 二零二五年度租賃地產(chǎn)租賃合同終止條件合同
- 2025年度股票代持業(yè)務(wù)合作協(xié)議書
- 二零二五年度股東權(quán)益變更及股份分割協(xié)議書
- 二零二五年度甲方解除旅游服務(wù)合同的解除條件和游客權(quán)益保障
- 第四章、無輻射躍遷
- 2025年廣州貨運從業(yè)資格證500道題目及答案
- 2025年吳忠駕駛員貨運從業(yè)資格證模擬考試題
- 北京大學(xué)- DeepSeek如何提示詞工程和落地場景分析
- (完整版)第五章養(yǎng)殖場環(huán)境保護
- 2025年江蘇省南京市鍋爐壓力容器檢驗研究院招聘20人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 婦女保健知識講座課件
- 祖國版圖知識主題班會
- 上海2025年上海商學(xué)院招聘筆試歷年參考題庫附帶答案詳解-1
- 2025年上半年東方電氣集團科學(xué)技術(shù)研究院限公司公開招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 2025云南昆明空港投資開發(fā)集團招聘7人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 征信異議申請書
- 高中不同主題閱讀理解高頻詞匯清單-2025屆高三下學(xué)期英語一輪復(fù)習(xí)專項
- 2025年上半年高郵市國資產(chǎn)投資運營限公司(國企業(yè))公開招聘工作人員易考易錯模擬試題(共500題)試卷后附參考答案
評論
0/150
提交評論