第六章总结

6.1使用鼠标

6.1.1鼠标时间和鼠标消息

根据用户操作鼠标时鼠标的位置,鼠标消息分为两类:客户区鼠标消息和非客户区鼠标消息。

1.         客户去鼠标消息

2.         当鼠标光标位于窗口的用户区时,将生成客户鼠标消息。鼠标消息和键盘消息有所不同,Windows只将键盘有消息发送给具有输入极点的窗口,但鼠标消息不受这种限制,只要鼠标通过某个窗口的客户区,该窗口便会收到WM_MOUSEMOVE消息。

6.1.2处理客户区鼠标消息

  1.鼠标消息处理函数

MFCCWnd类中提供了针对每一种鼠标消息的消息处理函数,通过VisualC++提供的映射机制,当发生鼠标时,系统系统即调用对应的消息处理函数,用户可以改写它们这样当发生鼠标消息时,系统即调用用户提供的消息处理函数。

3.         鼠标消息处理函数的参数

     eg. OnMouseMove UINT nFlags , CPoint point;

        OnLButtonUP   (UINT nFlags , CPoint point);

 其两个鼠标消息处理函数的参数都是相同的:

(1)       nFlags包含额外的鼠标键和键盘键的消息,以指出发生消息时某些鼠标键与键盘间的状态,可能的取值有以下几个:

MK_CONTROL:键盘上的Ctrl键被按下。

MK_LBUTTON:鼠标左键被按下。

MK_MBUTTON:鼠标中键被按下。

MK_RBUTTON:鼠标中右键被按下。

MK_SHIFT:键盘上的Sift键被按下。

If(nFlags  &  MK_SHIFT)  //结果若为非零值则表示键被按下

(2)       point参数包含鼠标指针的坐标位置,其类型为CPoint类。CPoint类是MFC预定义的用来描述点的类,其包含两个数据成员Xypoint.x内为鼠标指针的横坐标,point.y内位鼠标指针的从坐标。

6.1.3鼠标捕捉

为使所用鼠标消息均定向到某一窗口,而不管鼠标光标位于何处,就必须对鼠标加以捕捉,下面列出了与捕捉鼠标有光的两函数。

1.              SetCapture()函数用于捕捉鼠标,其函数原型如下:

CWnd::SetCapture ();

2.              ReleaseCapture()函数用于释放对鼠标的捕捉,其函数原型如下:

CWnd::ReleaseCapture ();

一旦窗口捕捉了鼠标,其他窗口无法得到鼠标消息,因此,当该窗口不再需要捕获所有的鼠标消息时,应及时调用ReleaseCapture ()函数释放鼠标,以便其他窗口可以正常接收消息。

6.2响应键盘

6.2.1键盘事件

1.与键盘有关的概念

1)焦点

键盘由多个应用程序共享,但当在键盘上按下一个键时,只有一个窗口能接收到该键盘消息,能接收到键盘消息的窗口称为有“输入极点”的窗口。具有焦点的窗口可能是活动是活动窗口,也可能是活动窗口的子窗口。

当一个窗口获得输入焦点时,Windows向其发送一条WM_SETFOUCS消息而当其失去输入焦点时,Windows向其发送WM_KILLFOCUS消息。

2)键盘扫描码与虚拟键代码

   键盘上每一个有意义的键都对应着一个唯一的标识值,称为键盘扫描码,键盘扫描码与具体的键盘硬件有关,为了使应用程序不依赖于具体硬件,Windows系统中不使用虚拟键代码,它是由Windows系统根据键盘扫描码转换而成的一种标准的键标识符,对应用程序而言,它与具体设备无关。

2.键盘事件及对应的键盘消息

键盘消息与其他消息不一样,除按键本身能产生消息外,这些消息还被Windows转换成其他的消息再次发给拥有输入焦点的窗口。

键盘消息:

WM_KEYDOWN    非系统键按下

WM_CHAR         字符消息,由WM_KEYDOWN衍生

WM_DEADCHAR    死字符消息,由WM_KEYDOWN衍生

WM_KEYUP         非系统键释放

WM_SYSKEYDOWN  系统键按下

WM_SYSCHAR        系统字符消息,由WM_SYSKEYDOWN衍生

WM_SYSDEADCHAR   系统字符消息,有WM_SYSKEYDOWN衍生

WM_SYSKEYUP        系统键释放

(1)              系统键指Alt键与其他键的组合,这些键的功能是激活程序菜单或者系统菜单的选项,以及切换活动窗口等系统功能。

(2)              死字符是指本身不能显示但能修改其他字符显示的字符,主要出现在非英语键盘上疑问怎么理解

6.2.2处理键盘事件

1.键盘事件处理函数

应用程序通常只需处理WM_KEYDOWNWM_KEYUPWM_CHAR消息,对这3个消息MFCCWnd类中提供了相应的处理函数。

消息

处理函数

WM_KEYDOWN

Void OnKeyDown (UINT nchar , UINT  nRepcnt, UINT nFlags)

WM_CHAR

Void OnKeyDown (UINT nchar , UINT  nRepcnt, UINT nFlags)

WM_KEYUP

Void OnKeyDown (UINT nchar , UINT  nRepcnt, UINT nFlags)

OnKeyDown ()OnKeyUp ()函数的参数。

nChar : 键的虚拟码

nRepchar : 重复计数,若应用程序的处理速度慢与用户按键的速度,Windows会把几个WM_KEYDOWWM_KEYUP消息合并到单个消息中并相应增加重复计数。

nFlags : 提供一些特殊消息,按位使用各位含义

当发生键盘消息,Visual C++的映射机制将自动调用这些函数,用户可以改写这些函数,这样消息发生时将调用用户自己定义的函数。

OnChar :键码(ASCII码)

nRepcnt :按键重复次数,同OnKeyDown()与OnKeyUp()函数的这一参数一样

nFlags :提供一些特殊信息,按位使用疑问(那些数字到底是什么含义?如位“0~15”含义“重复计数”)

4.键盘事件的处理原则

WM_CHAR消息通常是最有用的消息,它的消息参数中包含可显示字符的ASCII码。能区分字母大小写,但不能处理非显示字符。

WM_KEYSOWNWN_KEYUP的消息参数中包含键的虚拟码,它可处理非显示字符,但虚拟键不去分大小写字母,故处理字母比较麻烦。若确实需要这两个消息中处理字母的大小,需要使用API函数GetkeyState ()获得Shift键和CapsLock键的状态,才能判定是大写字母韩式小写字母。

通常需要处理可显示字符时响应WM_CHAR消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值