Vc++6.0中使用鼠标画线的实现过程

 

1、建立绘图程序框架

开发绘图程序的第一步是使用MFC AppWizard来建立绘图程序的基本框架·步骤为:

(1)  File菜单选择New菜单项,弹出New对话框

(2)  选择Projects 选项从项目类型列表框中选择MFC AppWizard(exe),在Project name文本框中输入绘图程序的名字.这里设定为draw.其他采用默认值.

(3)  单击OK按钮,弹出MFC AppWizard-step 1对话框,选中Single document单选按钮,单击Finish按钮表示使用随后的默认设置。再单击OK按钮,就会自动生成程序框架。

2、映射鼠标消息

为了能用鼠标在屏幕上作图,当然必须要控制鼠标。控制鼠标的方法就是对鼠标消息进行映射。

ClassWizard映射鼠标消息

(1)       view菜单中选择classwizard命令,弹出MFC ClassWizard对话框。

(2)       选择Message Maps 选项卡(这也是默认)

(3)       Class name 下拉列表框中选择要处理的类名为CDrawView

(4)       Obiect IDs框中选择要定义消息处理函数的对象为CDrawView

(5)       Messages框中选择要映射的鼠标消息为WM_LBUTTONDOWN(这是单击鼠标左按钮消息),然后单击Add Function按钮。

(6)       重复步骤(5),映射WM_LBUTTONUP(这是释放鼠标左按钮消息)

3、在数据类中添加数据成员以存放鼠标的位置信息

   打开DrawView.h,将以下语句添加到CDrawView类定义中

   public:

   void DdaLine(CPoint start, CPoint end,COLORREF color);

(注:这是在CDrawView类中定义了dda画线函数原形)

protected:

         POINT m_start,m_end;

(注: POINTVC中的记录类型,一般用于定义点的位置,包括x,y两个坐标值。m_start用于保存线段起点,m_end用于保存线段终点)

4、添加消息处理函数代码

   1)在 DrawView.cppCDrawView:: ONLBUTTONDOWN函数下添加如下代码:

         m_start=point;

   2)在 DrawView.cppCDrawView:: ONLBUTTONUP函数下添加如下代码:

         m_end=point;

DdaLine(m_start,m_end,RGB(255,0,0));

(注:vc++中通过RGB( , , )来定义颜色,可以是0-255之间的值)

5添加画线函数代码

DrawView.cpp中添加函数

void CDrawView::DdaLine(CPoint start, CPoint end,COLORREF color)

{

   CClientDC dc(this);

  int dx, dy, steps, i;

  float x, y, xinc, yinc;

  dx = end.x-start.x;  dy = end.y-start.y;

  x = start.x; y = start.y;

  if ( abs(dx)>abs(dy) )

       steps = abs(dx);

  else

       steps = abs(dy);

  xinc = (float)dx / steps;

  yinc = (float)dy / steps;

  dc.SetPixel((int)(x+0.5), (int)(y+0.5),color);

  for ( i=0; i<steps; i++ )

  {

    x += xinc;  y += yinc;

    dc.SetPixel((int)(x+0.5), (int)(y+0.5),color);

  } 

}

这个画线函数和tc的基本一样,只是需要在开始  加上 CClientDC dc(this);

画点用 dc.SetPixel(x,y,color)

 

经过上面的步骤,鼠标画线程序完成。

然后在VC++菜单上选build项中的build draw.exe完成程序的编译连接。如果有错误,在下面窗口中有提示。如果只有waring类型的警告错误,还是能够生成draw.exe文件,不过还是需要关注。如果有error错误,就不能生成draw.exe文件,需要修改相应的错误。

编译连接完成后选择build项中的execute draw.exe就可以运行程序了。