步骤一:
       在已有的外貌框架中为我们的菜单项鼠标右键添加消息处理程序,用来处理当我们对该菜单项进行点击时能够传递某些东西。
如下图所示:
在这时我们就会看到一个弹出的向导对话框,记住添加的事件处理程序在DrawView类中,这时我们就会发现改ID的好处了,我们就能对这些事件处理程序进行很好的区分,而不是一堆数字。如下图所示:

用同样的方法添加想要处理的程序在这里我就只添加了直线、矩形、椭圆、颜色、设置添加了事件处理程序。
添加了事件处理程序之后我们再次点击运行时我们就会发现原来的灰色菜单项中我们添加了事件处理程序的就不会再显示为灰色。而且在DrawView类中为我们自动生成了一下代码:

void CDrawView::OnLine()
{
 // TODO: 在此添加命令处理程序代码
}

void CDrawView::OnRectangle()
{
 // TODO: 在此添加命令处理程序代码
}

void CDrawView::OnEllipse()
{
 // TODO: 在此添加命令处理程序代码
}

void CDrawView::OnColor()
{
 // TODO: 在此添加命令处理程序代码
}

void CDrawView::OnSetting()
{
 // TODO: 在此添加命令处理程序代码
}

运行效果如图所示:

步骤二:

做了以上这些是不是离这个初步的绘制图形不远了呢,在这章里答案是这样的,但是只在DrawView里画图显然过于不严谨,封装性不够好,为此我建立了图形基类CShape类,然后建立了CRectangle,CEllipse,CLine三个公有继承于CShape的图形子类,以便于相对应相应的菜单项。

如图所示:

步骤三:

做完了这些,我们就可以在这些类里面做些什么了,让这个绘图程序逐渐的鲜活起来。由图形的基本属性所知,绘制一个图形需要一个起点和一个重点,在MFC中这些带有二维属性的点是CPoint类的,所以我们只需在基类CShape中定义两个CPoint类型的变量m_ptOrigin和m_End分别保存起点和终点(变量命名最好见名知意)。同理,我们添加int型变量m_DrawType保存我绘制的类型

添加变量方式如图:

步骤四:绘制图形
        我们先要在DrawView中定义三个相同的变量。然后要在刚添加的时间处理程序中分别对这三种图形的线型进行设置。具体代码如下:

void CDrawView::OnLine()
{
 // TODO: 在此添加命令处理程序代码
 m_DrawType=1; 
}

void CDrawView::OnRectangle()
{
 // TODO: 在此添加命令处理程序代码
 m_DrawType=2;
}

void CDrawView::OnEllipse()
{
 // TODO: 在此添加命令处理程序代码
 m_DrawType=3;
}

做完这些我们当然还是不能绘图。

步骤四:让我们来想一想我们在用微软的画图时是不是鼠标左键点击时才会进行图形的绘制,然后鼠标右键松开时,这个图形便绘制好了呢!所以我们就得利用类向导为我们天加这两个消息的处理。如下图:

步骤五:
        编写绘制图形实现代码,我们可以想象一下,当我们鼠标左键在客户区进行点击时,要把我们点击的点当成绘图的起点,鼠标右键在弹起时记录成终点。然后绘制图形的过程呢便是在鼠标左键点击时到鼠标左键弹起时这一过程绘制的图形,所以我们要在LBottonDown时让我的起点等于传进来的点,实现代码如下:

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 m_ptOrigin=point;
 CView::OnLButtonDown(nFlags, point);
}

然后在LBottonUp中添加绘制的代码,代码如下:

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 CClientDC dc(this); //创建dc
 CPen pen(PS_SOLID,1,RGB(255,0,0)); //创建绘制的画笔
 CBrush *pbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //创建绘制时填充的画刷
 dc.SelectObject(&pen); //将画刷和画笔选入设备描述表中
 dc.SelectObject(pbrush);
 switch (m_DrawType) //根据绘制种类进行绘制
 {
 case 1:
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);
  break;
 case 2:
  dc.Rectangle(CRect(m_ptOrigin,point));
  break;
 case 3:
  dc.Ellipse(CRect(m_ptOrigin,point));
  break;
 default:
  break;
 }
 CView::OnLButtonUp(nFlags, point);
}
运行后就可以绘制图形了,如下图所示:

————————————————
版权声明:本文为CSDN博主「混沌Monkey」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012424783/article/details/25737067

