完整word版,C++实验报告(MFC简单画图程序).docx

上传人:scccc 文档编号:14705542 上传时间:2022-02-15 格式:DOCX 页数:13 大小:88.71KB
返回 下载 相关 举报
完整word版,C++实验报告(MFC简单画图程序).docx_第1页
第1页 / 共13页
完整word版,C++实验报告(MFC简单画图程序).docx_第2页
第2页 / 共13页
完整word版,C++实验报告(MFC简单画图程序).docx_第3页
第3页 / 共13页
完整word版,C++实验报告(MFC简单画图程序).docx_第4页
第4页 / 共13页
完整word版,C++实验报告(MFC简单画图程序).docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《完整word版,C++实验报告(MFC简单画图程序).docx》由会员分享,可在线阅读,更多相关《完整word版,C++实验报告(MFC简单画图程序).docx(13页珍藏版)》请在三一文库上搜索。

1、VC+程序设计实验报告一、实验目的掌握MFC编程二、实验内容用MFC向导创建单文档应用程序,一个简单的画图程序。使用C + +语言实现使用VC + + 6.0集成开发环境开发使用MFC应用程序开发框架三、实验步骤基本功能描述1 .打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状, 如直线、 曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线 和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要 的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择 的图形。2 .选择好图形后,通过鼠标可以绘制出相应的直线, 矩形或椭圆,鼠标的 按

2、下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决 定图形的大小,当鼠标弹起,此图形则绘制完毕。设计思路1 .对需要用到的变量进行初始化。2 .选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。 选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。3 .鼠标的按下响应函数 OnLButtonDown(),捕捉鼠标当前位置得到起点的 坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。4 .选择图形或其它属性,可进行下一次绘制。软件设计A设计步骤1.创建单文档创建一个M

3、FC AppWizardexe工程,命名为“ DraW,如图1所示,并创 建单文档,如图2所示。创建成功后,系统自动生成相应的类,如图 3所示。r?iTxi珈pWiznrd cmM文件工程工作区其它文档ATI COM 赢WizardjCluder ResvurEe lype Wizard 菰Custom AppV/lzartlDalabasc Project蹩 Uev审udin Add lin Wizard宙 Extended Stared Proc Wl2ardfllSAPI Exteridit Wizard MAketilc编MFC ActiveX ContfolWl2flrd SMFCA

4、npWIzanlNII tNew Daiabace Wizard # Utility Prujrd LI: Win32 ApplicetionWin32 Conacle ApplicationWiiHP DyimmlLI ink I ihrry Win32 Static Library工程名称网:|nrau/密置脚|DUraw叱T创建新的工作空间但1广添加到当前工,僧空恒国k辰十15:I平台阻1 Wi岳庭定一| 取消 |图1创建工程Applicatnol - DdcabcbI: IC应用程用向导-步寿1? |X您要创建的应用程序类型是:行里复档倒多重文档(MJ广基本对话框圜审文档;查看体系结构

5、支持M您的资源使用的语言是:|中文冲国(APPWZCHS?DLLr完成取精图2创建单文档Draw classes : CAboutDlg 七 CDrawApp l; CDrawDoc CDrawView 配 CMainFrame I I Globals图3生成类2 .编辑菜单添加需要的菜单项,如图4所示;并在菜单的属性中设定好所对应的 ID, 如图5所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需 在菜单项目属性中的弹出选项前打勾即可, 分隔线亦只需在菜单项目属性中选中 分隔符选项即可)。变件的 端辑国)查看 帮助 绘图如直线&) 矩形包 椭圆 曲线助越色 埴充色促)G.i文件

6、在)编辑口)杳者包)帮助如 绘图 厂一图4添加菜单项K3I卡1 曾 General | Extended StylesD: ID LIMECaption1 |直线SeparatorPop-upI- InactiveBreak! Nane *P CheckedGrayedF HdpPrompt:图5设置菜单ID表1 菜单项对应ID菜 单 名ID菜单名ID菜单名ID直线ID_LINE线宽1ID_W1实线ID_SOLID矩 形ID_RECT线宽2ID_W2虚线ID_DASH椭 圆ID_ELLIPS E线宽3ID_W3点线ID_DOT颜 色ID_COLOR线宽4ID_W4点段线ID_DASHDOT填

