《軟件建模與實(shí)踐》課件-11-基于泛化特性的矢量繪圖軟件_第1頁
《軟件建模與實(shí)踐》課件-11-基于泛化特性的矢量繪圖軟件_第2頁
《軟件建模與實(shí)踐》課件-11-基于泛化特性的矢量繪圖軟件_第3頁
《軟件建模與實(shí)踐》課件-11-基于泛化特性的矢量繪圖軟件_第4頁
《軟件建模與實(shí)踐》課件-11-基于泛化特性的矢量繪圖軟件_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

11.1需求分析矢量圖形是由點(diǎn)、線、矩形、多邊形、圓和弧線等圖形元素構(gòu)成的利用面向?qū)ο蟮某绦蛟O(shè)計(jì)和類的組織方法,設(shè)計(jì)實(shí)現(xiàn)一個(gè)基本矢量圖形繪制系統(tǒng)系統(tǒng)能夠處理直線、矩形、圓、橢圓、橡皮擦、標(biāo)注文本等幾類基本圖形元素采用泛化關(guān)系建立起它們之間的繼承關(guān)系11.2設(shè)計(jì)過程圖形元素類派生結(jié)構(gòu)11.3具體實(shí)現(xiàn)1.創(chuàng)建MyDraw項(xiàng)目(1)(2)(3)2.創(chuàng)建Ribbon功能區(qū)在Ribbon界面下,CMainFrame類包含了三個(gè)成員變量:m_wndRibbonBar、m_MainButton和m_wndStatusBar,分別用于控制Ribbon界面的命令面板、應(yīng)用程序按鈕和狀態(tài)欄。在創(chuàng)建Ribbon功能區(qū)前,首先需要通過第三方圖像處理軟件(如PhotoShop)創(chuàng)建兩個(gè)格式為32位的bmp文件。(1)在創(chuàng)建32位位圖后,將位圖文件復(fù)制到項(xiàng)目目錄下的res目錄中,并將大位圖文件和小位圖文件分別重命名為large.bmp和small.bmp。然后,在“ResourceView”資源視圖中選擇“Bitmap”分支,單擊右鍵選擇“AddResource”菜單命令,彈出“AddResource”對話框。(2)單擊“AddResource”中的“Import”按鈕以導(dǎo)入res目錄下的large.bmp和small.bmp位圖文件。然后在“Properties”屬性窗口中分別修改位圖資源的ID為IDB_LARGE和IDB_SMALL,?Ribbon界面用新的RibbonBar代替了傳統(tǒng)的菜單欄。默認(rèn)情況下,RibbonBar已經(jīng)擁有了一個(gè)名為“Home”的命令分組(Category),其中又包含了多個(gè)面板(Panel),每個(gè)面板中有一個(gè)或者多個(gè)命令按鈕(RibbonButton)。在“ResourceView”中,展開MyDraw.rc→Ribbon→IDR_RIBBON節(jié)點(diǎn)。雙擊該文件打開RibbonDesigner界面(4)創(chuàng)建“繪圖”類別。(5)創(chuàng)建“工具”面板命令項(xiàng)(6)仿照第(5)步的步驟添加“顏色”面板,并為“工具”和“顏色”面板添加表11-1所示的命令項(xiàng)。標(biāo)題ID隸屬面板ImageIndexLargeImageIndex鉛筆ID_DRAW_PEN工具00直線ID_DRAW_LINE工具11矩形ID_DRAW_RECT工具22橢圓ID_DRAW_ELLIPSE工具33圓ID_DRAW_CIRCLE工具44分隔符無工具

橡皮擦ID_DRAW_ERASER工具88文本輸出ID_DRAW_TEXT工具99畫筆顏色I(xiàn)D_DRAW_COLOR顏色1010填充顏色I(xiàn)D_FILL_COLOR顏色1111(7)創(chuàng)建Ribbon功能區(qū)后,選擇“生成”→“生成解決方案”菜單命令以編譯整個(gè)項(xiàng)目,然后選擇“調(diào)試”→“開始執(zhí)行(不調(diào)試)”菜單命令運(yùn)行程序。3.新建繪圖類設(shè)計(jì)一個(gè)繪圖基類CDraw,完成不同圖形的繪制和顏色填充等功能(1)添加CDraw類(2)在CDraw類的定義中添加如下黑體代碼#pragmaonce//CDrawcommandtargetclassCDraw:publicCObject{public:

