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

第五章如何设计鼠标事件

 

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

 

本章要点

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

 

5.1 Draw.exe的界面和功能

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

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

 

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中定义变量:
    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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值