第五章如何设计鼠标事件
鼠标的每一个动作都是一个事件,应用程序可以捕获这个事件,并对它作出相应的处理,当然也可以不予理睬。鼠标事件有(左键)单击,双击,右键单击,左键按下,鼠标移动等,本章通过用鼠标画图的例程来介绍如何设计鼠标事件。
本章要点
1 为鼠标事件添加消息映射
2 为鼠标事件函数添加代码
3 在面版上画图-画直线的方法
5.1 Draw.exe的界面和功能
程序的上方是文字提示,下面有两个按钮。按下鼠标时移动就可以画出任意图形,用[清除]按钮可靠以抹掉图形。
5.2 Draw程序的界面设计
先创建工程文件,在“D:\myVC\CHO5\”建立Draw程序;MFC标准的对话框模式;用静态DLL支持。
设计工程的界面,参考下列属性表设计如图chap05-01的界面。
控件和标题 | ID | Styles | Extended Styles |
按钮[测试] | IDC_CLEAR_BUTTON | 默认 | Client edge Static edge Modal Form |
按钮[退出] | IDOK | ||
静态文本[画图...] | IDC_STATIC | 对齐方式:居中 | |
对话框 Draw程序 | IDD_DRAW_DIALOG | Title, sysytem menu |
对话框设置字体大为12。编译和运行。
5.3 编写代码
画一条任意曲线实际上是由很短的直线段构成的,这需要从前一点向当前点即鼠标的现在位置画直线。所以需要定义两个变量来存放前一点的坐标。在鼠标移动时不断地画直线,这需要引进一个消息映射WM_MOUSEMOVE。另外,在面版上画图需要定义一个屏幕设备对象CClientDC dc(this)。
1 在头文件DrawDlg.h中定义变量:
2 在对话框CDrawDlg中消息映射WM_MOUSEMOVE。在类向导中选中对话框DrawDlg,再在消息列表框中寻找WM_MOUSEMOVE,选中后点击Add Function,就生成函数OnMouseMove(),点Add code立即输入代码。
3 函数OnMouseMove()的代码
void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)
{
//定义屏幕设备对象
}
MoveTo()定位画笔到前一点,画完直线后把点point储存到m_Prev中。
4 给“鼠标按下”写代码
添加消息映射WM_MOUSEDOWN,函数OnLButtonDown的功能是保存鼠标点击的当前点,代码为:
5 给清除按钮写代码
该函数的功能是调用Panit函数重画对话框。
编译和运行。
—END—