版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、VC+ 程序設計實驗報告一、實驗目的掌握 MFC 編程二、實驗內(nèi)容用 MFC 向?qū)?chuàng)立單文檔應用程序,一個簡單的畫圖程序。使用 C 語言實現(xiàn)使用 VC 集成開發(fā)環(huán)境開發(fā)使用 MFC 應用程序開發(fā)框架三、實驗步驟根本功能描述1. 翻開 exe 文件,在繪圖下拉菜單中可分別設置繪制的圖形形狀, 如直線、 曲線、矩形及橢圓,線寬選項,有 1-6 可供選擇,線型選項有實線、虛線、點線 和點段線供設置, 還可以設置線色以及填充色, 通過彈出的顏色對話框選擇需要 的顏色,如果不選擇線寬、線色以及填充色,那么按默認的畫筆,畫刷來繪制選擇 的圖形。2. 選擇好圖形后, 通過鼠標可以繪制出相應的直線, 矩形或橢
2、圓, 鼠標的 按下確定圖形的起點, 鼠標的拖動那么確定了圖形的終點, 即通過鼠標的拖動來決 定圖形的大小,當鼠標彈起,此圖形那么繪制完畢。設計思路1. 對需要用到的變量進行初始化。2. 選擇相應的圖形之后就響應相應的消息處理函數(shù),給shape賦對應的值。 選擇不同的線寬,線色與填充色,即可改變畫筆或畫刷的屬性。3. 鼠標的按下響應函數(shù) OnLButtonDown() ,捕捉鼠標當前位置得到起點的坐標,鼠標的拖動響函數(shù)On MouseMove()改變終點的坐標,鼠標的彈起響應OnLButtonUp(),確定終點坐標,刷新,得到繪制圖形。4. 選擇圖形或其它屬性,可進行下一次繪制。軟件設計A 設計
3、步驟1. 創(chuàng)立單文檔創(chuàng)立一個MFC AppWizardexe工程,命名為“ DraW',如圖1所示,并創(chuàng) 建單文檔,如圖 2 所示。創(chuàng)立成功后,系統(tǒng)自動生成相應的類,如圖 3 所示。SH文件工程工作區(qū)具它文檔|HIT AppWieiM hke:|.53 AIL COM AppWizard jCluGlrHesvurEfi lype Wizard jCustcm AppWIzavd Dalaliasc Prujccl -DcyStucilfl Add in Wizard 雪 Extended Stared Proc Wlaard rCISAPI Extcpiiun WizarrjMake
4、filecjjMFC ActiveX Con(trDlWi2ard £MrC! AiipWIzanl dll rJNew Dalsbase Wizard 科 Ullllly ProjectWin32 AppliestiAn"HWinJ2 Console Application Win 12 DyniiiiilE-lJnk Library WinJS Static Libraiy工程容稱副:|nraw曹置園:|DU>r4W包建新藥_悴蘭間凹希加到當莉工件空膽回F辰屬于1D:I3平白回“Wi屁確定甲消圖1創(chuàng)立工程圖2創(chuàng)立單文檔+ F CDrawDcc + ; CDrawV
5、ie+ CMainFrameS O Globals圖3生成類2. 編輯菜單添加需要的菜單項,如圖4所示;并在菜單的屬性中設定好所對應的ID,如圖5所示,各項菜單對應的ID如表1所示其中線寬菜單為彈出菜單,只需 在菜單工程屬性中的彈出選項前打勾即可, 分隔線亦只需在菜單工程屬性中選中 分隔符選項即可。圖4添加菜單項京件老編輯6查看幫助®繪圖血1直線曲踐妁 碩色埴充芭世線寬如i二 1"z34£&廠1圖5設置菜單ID 表1 菜單項對應ID菜 單 名ID菜單名ID菜單名ID直線ID_LINE線寬1ID_W1實線ID_SOLID矩 形ID_RECT線寬2ID_W2虛
6、線ID_DASH橢 圓ID_ELLIPS E線寬3ID_W3點線ID_DOT顏色ID_COLOR線寬4ID_W4點段線ID_DASHDOT填充色ID_FILLCO LOR線寬5ID_W5建立類向?qū)В谝晥D類CDrawView中,對各菜單項添加對應的 COMMAND 消息處理函數(shù),局部菜單項還添加對應的 UPDATE_COMMAND_UI消息函數(shù), 如圖6所示。r?ixiMessage MapsMember VarisiblcsAutomationAcliveX LventsClass IntoClbge name;CDrmrtfltwPrtjecl:DiiiwF:g r和 RrawVI pw
7、.ti F:D r為wn r *wVir w. epp OhjcdlOs;lMes5ay.CSCDrwViicw ID APP_ABOUT IDAPFLEXrT IU COLORID CURVEID UASHID DASHDOTMember funcliuns;V OnBcgEnPrinling W OnColorW OnCmrvttW OnDaehW OnDachdotne-scripllnn:COMMANDUPDATE COMMAND UlON_ID_COLORXOUMAND ONJD.CIJR'/FOMMAND OND DASH: CO MM AMD UN ID DASHDOTX
8、OMMAND慣定圖6建立類向?qū)?.在相應消息函數(shù)處添加代碼,實現(xiàn)其功能建立類向?qū)?,在視圖類 CDrawView中,添加 WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE 消息,并在其中添加相應的代碼。B關鍵功能實現(xiàn)1.選擇要繪制的圖形在直線、矩形以及橢圓的消息處理函數(shù)里為shape分別賦值為1,2,3,在On Pai nt()函數(shù)里添加3個if語句的代碼來這實現(xiàn)這三個圖形的繪制:中選擇畫 直線時,shape=1,那么執(zhí)行繪制直線代碼,中選擇畫矩形時,shape=2,那么執(zhí)行繪制矩形的代碼,當性選擇畫橢圓時,shape=3,那么執(zhí)行繪制橢
9、圓的代碼。2.改變線寬在 On Pai nt()創(chuàng)立的畫筆中,pe n.CreatePe n( pe nstyle,wm_nColor),線寬處用 w表示,那么改變w的值即改變了畫筆的粗細。選擇菜單繪圖一線寬選擇劃線寬 度值,此時所選的線寬值就賦給線寬變量w。假設不選擇線寬值,那么 w=1(即默認線寬值為1)。3. 改變線型在 On Pai nt()創(chuàng)立的畫筆中,pe n.CreatePe n( pe nstyle,wm_nColor),線型處用 pen style表示,那么改變pen style的值即改變了畫筆的類型。選擇菜單繪圖線型 選擇線型,此時所選的線型就賦給線型變量pen style
10、。假設不選擇線型值,那么penstyle=ID_SOLID(即默認線型為實線)。4. 改變線色在 On Pai nt()創(chuàng)立的畫筆中,pe n.CreatePe n( pe nstyle,wm_nColor),線的顏色 處用 m_nColor 表示,那么改變 m_nColor 即改變了畫筆的顏色。選擇菜單繪圖 顏色,會彈出通過 WM_COLORREF 從系統(tǒng)中引入的顏色選擇對話框, 選擇顏色 后,點擊確定那么相應顏色值就賦給變量m_nColor,此時畫筆的顏色就會發(fā)上變化。假設不選擇顏色,那么默認線顏色為黑色。4. 改變填充色在 On Pai nt()創(chuàng)立的畫刷中,brush.CreateSo
11、lidBrush(m_fColor),顏色就是用 m_fColor 表示的,改變 m_fColor 即改變了畫刷的顏色。 選擇菜單繪圖填充色, 會彈出通過 WM_COLORREF 從系統(tǒng)中引入的顏色選擇對話框, 選擇顏色后, 點 擊確定那么相應顏色值就賦給變量m_fColor,此時畫刷的顏色就會發(fā)上變化。假設不選擇顏色,那么默認填充色為黑色。5. 繪制圖形鼠標左鍵按下, 那么捕獲鼠標此時的位置坐標 為畫圖的起點, 此時在 On LButto nDow n()函數(shù)里,將捕獲的坐標值賦給定義作為起點的變量opoi nt;按下鼠標左鍵拖動鼠標時,捕捉鼠標當前位置坐標值為終點坐標值,此時在 On Mo
12、useMove()函數(shù)里,把捕獲的坐標值賦給定義作為終點的變量cpoi nt,On Pai nt()中繪圖的代碼中的坐標都得到了,進行繪圖;鼠標左鍵彈起時,此時繪 圖結(jié)束,鼠標彈起時所在位置就是畫圖的最終終點位置, 畫圖結(jié)束后,刷新窗口, 以便重新畫圖,此時執(zhí)行的是 OnLButtonUp()函數(shù)。四、 結(jié)果及源代碼4.1 運行結(jié)果1. 點擊鏈接,編譯,運行后的窗口如圖 7 所示。圖7運行結(jié)果4.2程序代碼CDrawView:CDrawView()w=1;初始狀態(tài)時線寬shap e=1;初始狀態(tài)時形狀m_nColor=RGB(0,0,0);初始狀態(tài)時線色 m_fColor=RGB(0,0,0)
13、;初始狀態(tài)時填充色 penstyle=PS_SOLID;初始化線型為實線 void CDrawView:O nLi ne() shape=1;void CDrawView:OnRect()shape=2;void CDrawView:OnEllipse()shape=3;void CDrawView:OnW1()w=1;void CDrawView:OnW2()w=2;void CDrawView:OnW3()w=3;void CDrawView:OnW4()w=4;void CDrawView:OnW5()w=5;void CDrawView:OnW6()w=6;4. 線型選擇函數(shù)void
14、CDrawView:OnSolid()penstyle=PS_SOLID;void CDrawView:OnDash()penstyle=PS_DASH;penstyle=PS_DOT;void CDrawView:OnDashdot()penstyle=PS_DASHDOT;5. 顏色選擇函數(shù)void CDrawView:OnColor()CColorDialog Color;/ 創(chuàng)立顏色對話框 if(Color.DoModal()=IDOK)/ 如果用戶點擊 OK 按鈕 m_nColor=Color.GetColor();/ 更改顏色 ,把顏色賦到 m_nColor6. 填充色選擇函數(shù)vo
15、id CDrawView:OnFullcolor()CColorDialog FullColor;/ 創(chuàng)立顏色對話框 if(FullColor.DoModal()=IDOK)/ 如果用戶點擊 OK 按鈕 m_fColor=FullColor.GetColor();/ 更改顏色 ,把顏色賦到 m_nColor7. 單擊、移動、繪畫函數(shù)void CDrawView:OnLButtonDown(UINT nFlags, CPoint point) m_Down=TRUE;/鼠標按下SetCapture(); opoint=point; ReleaseCapture();/獲取坐標/ 把鼠標所在坐標賦
16、給起點坐標 opoint /釋放坐標CView:OnLButtonDown(nFlags, point);void CDrawView:OnLButtonUp(UINT nFlags, CPoint point)m_Down=FALSE;/ 鼠標不按下,即彈起Invalidate(0);/ 刷新CView:OnLButtonUp(nFlags, point);void CDrawView:OnMouseMove(UINT nFlags, CPoint point)if(m_Down)/如果鼠標按下 cpoint=point; /把鼠標所在點坐標賦給終點坐標 cpoint CClientDC d
17、c(this);if(4=shape)/ 畫曲線CPen pen(PS_SOLID,10,RGB(255,0,0); CPen *oldpen=dc.SelectObject(&pen); dc.MoveTo(opoint);dc.LineTo(cpoint); dc.SelectObject(oldpen); opoint=cpoint;CView:OnMouseMove(nFlags, point);void CDrawView:OnPaint()CPaintDC dc(this); / device context for paintingCPen pen;/ 定義畫筆CBrus
18、h brush;/ 定義畫刷pen.CreatePen(penstyle,w, m_nColor); /創(chuàng)立畫筆 brush.CreateSolidBrush(m_fColor);/創(chuàng)立畫刷dc.SelectObject(&pen);/獲取畫筆dc.SelectObject(&brush);/獲取畫刷if(1=shape)/ 畫直線 dc.MoveTo(opoint.x,opoint.y); dc.LineTo(cpoint.x,cpoint.y); / 繪制直線 ,從 opoint 到 cpoint 連線if(2=shape)/ 畫矩形dc.Rectangle(opoint.
19、x,opoint.y,cpoint.x,cpoint.y); / 繪制矩形if(3=shape)/ 畫橢圓dc.Ellipse(opoint.x,opoint.y,cpoint.x,cpoint.y);/ 繪制橢圓8. 菜單勾選函數(shù)void CDrawView:OnUpdateLine(CCmdUI* pCmdUI)pCmdUI->SetCheck(shape=1); /shape 為 1 時,直線選項前打上勾pCmdUI->SetCheck(shape=2); /shape 為 2 時,直線選項前打上勾void CDrawView:OnUpdateEllipse(CCmdUI* pCmdUI)pCmdUI->SetCheck(shape=3); /shape 為 3 時,直線選項前打上勾void CDrawView:OnUpdateW1(CCmdUI* pCmdUI)pCmdUI->SetRadio(w=1);/當線寬為 1 時,此選項前標有圓點void CDrawView:OnUpdateW2(CCmdUI* pCmdUI)pCmdUI->SetRadio(w=2);/當線寬為 2 時,此選項前標有圓點void CDrawView:OnUpdateW3(CCmdUI* pCm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人倉儲租賃合同范本
- 水泵購買合同
- 綠色電子元器件生產(chǎn)合同
- 貨車轉(zhuǎn)讓合同協(xié)議書
- 中外合資經(jīng)營合同范本(建筑材料)
- 個人與公司租房合同樣本參考
- 專利技術合同轉(zhuǎn)讓合同
- 中小企業(yè)板塊上市證券合同范本
- 個人勞動合同范本:版
- 中保人壽子女教育婚嫁備用金保險合同細則(97版修訂)
- 《西方思想經(jīng)典》課件
- 中醫(yī)診療設備種類目錄
- 戰(zhàn)略管理與倫理
- 如何構建高效課堂課件
- 徐金桂行政法與行政訴訟法新講義
- 瀝青拌合設備結(jié)構認知
- GB/T 13234-2018用能單位節(jié)能量計算方法
- (課件)肝性腦病
- 北師大版五年級上冊數(shù)學教學課件第5課時 人民幣兌換
- 工程回訪記錄單
- 高考物理二輪專題課件:“配速法”解決擺線問題
評論
0/150
提交評論