MFC Windows程序设计学习笔记--鼠标和键盘

设备驱动程序处理鼠标和键盘中断,将结果事件放在一系统范围队列中。

鼠标

1.
客户区鼠标消息:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_MBUTTONDOWN
WM_MBUTTONUP
WM_MBUTTONDBLCLK
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_RBUTTONDBLCLK
WM_MOUSEMOVE

客户区鼠标响应函数具备一样的函数类型,参数列表形式:
(UINT nFlags, CPoint point)
uFlags:
MK_LBUTTON
MK_MBUTTON
MK_RBUTTON
MK_CONTROL
MK_SHIFT
表示事件发生时相应键的状态

鼠标消息被发送到光标下面的窗口。
例外:
在接收鼠标按下消息后,将鼠标捕获CWnd::SetCapture。在鼠标松开后,释放CWnd::ReleaseCapture。在捕获过程中,鼠标消息都会发给捕获其的窗口处理。CWnd::GetCapture返回一个CWnd*,指向捕获鼠标窗口,没有窗口捕获或另一线程窗口捕获返回NULL。

一个键被快速单击两次:
含CS_DBLCLKS风格窗口收到:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_LBUTTONUP
对不含CS_DBLCLKS风格窗口收到:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDOWN
WM_LBUTTONUP

2.非客户区鼠标消息
WM_NCLBUTTONDOWN
WM_NCLBUTTONUP
WM_NCLBUTTONDBLCLK
WM_NCMBUTTONDOWN
WM_NCMBUTTONUP
WM_NCMBUTTONDBLCLK
WM_NCRBUTTONDOWN
WM_NCRBUTTONUP
WM_NCRBUTTONDBLCLK
WM_NCMOUSEMOVE

非客户区鼠标消息的响应函数,也具备同样的类型。参数列表形式为:
(UINT nHitTest, CPoint point)
point:这里为屏幕坐标。
nHitTest为事件发生位置的命中测试码。

测试码命中位置
HTCAPTION标题栏
HTCLOSE关闭按钮
HTGROWBOX还原按钮
HTHSCROLL窗口的水平滚动栏
HTMENU菜单栏
HTREDUCE最小化按钮
HTSYSTEM系统菜单
HTVSCROLL窗口的垂直滚动条
HTZOOM最大化按钮

3.其它
窗口在接收一个客户区或非客户区鼠标消息前,先收到光标的屏幕坐标和WM_NCHITTEST消息。
Windows处理WM_NCHITTEST消息时,根据光标屏幕坐标再产生一个客户区或非客户区鼠标消息。

执行一次,::TrackMouseEvent来设置鼠标离开或盘旋时,向窗口发送WM_MOUSELEAVE或WM_MOUSEHOVER消息。一次调用只会一次有效。须在#include

键盘

Windows将键盘消息送到带有 输入焦点的窗口。
CWnd::SetFocus/CWnd::GetFocus

1.击键消息
WM_KEYDOWN
WM_KEYUP
Alt,F10不产生此两消息。

Alt按下时,此后按下其它键会产生WM_SYSKEYDOWN,WM_SYSKEYUP.
F10按下,系统进入特殊模态:将下次击键看作菜单选择的快捷方式。
消息响应函数类型一致,参数列表:
(UINT nChar, UINT nRepCnt, UINT nFlags)
nChar:虚拟键代码
nRepCnt:重复次数
nFlags:

0-789-12131415
OEM扫描码,依赖硬件扩展键标志保留位Alt按下位1,抬起为0先前键按下为1,抬起为0键被按下为1,抬起为0

对OEM扫描码,可用::MapVirtualKey转为虚拟键

虚拟键代码:
A-Z,a-z,0-9虚拟键代码和他们的ANSI码一样。
; [ ]没虚拟键代码

2.字符消息
::TranslateMessage将与字符键有关的击键消息转为WM_CHAR消息。
每个WM_CHAR包含一 与 ANSI或Unicode字符集中符号映射的字符代码。

(UINT nChar, UINT nRepCnt, UINT nFlags)
nChar:ANSI或Unicode字符代码
nRepCnt:重复次数
nFlags:

Alt按下时,产生WM_SYSCHAR消息。

3.插入符
CreateCaret
SetCaretPos/GetCaretPos
ShowCaret/HideCaret
::DestroyCaret

插入符被同一个线程内所有窗口共享

使用:
1.窗口收到输入焦点,创建。失去输入焦点,销毁。
2.可见性控制
3.绘制含插入符部分时,先隐藏,完成绘制,再显示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值