MFC之绘图篇:初步绘图(开发平台VS2010)

步骤一:
       在已有的外貌框架中为我们的菜单项鼠标右键添加消息处理程序,用来处理当我们对该菜单项进行点击时能够传递某些东西。
如下图所示:


在这时我们就会看到一个弹出的向导对话框,记住添加的事件处理程序在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);
}
 

运行后就可以绘制图形了,如下图所示:

 

但是一拖动边框呢我们发现绘制的图形就没有了,这就涉及到图形的重绘和保存了,不是这章应该讨论的内容。
今天就先讲到这里,预知后事如何,且听下回分解。如有转载,不胜荣幸,请注明出处。谢谢!
转载。 https://blog.csdn.net/u012424783/article/details/25737067

  • 24
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
VS2010是Microsoft Visual Studio 2010的简称,是由微软公司开发的集成开发环境(IDE)。MFC(Microsoft Foundation Classes)是一组用于构建Windows应用程序的C++类库。 TeeChart是一款专门用于数据可视化的图表控件。它支持多种图表类型,如折线图、柱状图、饼状图等,并且具有丰富的定制功能。 在VS2010中使用TeeChart绘图控件,首先需要在项目中添加TeeChart控件的库文件和头文件。然后,在需要使用图表的界面上添加一个TChart控件,可以通过拖拽的方式在界面上创建一个TChart控件。 接下来,可以通过代码的方式来设置图表的属性,例如设置图表类型、添加图表数据等。TeeChart提供了丰富的API来操作图表,可以根据需求进行图表的定制,例如设置标题、坐标轴、图例等。 在将数据绑定到图表上之前,需要先对其进行处理和准备。可以使用MFC提供的相关类和方法来读取、操作和处理数据。一般情况下,可以将数据保存在数组或者容器中,并使用适当的方式将数据添加到图表控件中。 最后,通过调用TeeChart的绘图函数来在界面上显示图表。可以在需要的时候刷新图表,以实现实时或动态更新的效果。 总结来说,使用VS2010 MFC结合TeeChart绘图控件可以很方便地实现数据可视化的需求。通过添加控件、设置图表属性以及数据处理,可以在界面上显示出丰富的图表。这样的图表可以提供更直观、易懂的数据展示,对数据分析和决策制定有很大的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值