COLORREFm_ColorPen;

//筆色

COLORREFm_ColorBrush; //填充顏色public:

CDraw();

virtual~CDraw();

CDraw(COLORREFColorPen,COLORREFColorBrush)

{//構(gòu)造函數(shù)

m_ColorPen=ColorPen;

m_ColorBrush=ColorBrush;

} virtualvoidDraw(CDC*pDC)=0;};(3)向工程中添加CDraw類的派生類CLine(直線類)、CRectangle(矩形類)、CCircle(圓類)、CEllipse(橢圓類)、CErase(橡皮擦類)、CText(文本類)。如:添加CLine類Line.h的代碼如下:Line.cpp的代碼如下:4.響應(yīng)繪圖命令(1)在CMyDrawView類的頭文件中添加包含“Draw.h”的頭文件代碼,然后在該類的定義中添加三個(gè)成員變量,以分別保存當(dāng)前的繪圖類型、繪圖顏色及填充顏色(2)在“ClassView”類視圖中選中CMyDrawView,并在屬性窗口中單擊“Messages”按鈕,為消息WM_CREATE添加消息響應(yīng)函數(shù),在該函數(shù)中初始化新添加的成員變量(3)為工具命令添加消息響應(yīng)函數(shù)。在“ResourceView”中,展開MyDraw.rc->Ribbon->IDR_RIBBON節(jié)點(diǎn)。在編輯區(qū)右鍵單擊“鉛筆”按鈕,選擇“AddEventHandler”,在彈出的“EventHandlerWizard”對話框中,為ID_DRAW_PEN添加CMyDrawView類的WM_COMMAND消息響應(yīng)函數(shù)4.響應(yīng)繪圖命令4.響應(yīng)繪圖命令分別為工具面板的命令I(lǐng)D_DRAW_PEN、ID_DRAW_LINE等添加WM_COMMAND消息的響應(yīng)函數(shù),并在這些函數(shù)中分別根據(jù)繪制的圖形類型來設(shè)置m_nDrawShape成員變量