MFC绘图二——简单绘制直线等相关推荐

  1. iOS开发之Quartz2D 二:绘制直线,曲线,圆弧,矩形,椭圆,圆

    #import "DrawView.h"@implementation DrawView/*** 作用:专门用来绘图* 什么时候调用:当View显示的时候调用* @param re ...

  2. 使用MFC进行编程,绘制直线椭圆以及样条曲线

    新建基于MFC的空文件,添加.cpp文件,添加.h文件.相应的文件内容为: hello.h文件 #ifndef __HELLO_H #define __HELLO_H //#include <w ...

  3. AD怎么输入坐标_CAD入门基础小知识(二)捕捉栅格绘制直线amp;使用坐标绘图...

    捕捉栅格绘制直线 摘要:直线是CAD设计图纸中最重要的组成元素,因此,本教程将以直线的绘制引导读者快速入门.栅格捕捉虽然不常用,确实精确定位尺寸最简单的方式,我们先从这种方式开始. 画直线之前,我们先 ...

  4. 《AutoCAD 2016中文版从入门到精通》——第2章 简单二维绘制命令2.1 直线类命令...

    本节书摘来自异步社区<AutoCAD 2016中文版从入门到精通>一书中的第2章,第2.1节,作者: 贾雪艳 , 朱爱华 更多章节内容可以访问云栖社区"异步社区"公众号 ...

  5. MFC鼠标绘制直线段并使用编码裁剪算法

    聪明的你通过本文可以学会在MFC中 初始化时绘制自定义矩形框 使用鼠标来实时绘制你想要的直线段 实现编码裁剪算法裁去直线段在自定义矩形框以外的部分 完成效果如下 进入运行界面 鼠标绘制直线 编码算法裁 ...

  6. 计算机图形学实验二 《绘制任意斜率的直线》

    计算机图形学实验二 <绘制任意斜率的直线> 视频讲解地址 一.Bresenham算法 用视频讲会好点我之前也录过相关视频可以先凑合看 二.设计CLine类 之前也说了C++一个类是由源文件 ...

  7. matlab的一些考点3matlab绘图——二维曲线绘图(绘制曲线)

    二维数据曲线图 3.1.1 绘制单根二维曲线 plot函数 fplot函数 line函数 3.1.2 绘制多根二维曲线 1.plot函数的输入参数是矩阵形式 2.含多个输入参数的plot函数 3.通过 ...

  8. 海龟绘图两小时上手C语言 - 1 绘制直线

    海龟绘图两小时上手C语言 - 1 绘制直线 整个教程的介绍和目录在这里: 童晶:海龟绘图两小时上手C语言 - 0 引言 1.1 什么是C语言? 如今,我们的生活已经离不开程序.比如用计算机写文章.做P ...

  9. MFC有理二次Bezier曲线绘制

    MFC有理二次Bezier曲线绘制 非有理Bezier曲线曲线无法精确表示所有的二次曲线和二次曲面,引入了有理Bezier曲线曲面,来精确表示.如图,通过控制权重,可以获取不同的二次有理Bezier曲 ...

最新文章

  1. F5 配置手册 -F5 BIG-IP 10.1-2-配置-基本参数
  2. maven 通用pom.xml
  3. C++语言之可重载运算符/不可重载运算符
  4. Linux inotify功能及实现原理【转】
  5. matlab龙格库塔法求通解,基于matlab及龙格库塔法求解布拉修斯方程.doc
  6. HTTP Request Content-Type:application/x-www-form-urlencoded、multipart/form-data、application/json
  7. 云原生时代,企业多活容灾体系构建思路与最佳实践
  8. Spring注入总结
  9. 【读书笔记0101】Beginning linux programming-3rd
  10. 转载:OpenStack从入门到放弃
  11. Python self,init,对象属性
  12. stagefright概述
  13. 软件工程中英对照术语表
  14. Cisco交换机与路由器登陆密码破解(保存原配置)
  15. 优质的APP推广渠道那么多,怎么选才好?
  16. 三哥新发现了比金星还厉害的飞行物
  17. [从头读历史] 第249节 易经
  18. 12312312312332
  19. 技术的真相 | 从AR口红试妆了解人工智能试妆技术
  20. 峰会 | 2019长三角科技金融峰会召开 区块链应用前景持续探索

热门文章

  1. Android 选择商品属性sku
  2. PYTHON对数值变量进行标准化,离散变量标签化
  3. 模糊集合和隶属度详解
  4. 微信客户管理方式及如何微信客户管理
  5. 2023秋招--梦加网络--游戏客户端--一面面经
  6. 计算机桌面都有说明,电脑重启后桌面所有的图标都没了怎么解决
  7. 数据分析驱动数字化企业转型
  8. 百度地图 web 开发 BMap.point格式
  9. 【饭谈】:开发说他要是不写bug,测试就会失业了。
  10. 部分选主元matlab,列选主元的高斯消去法-matlab