MFC Windows程序设计学习笔记--鼠标和键盘
2017-03-15 07:56
323 查看
设备驱动程序处理鼠标和键盘中断,将结果事件放在一系统范围队列中。
客户区鼠标消息:
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为事件发生位置的命中测试码。
3.其它
窗口在接收一个客户区或非客户区鼠标消息前,先收到光标的屏幕坐标和WM_NCHITTEST消息。
Windows处理WM_NCHITTEST消息时,根据光标屏幕坐标再产生一个客户区或非客户区鼠标消息。
执行一次,::TrackMouseEvent来设置鼠标离开或盘旋时,向窗口发送WM_MOUSELEAVE或WM_MOUSEHOVER消息。一次调用只会一次有效。须在#include
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:
对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.绘制含插入符部分时,先隐藏,完成绘制,再显示。
鼠标
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 | 最大化按钮 |
窗口在接收一个客户区或非客户区鼠标消息前,先收到光标的屏幕坐标和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-7 | 8 | 9-12 | 13 | 14 | 15 |
---|---|---|---|---|---|
OEM扫描码,依赖硬件 | 扩展键标志 | 保留位 | Alt按下位1,抬起为0 | 先前键按下为1,抬起为0 | 键被按下为1,抬起为0 |
虚拟键代码:
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.绘制含插入符部分时,先隐藏,完成绘制,再显示。
相关文章推荐
- 鼠标/键盘事件 学习笔记
- USB驱动程序之USB设备驱动程序2鼠标用作键盘学习笔记
- Python Selenium 学习笔记(三)键盘和鼠标操作
- DXUT 学习笔记(3)对键盘鼠标的响应 及 消息处理
- qml学习笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys
- WPF and Silverlight 学习笔记(十四):键盘输入、鼠标输入、焦点处理[转]
- windows程序设计学习笔记-键盘,鼠标,计时器
- USB驱动程序之USB设备驱动程序2鼠标用作键盘学习笔记
- Python学习笔记(十七)——用GUI自动化控制键盘鼠标
- WPF and Silverlight 学习笔记(十四):键盘输入、鼠标输入、焦点处理
- Pygame 学习笔记(3) - 键盘和鼠标事件
- 20171012学习笔记Selenium 2 第四章WebDriver API 4.2控制浏览器 4.3简单元素操作4.4鼠标事件4.5键盘事件
- Python Selenium 学习笔记(三)键盘和鼠标操作
- WPF and Silverlight 学习笔记(十四):键盘输入、鼠标输入、焦点处理
- WPF and Silverlight 学习笔记:键盘输入、鼠标输入、焦点处理
- 汇编语言学习笔记-接收键盘消息
- 操作系统学习笔记(31)--初始化键盘
- Silverlight4学习笔记--方块鼠标跟随
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- GB学习【7】--鼠标键盘