7、充 色ID_FILLCOLOR线宽5ID_W5建立类向导,在视图类CDrawView中,对各菜单项添加对应的 COMMAND 消息处理函数,部分菜单项还添加对应的 UPDATE_COMMAND_UI消息函数, 如图6所示。1FC ClaEsfcsaEdRMMessage MapsProjectMember VariablesAuta mationZdiveX EventsClaec nm:CDrwVirtvrClass IntoF:田 ravAnrmwVI z .ti. F:D r坤项n riwVir w. epp ObjcdlOs;Mcssaiirs:CD Q Wie*ID AFP ABOU

8、TID 二APP二 EXFTIUcolorCOMMAND UPDATL COMMAND UI,ID CUR/rID DASHID DAS HDOTMcnibcr funcdonslV OriBeqinPrirlingW OhCukrW OnCurvtW OnDafihON_ID_COLORXOWMAND riN_ID_CURVF:COMMANO ON ID DASH:COMMAMD八FiV/ UnDashdotON ID UASHUU1XUMMANU取消图6 建立类向导3 .在相应消息函数处添加代码,实现其功能建立类向导,在视图类 CDrawView中,添加 WM_PAINT消息,以及WM_L

9、BUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE 消息,并在 其中添加相应的代码。B关键功能实现1 .选择要绘制的图形在直线、矩形以及椭圆白消息处理函数里为shape分别赋值为1,2,3 ,在OnPaint()函数里添加3个if语句的代码来这实现这三个图形的绘制:当选择画 直线时,shape=1,则执行绘制直线代码,当选择画矩形时,shape=2,则执行绘制矩形的代码,当性选择画椭圆时,shape=3,则执行绘制椭圆的代码。2 .改变线宽在 OnPaint()创建的画笔中,pen.CreatePen(penstyle,wm_nColor),线宽处用 w表示,则改变w的值

10、即改变了画笔的粗细。选择菜单绘图一线宽选择划线宽 度值,此时所选的线宽值就赋给线宽变量wo若不选择线宽值,则 w=1(即默认线宽值为1)。3 .改变线型在 OnPaint()创建的画笔中,pen.CreatePen(penstyle,wm_nColor),线型处用 penstyle表示,则改变penstyle的值即改变了画笔的类型。选择菜单绘图线型 选择线型,此时所选的线型就赋给线型变量penstyleo若不选择线型值,则penstyle=ID_SOLID(即默认线型为实线)。4 .改变线色在 OnPaint()创建的画笔中,pen.CreatePen(penstyle,wm_nColor),

11、线的颜色 处用m_nColor表示,则改变 m_nColor即改变了画笔的颜色。选择菜单绘图 颜色,会弹出通过 WM_COLORREF从系统中引入的颜色选择对话框, 选择颜色 后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。若不选择颜色,则默认(线)颜色为黑色。5 .改变填充色在 OnPaint(见【J建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用 m_fColor表示的,改变m_fColor即改变了画刷的颜色。选择菜单绘图填充色, 会弹出通过 WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相

12、应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。若不选择颜色,则默认填充色为黑色。6 .绘制图形鼠标左键按下,则捕获鼠标此时的位置坐标为画图的起点,此时在 OnLButtonDown()函数里,将捕获的坐标值赋给定义作为起点的变量opoint;按下鼠标左键拖动鼠标时,捕捉鼠标当前位置坐标值为终点坐标值,此时在 OnMouseMove()函数里,把捕获的坐标值赋给定义作为终点的变量cpoint,OnPaint()中绘图的代码中的坐标都得到了,进行绘图;鼠标左键弹起时,此时绘 图结束,鼠标弹起时所在位置就是画图的最终终点位置,画图结束后,刷新窗口,以便重新画图,此时执行的是 OnL

13、ButtonUp()函数。 四、结果及源代码4.1 运行结果1 .点击链接,编译,运行后的窗口如图 7所示。口叵区匹;无标蔻-Draw文件编辑宣看9帮助出)绘图 6 B & I * 叠雪就碧 I r /图7 运行结果4.2 程序代码1 .在视图类构造函数中对各定义变量初始化CDrawView:CDrawView()w=1;/初始状态时线宽shape=1;/初始状态时形状m_nColor=RGB(0,0,0);初始状态时线色m_fColor=RGB(0,0,0);初始状态时填充色 penstyle=PS_SOLID;初始化线型为实线 2 .形状函数void CDrawView:OnLine()

14、shape=1;void CDrawView:OnRect()shape=2;void CDrawView:OnEllipse()shape=3;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 .线型选择函数void CDrawView:OnSolid()penstyle=PS_SOLID;void CDrawView:On