當(dāng)單擊Ribbon工具面板上的繪圖按鈕后,需要設(shè)置該按鈕為選中狀態(tài),可以通過在屬性窗口中為這些工具命令響應(yīng)UPDATE_COMMAND_UI消息來實(shí)現(xiàn)。在這些消息響應(yīng)函數(shù)中根據(jù)判斷是否以當(dāng)前繪圖類型類設(shè)置工具按鈕為選中狀態(tài)(4)同樣為顏色面板命令I(lǐng)D_DRAW_COLOR和ID_FILL_COLOR在CMyDrawView中添加WM_COMMAND消息的響應(yīng)函數(shù)。在這兩個(gè)函數(shù)中通過創(chuàng)建CMFCColorDialog類的對象來彈出Office中的顏色對話框,并將用戶選擇的顏色值分別保存到m_crDrawColor和m_crFillColor成員變量中4.響應(yīng)繪圖命令5.實(shí)現(xiàn)圖形繪制(1)在“ClassView”視圖下雙擊CMyDrawView類,打開MyDrawView.h文件,為CMyDrawView類添加用于保存繪圖狀態(tài)的成員變量(2)在CMyDrawView類的OnCreate函數(shù)中設(shè)置m_bDrawShape的初值,添加如下黑體代碼5.實(shí)現(xiàn)圖形繪制(3)響應(yīng)鼠標(biāo)左鍵按下事件,并開始繪制圖形。在類視圖中選擇CMyDrawView,然后單擊屬性窗口的“Messages”按鈕,添加WM_LBUTTONDOWN消息的響應(yīng)函數(shù)。在該函數(shù)中根據(jù)繪圖的類型m_nDrawShape來創(chuàng)建CDrawShape對象,并調(diào)用該對象的StartDraw成員函數(shù)來開始繪制圖形5.實(shí)現(xiàn)圖形繪制5.實(shí)現(xiàn)圖形繪制(4)同樣地,為CMyDrawView類添加鼠標(biāo)移動WM_MOUSEMOVE消息的響應(yīng)函數(shù)。在該消息的響應(yīng)函數(shù)中根據(jù)選擇的繪圖類型,調(diào)用CDC類繪制圖形(5)為CMyDrawView類添加WM_LBUTTONUP消息的響應(yīng)函數(shù)。取消光標(biāo)的限制,并設(shè)置m_bDrawShape為FALSE以結(jié)束圖形的繪制(6)以上程序已經(jīng)可以實(shí)現(xiàn)簡單的繪圖功能,但是當(dāng)我們改變窗口大小時(shí),繪制的圖形會消失,因此需要對繪制的圖形進(jìn)行保存,使用MFC類模板實(shí)現(xiàn)。(7)當(dāng)移動鼠標(biāo)時(shí),除了繪制線段,還要保存當(dāng)前線段的起點(diǎn)和終點(diǎn)坐標(biāo)。(8)在OnDraw函數(shù)中重繪前面用鼠標(biāo)所繪制的線段。(9)編譯鏈接運(yùn)行結(jié)果如圖所示。6.保存繪制的圖形根據(jù)序列化知識,以直線類為例,使用序列化函數(shù)Serialize實(shí)現(xiàn)圖形的保存。(1)在CLine類的聲明頭文件中添加函數(shù)Serialize的聲明和DECLARE_SERIAL宏(2)在CLine的實(shí)現(xiàn)文件中成員函數(shù)的定義前添加IMPLEMENT_SERIAL宏(3)在文檔類中完成所有線段的讀寫操作。修改文檔類的序列化函數(shù)(4)為了在執(zhí)行File|New時(shí)能將當(dāng)前客戶窗口中所繪制的圖形清除,要重載文檔類的虛函數(shù)DeleteContents(5)為程序增加提示保存功能。修改文檔類的成員函數(shù)AddLine(6)編譯連接運(yùn)行7.實(shí)現(xiàn)文本輸出(1)在CMyDrawView類聲明中添加用于保存插入符位置、文本內(nèi)容、文本顏色等的成員變量(2)在CMyDrawView類的OnCreate函數(shù)中創(chuàng)建默認(rèn)的字體,以及初始化其他成員變量等(3)為CMyDrawView類添加應(yīng)用程序窗口獲得焦點(diǎn)和失去焦點(diǎn)WM_SETFOCUS和WM_KILLFOCUS消息的響應(yīng)函數(shù)。這兩個(gè)函數(shù)分別用來創(chuàng)建插入符和刪除插入符(4)在鼠標(biāo)左鍵按下時(shí)的消息響應(yīng)函數(shù)OnLButtonDown中設(shè)置插入符位置,并開始接收文本輸入并顯示。(5)為CMyDrawView類添加字符消息WM_CHAR的消息響應(yīng)函數(shù)。在該函數(shù)中響應(yīng)字符輸入,并保存到m_strTextBuf成員變量中,然后調(diào)用設(shè)備環(huán)境的TextOut顯示文本8.修改繪圖光標(biāo)(1)在資源視圖中選擇項(xiàng)目名節(jié)點(diǎn)并右擊,在彈出的快捷菜單中選擇“添加”→“資源”菜單命令,彈出“添加資源”對話框。在對話框中選擇“Cursor”資源類型,然后分別向項(xiàng)目中添加四個(gè)光標(biāo)資源修改繪圖光標(biāo)(2)為CMyDrawView類添加WM_SETCURSOR消息的響應(yīng)函數(shù),并在該函數(shù)中調(diào)用LoadCursor和SetCursor來加載、設(shè)置光標(biāo)BOOLCMyDrawView::OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage){if(m_nDrawShape==SHAPE_PEN)SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));

//畫筆光標(biāo)elseif(m_nDrawShape==SHAPE_TEXT)SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR2));

//文本輸入光標(biāo)elseif(m_nDrawSh

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論