- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电气院 201404017 范艳 简易绘图软件的设计一 设计目的设计一个单文档类型的MFC AppWizard(exe)工程,工程取名为:Draw。此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆和连续线的绘制。并且能实现绘图的控制,包括线宽、线型和颜色的设置。二 总体设计设计图如下:绘图软件绘图设置颜色直线点矩形椭圆线宽线型示例常用色自定义连续线三 详细设计首先,新建一个单文档类型的MFC AppWizard(exe)工程,工程取名为:Draw。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加4个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。添加的4个菜单项的ID及名称如下表所示。然后分别为这4个菜单项添加命令响应,本程序让视图类(CDrawView)对这些菜单命令进行响应,这4个响应函数的名称分别如下表所示。菜单项ID菜单项名称菜单项命令响应函数IDM_DOT点OnDotIDM_LINE直线OnLineIDM_RECT矩形OnRectIDM_ELLIPSE椭圆OnEllipse在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。因此在CDrawView类中添加一个成员变量m_nDrawType;用来保存用户的选择,该变量的定义如下:接着,在视图类的构造函数中初始化该变量,程序代码如下:CDrawView::CDrawView(){// TODO: add construction code here m_nDrawType=0; //初始化}利用switch/case语句,来分别完成相应图形的绘制。当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。程序代码如下:void CDrawView::OnDot() {// TODO: Add your command handler code herem_nDrawType=1;}void CDrawView::OnLine() { // TODO: Add your command handler code herem_nDrawType=2;}void CDrawView::OnRect() {// TODO: Add your command handler code herem_nDrawType=3;} void CDrawView::OnEllipse() {// TODO: Add your command handler code herem_nDrawType=4;}3.1点、直线、矩形、椭圆的绘制对于直线、矩形和椭圆,在绘制时都可以由两点来确定其图形。当鼠标左键按下时得到一个点,当鼠标左键松开时得到另外一个点。 因此需要对鼠标左键按下和松开这两个消息分别进行捕获。另外当鼠标左键按下时,需要将鼠标当前按下点保存,因此我们为CDrawView再添加一个CPoint类型的私有成员变量:m_ptOrigin,在视图类的构造函数中将此变量初始化为0。在鼠标按下消息响应函数中,保存该点,代码如下:void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultm_ptOrigin=point; //保存鼠标按下点CView::OnLButtonDown(nFlags, point);}在鼠标左键弹起消息响应函数中实现绘图,代码如下:void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCClientDC dc(this); //创建并获得设备描述CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //创建透明画刷,解决图形遮挡问题dc.SelectObject(pBrush); //将画刷选到设备描述表中 switch(m_nDrawType){case 1:dc.SetPixel(point,RGB(250,0,0,)); //绘制点 鼠标弹起点绘制 红色break;case 2: //绘制直线dc.MoveTo(m_ptOrigin);dc.LineTo(point);break;case 3:dc.Rectangle(CRect
文档评论(0)