15、Dash()penstyle=PS_DASH;penstyle=PS_DOT;void CDrawView:OnDashdot()penstyle=PS_DASHDOT;5 .颜色选择函数 void CDrawView:OnColor() CColorDialog Color;/创建颜色对话框 if(Color.DoModal()=IDOK) 如果用户点击 OK 按钮 m_nColor=Color.GetC010r(); 更改颜色,把颜色赋到 m_nColor 6 .填充色选择函数 void CDrawView:OnFullcolor() CColorDialog FullColor;/ 创建

16、颜色对话框 if(FullColor.DoModal()=IDOK)如果用户点击 OK 按钮m_fColor=FullColor.GetC010r(); 更改颜色,把颜色赋到 m_nColor 7 .单击、移动、绘画函数m_Down=TRUE;SetCapture();opoint=point;ReleaseCapture();void CDrawView:OnLButtonDown(UINT nFlags, CPoint point) /鼠标按下/获取坐标/把鼠标所在坐标赋给起点坐标opoint释放坐标CView:OnLButtonDown(nFlags, point);void CDraw

17、View:OnLButtonUp(UINT nFlags, CPoint point) m_Down=FALSE;鼠标不按下,即弹起Invalidated);刷新CView:OnLButtonUp(nFlags, point);void CDrawView:OnMouseMove(UINT nFlags, CPoint point) if(m_Down) 如果鼠标按下cpoint=point;把鼠标所在点坐标赋给终点坐标cpointCClientDC dc(this);if(4=shape)/ 画曲线 CPen pen(PS_SOLID,10,RGB(255,0,0);CPen *oldpen

18、=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;/定义画笔CBrush brush;定义画刷pen.CreatePen(penstyle,w, m_nColor); 创建画笔brush.CreateSolidBrush(m_f

19、Color);创建画刷dc.SelectObject(&pen);获取画笔dc.SelectObject(&brush);/ 获取画刷if(1=shape)/ 画直线dc.MoveTo(opoint.x,opoint.y);dc.LineTo(cpoint.x,cpoint.y);/ 绘制直线,从 opoint 至U cpoint 连线 if(2=shape)/ 画矩形dc.Rectangle(opoint.x,opoint.y,cpoint.x,cpoint.y); / 绘制矩形if(3=shape)/ 画椭圆dc.Ellipse(opoint.x,opoint.y,cpoint.x,cpo

20、int.y); 绘制椭圆8 .菜单勾选函数void CDrawView:OnUpdateLine(CCmdUI* pCmdUI)pCmdUI-SetCheck(shape=1); /shape为 1 时,直线选项前打上勾void CDrawView:OnUpdateRect(CCmdUI* pCmdUI)pCmdUI-SetCheck(shape=2); /shape为 2 时,直线选项前打上勾 void CDrawView:OnUpdateEllipse(CCmdUI* pCmdUI) pCmdUI-SetCheck(shape=3); /shape为 3 时,直线选项前打上勾void CD

21、rawView:OnUpdateW1(CCmdUI* pCmdUI) pCmdUI-SetRadio(w=1); 当线宽为1时,此选项前标有圆点void CDrawView:OnUpdateW2(CCmdUI* pCmdUI) pCmdUI-SetRadio(w=2); 当线宽为2时,此选项前标有圆点void CDrawView:OnUpdateW3(CCmdUI* pCmdUI) pCmdUI-SetRadio(w=3); 当线宽为3时,此选项前标有圆点void CDrawView:OnUpdateW4(CCmdUI* pCmdUI) pCmdUI-SetRadio(w=4); 当线宽为4时

22、,此选项前标有圆点void CDrawView:OnUpdateW5(CCmdUI* pCmdUI) pCmdUI-SetRadio(w=5); 当线宽为5时,此选项前标有圆点void CDrawView:OnUpdateW6(CCmdUI* pCmdUI) pCmdUI-SetRadio(w=6); 当线宽为6时,此选项前标有圆点void CDrawView:OnUpdateSolid(CCmdUI* pCmdUI) pCmdUI-SetRadio(penstyle=PS_SOLID); 当线型为实线时,此选项前标有圆点 void CDrawView:OnUpdateDash(CCmdUI* pCmdUI) pCmdUI-SetRadio(penstyle=PS_DASH); 当线型为虚线时,此选项前标有圆点 void CDrawView:OnUpdateDot(CCmdUI* pCmdUI) pCmdUI-SetRadio(penstyle=PS_DOT); 当线型为点线时,此选项前标有圆点 void CDrawView:OnUpdateDashdot(CCmdUI* pCmdUI)此选项前标有圆点pCmdUI-SetRadio(penstyle=PS_DASHDOT); / 当线型为点段线时, )

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1