VC++60 第五章 如何设计鼠标事件

来源:互联网 发布:html砸金蛋源码下载 编辑:程序博客网 时间:2024/06/09 21:08

第五章如何设计鼠标事件

 

鼠标的每一个动作都是一个事件,应用程序可以捕获这个事件,并对它作出相应的处理,当然也可以不予理睬。鼠标事件有(左键)单击,双击,右键单击,左键按下,鼠标移动等,本章通过用鼠标画图的例程来介绍如何设计鼠标事件。

 

本章要点

1 为鼠标事件添加消息映射
2 为鼠标事件函数添加代码
3 在面版上画图-画直线的方法

 

5.1 Draw.exe的界面和功能

VC++60 <wbr>第五章 <wbr>如何设计鼠标事件
chap05-01

程序的上方是文字提示,下面有两个按钮。按下鼠标时移动就可以画出任意图形,用[清除]按钮可靠以抹掉图形。

 

5.2 Draw程序的界面设计

先创建工程文件,在“D:\myVC\CHO5\”建立Draw程序;MFC标准的对话框模式;用静态DLL支持。

设计工程的界面,参考下列属性表设计如图chap05-01的界面。

控件和标题IDStylesExtended Styles按钮[测试]IDC_CLEAR_BUTTON默认Client edge
Static edge
Modal Form
按钮[退出]IDOK静态文本[画图...]IDC_STATIC对齐方式:居中 对话框 Draw程序IDD_DRAW_DIALOGTitle, sysytem menu 

对话框设置字体大为12。编译和运行。

 

5.3 编写代码

画一条任意曲线实际上是由很短的直线段构成的,这需要从前一点向当前点即鼠标的现在位置画直线。所以需要定义两个变量来存放前一点的坐标。在鼠标移动时不断地画直线,这需要引进一个消息映射WM_MOUSEMOVE。另外,在面版上画图需要定义一个屏幕设备对象CClientDC dc(this)。

1 在头文件DrawDlg.h中定义变量:
    int m_PrevX, m_PrevY;

2 在对话框CDrawDlg中消息映射WM_MOUSEMOVE。在类向导中选中对话框DrawDlg,再在消息列表框中寻找WM_MOUSEMOVE,选中后点击Add Function,就生成函数OnMouseMove(),点Add code立即输入代码。

3 函数OnMouseMove()的代码

void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    if(nFlags & MK_LBUTTON == MK_LBUTTON)
    {
//定义屏幕设备对象

        CClientDC dc(this);
        dc.MoveTo(m_PrevX, m_PrevY);
        dc.LineTo(point.x, point.y);
        m_PrevX = point.x;
        m_PrevY = point.y;
    }
    CDialog::OnMouseMove(nFlags, point);
}
MoveTo()定位画笔到前一点,画完直线后把点point储存到m_Prev中。

4 给“鼠标按下”写代码
添加消息映射WM_MOUSEDOWN,函数OnLButtonDown的功能是保存鼠标点击的当前点,代码为:
    m_PrevX = point.x;
    m_PrevY = point.y;

5 给清除按钮写代码
    Invalidate();
该函数的功能是调用Panit函数重画对话框。

编译和运行。

—END—

0 0