版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.zVC++程序设计实验报告实验目的掌握MFC编程实验内容用MFC向导创立单文档应用程序,一个简单的画图程序。使用C++语言实现使用VC++6.0集成开发环境开发使用MFC应用程序开发框架三、实验步骤根本功能描述1.翻开e*e文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。2.选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。设计思路1.对需要用到的变量进展初始化。2.选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。3.鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。4.选择图形或其它属性,可进展下一次绘制。软件设计A设计步骤1.创立单文档创立一个MFCAppWizard[e*e]工程,命名为“Draw〞,如图1所示,并创立单文档,如图2所示。创立成功后,系统自动生成相应的类,如图3所示。图1创立工程图2创立单文档图3生成类2.编辑菜单添加需要的菜单项,如图4所示;并在菜单的属性中设定好所对应的ID,如图5所示,各项菜单对应的ID如表1所示〔其中线宽菜单为弹出菜单,只需在菜单工程属性中的弹出选项前打勾即可,分隔线亦只需在菜单工程属性中选中分隔符选项即可〕。图4添加菜单项图5设置菜单ID表1菜单项对应ID菜单名ID菜单名ID菜单名ID直线ID_LINE线宽1ID_W1实线ID_SOLID矩形ID_RECT线宽2ID_W2虚线ID_DASH椭圆ID_ELLIPSE线宽3ID_W3点线ID_DOT颜色ID_COLOR线宽4ID_W4点段线ID_DASHDOT填充色ID_FILLCOLOR线宽5ID_W5建立类向导,在视图类CDrawView中,对各菜单项添加对应的MAND消息处理函数,局部菜单项还添加对应的UPDATE_MAND_UI消息函数,如图6所示。图6建立类向导 3.在相应消息函数处添加代码,实现其功能建立类向导,在视图类CDrawView中,添加WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码。B关键功能实现1.选择要绘制的图形在直线、矩形以及椭圆的消息处理函数里为shape分别赋值为1,2,3,在OnPaint()函数里添加3个if语句的代码来这实现这三个图形的绘制:中选择画直线时,shape=1,则执行绘制直线代码,中选择画矩形时,shape=2,则执行绘制矩形的代码,当性选择画椭圆时,shape=3,则执行绘制椭圆的代码。2.改变线宽在OnPaint()创立的画笔中,pen.CreatePen(penstyle,w,m_nColor),线宽处用w表示,则改变w的值即改变了画笔的粗细。选择菜单绘图→线宽选择划线宽度值,此时所选的线宽值就赋给线宽变量w。假设不选择线宽值,则w=1(即默认线宽值为1)。3.改变线型在OnPaint()创立的画笔中,pen.CreatePen(penstyle,w,m_nColor),线型处用penstyle表示,则改变penstyle的值即改变了画笔的类型。选择菜单绘图→线型选择线型,此时所选的线型就赋给线型变量penstyle。假设不选择线型值,则penstyle=ID_SOLID(即默认线型为实线)。4.改变线色在OnPaint()创立的画笔中,pen.CreatePen(penstyle,w,m_nColor),线的颜色处用m_nColor表示,则改变m_nColor即改变了画笔的颜色。选择菜单绘图→颜色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。假设不选择颜色,则默认〔线〕颜色为黑色。4.改变填充色在OnPaint()创立的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。假设不选择颜色,则默认填充色为黑色。5.绘制图形鼠标左键按下,则捕获鼠标此时的位置坐标为画图的起点,此时在OnLButtonDown()函数里,将捕获的坐标值赋给定义作为起点的变量opoint;按下鼠标左键拖动鼠标时,捕捉鼠标当前位置坐标值为终点坐标值,此时在OnMouseMove()函数里,把捕获的坐标值赋给定义作为终点的变量cpoint,OnPaint()中绘图的代码中的坐标都得到了,进展绘图;鼠标左键弹起时,此时绘图完毕,鼠标弹起时所在位置就是画图的最终终点位置,画图完毕后,刷新窗口,以便重新画图,此时执行的是OnLButtonUp()函数。四、结果及源代码4.1运行结果1.点击,编译,运行后的窗口如图7所示。图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.形状函数voidCDrawView::OnLine(){shape=1;}voidCDrawView::OnRect(){ shape=2;}voidCDrawView::OnEllipse(){ shape=3;}3.线宽改变函数voidCDrawView::OnW1(){ w=1; }voidCDrawView::OnW2(){ w=2;}voidCDrawView::OnW3(){ w=3;}voidCDrawView::OnW4(){ w=4;}voidCDrawView::OnW5(){ w=5;}voidCDrawView::OnW6(){ w=6; }线型选择函数voidCDrawView::OnSolid(){ penstyle=PS_SOLID; }voidCDrawView::OnDash(){ penstyle=PS_DASH; }voidCDrawView::OnDot(){ penstyle=PS_DOT;}voidCDrawView::OnDashdot(){ penstyle=PS_DASHDOT; }颜色选择函数voidCDrawView::OnColor(){ CColorDialogColor;//创立颜色对话框 if(Color.DoModal()==IDOK)//如果用户点击OK按钮 { m_nColor=Color.GetColor();//更改颜色,把颜色赋到m_nColor }}填充色选择函数voidCDrawView::OnFullcolor(){ CColorDialogFullColor;//创立颜色对话框 if(FullColor.DoModal()==IDOK)//如果用户点击OK按钮 { m_fColor=FullColor.GetColor();//更改颜色,把颜色赋到m_nColor } }单击、移动、绘画函数voidCDrawView::OnLButtonDown(UINTnFlags,CPointpoint){ m_Down=TRUE; //鼠标按下SetCapture();//获取坐标 opoint=point;//把鼠标所在坐标赋给起点坐标opointReleaseCapture();//释放坐标 CView::OnLButtonDown(nFlags,point);}voidCDrawView::OnLButtonUp(UINTnFlags,CPointpoint){ m_Down=FALSE;//鼠标不按下,即弹起Invalidate(0);//刷新 CView::OnLButtonUp(nFlags,point);}voidCDrawView::OnMouseMove(UINTnFlags,CPointpoint){ if(m_Down)//如果鼠标按下 { cpoint=point;//把鼠标所在点坐标赋给终点坐标cpoint CClientDCdc(this); if(4==shape)//画曲线 { CPenpen(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);}voidCDrawView::OnPaint(){ CPaintDCdc(this);//deviceconte*tforpainting CPenpen;//定义画笔CBrushbrush;//定义画刷 pen.CreatePen(penstyle,w,m_nColor);//创立画笔 brush.CreateSolidBrush(m_fColor);//创立画刷 dc.SelectObject(&pen);//获取画笔dc.SelectObject(&brush);//获取画刷 if(1==shape)//画直线 { dc.MoveTo(opoint.*,opoint.y); dc.LineTo(cpoint.*,cpoint.y);//绘制直线,从opoint到cpoint连线 } if(2==shape)///画矩形 { dc.Rectangle(opoint.*,opoint.y,cpoint.*,cpoint.y);//绘制矩形 } if(3==shape)//画椭圆 { dc.Ellipse(opoint.*,opoint.y,cpoint.*,cpoint.y);//绘制椭圆 }}菜单勾选函数voidCDrawView::OnUpdateLine(CCmdUI*pCmdUI){ pCmdUI->SetCheck(shape==1);//shape为1时,直线选项前打上勾}voidCDrawView::OnUpdateRect(CCmdUI*pCmdUI){ pCmdUI->SetCheck(shape==2);//shape为2时,直线选项前打上勾}voidCDrawView::OnUpdateEllipse(CCmdUI*pCmdUI){ pCmdUI->SetCheck(shape==3);//shape为3时,直线选项前打上勾}voidCDrawView::OnUpdateW1(CCmdUI*pCmdUI){ pCmdUI->SetRadio(w==1);//当线宽为1时,此选项前标有圆点}voidCDrawView::OnUpdateW2(CCmdUI*pCmdUI){ pCmdUI->SetRadio(w==2);//当线宽为2时,此选项前标有圆点 }voidCDrawView::OnUpdateW3(CCmdUI*pCmdUI){ pCmdUI->SetRadio(w==3);//当线宽为3时,此选项前标有圆点}voidCDrawView::OnUpdateW4(CCmdUI*pCmdUI){ pCmdUI->SetRadio(w==4);//当线宽为4时,此选项前标有圆
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版小学五年级下册语文全册教案
- 利用智能图像处理技术提升防伪效果
- 2024高中地理第六章人类与地理环境的协调发展章末总结提升练含解析新人教版必修2
- 2024高中生物第4章种群和群落第3节群落的结构课堂演练含解析新人教版必修3
- 2024高考物理一轮复习第八章恒定电流实验10练习使用多用电表学案新人教版
- 2024高考化学一轮复习第4章非金属及其化合物第12讲氯及其化合物卤族元素学案
- 2024高考历史一轮复习方案专题三现代中国的政治建设祖国统一与对外关系专题整合备考提能教学案+练习人民版
- 2024高考地理一轮复习第一章第2讲地球的自转及地理意义教案含解析新人教版
- (4篇)2024年幼儿园家访工作总结
- 2024年湖北交通职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 医院行政人员礼仪培训
- 暨南大学珠海校区财务办招考财务工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 羊水少治疗护理查房
- DB21-T 3874-2023 海水鱼工厂化循环水养殖池设计规范
- DB43T 523-2010 蕹菜栽培技术规程
- OQC培训资料教学课件
- 2024年8月CCAA国家注册审核员OHSMS职业健康安全管理体系基础知识考试题目含解析
- 防溺水课件教学课件
- 专题05 阅读-2023-2024学年六年级英语寒假专项提升(人教PEP版)
- 医药研发流程及质量管理手册
- 做账实操-期货公司的账务处理示例
评论
0/150
提交评论