正在阅读:VC精华教程:MFC入门系列(六)VC精华教程:MFC入门系列(六)

2005-10-08 15:23 出处:PConline 作者:zhoujiamurong 责任编辑:xietaoming

  这时,我们的准备工作已做好。开始画图之前,我们还要讲一个概念——无效区域。我们知道,我们的显示器就是一块画布,我们切换窗口,显示器是不是要重新画一遍画布,这个问题要看情况。因为,画一遍画布(我们也叫重绘)是很费资源的,所以,我们就想要重绘一部分区域,我们如何知道要重绘那部分区域呢?我们将这个区域,设成要求重绘的矩形区域之后,重新绘制该区域。我们把这个区域称为无效区域。以后我们要重新绘制什么东东的时候,就可以将它设成无效区域。

  那么将这个区域设成了无效区域之后,谁来重新绘制它,如何绘制它呢?那么任何影响窗口的操作都会引发WM_PAINT消息,那么,谁来完成消息映射呢?是ON_WM_PAINT(),我们在消息映射要添加这一条,这个消息映射到了一个函数,这个函数是 OnPaint(),也就是说,我们的画图工作都在这里面完成。

  我们的目标先是画一条线出来,我们可以想象一下,我们先用鼠标点一下,就有一个起始点,鼠标不放开,拖动鼠标,会有一条线跟随,再点一下有了终止点,就可以画一条线了。我们要做的工作就是将上面的内容翻译成VC代码。

  我们要有两个点,还要一个重绘区域;所以我们再类sample中添加成员变量:

  CPoint NewPoint;//一个终止点
  CPoint OldPoint;//一个起始点
  RECT r;//需要刷新的矩形区域

  鼠标点下时,获得起始点:

  void OnLButtonDown(UINT i,CPoint p)//添加的消息处理函数
  {
    OldPoint=p;// 获得起始点
  }

  鼠标起来时,得到终止点,并绘一条线

  void OnLButtonUp(UINT i,CPoint p)
  {
     NewPoint=p;// 获得终止点
     //由起始点和终止点得到一个矩形
    r.left=OldPoint.x;
    r.top=OldPoint.y;
    r.right=NewPoint.x;
    r.bottom=NewPoint.y;
     //调用窗体的设置无效区域方法
    CWnd::InvalidateRect(&r,TRUE);
  }

  有了无效区域,我们再来绘图了:

  void OnPaint()
  {
        //设备上下文DC的创建,MFC将DC包装成了几个类,其中有类CPaintDC,
      CPaintDC d(this);
       //将坐标移动到起始点
      d.MoveTo(OldPoint);
      //绘制一条线
   d.LineTo(NewPoint);
  }

  这个时候,我们就可以试一下,我们自己做的画线程序了。

  源文件下载:点击这里下载(28KB, Winzip压缩)

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品