第六章总结

来源:互联网 发布:aso优化方案模板 微盘 编辑:程序博客网 时间:2024/04/29 12:49

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消息。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老婆怀孕想吐怎么办呢 菜把下水道堵了怎么办 一楼厕所堵了怎么办 农村房屋确权有争议怎么办 盲审一个没过怎么办 本科生论文盲审不过怎么办 本科盲审没通过怎么办 一篇论文多次引用著作怎么办 学生毕业后改名学籍怎么办 大学毕业后改名字后学籍怎么办 考科目三下暴雨怎么办 挂科太多拿不到毕业证怎么办 挂科太多不给毕业证怎么办 大专毕业拿不到毕业证怎么办 高考差一分二本怎么办 3个月宝宝大小眼怎么办 华东交大理工学院没有评教怎么办 学校断4g网怎么办 学校移动4g网卡怎么办 没上专科线怎么办福建 联考没过本科线怎么办 拍婚纱拍的脸歪怎么办? 老婆彻底寒心要离婚怎么办 手机被同学偷了怎么办 钱被同学偷了怎么办 上班穿皮鞋脚疼怎么办 高跟靴子买大了怎么办 我怀了第三个小孩怎么办? 离婚前把钱花了怎么办 对谈对象有压力怎么办 和对象感情淡了怎么办 孩子处对象学习下降怎么办 孩子高三成绩差怎么办 老妈怨气太重怎么办 广东小高考有d怎么办 高考考生档案袋有个小洞怎么办 江苏省考生出省后小高考成绩怎么办 江苏小高考三D怎么办 小高考补考没过怎么办 理科高考200多分怎么办 高考没考过200分怎么办