鼠标消息
来源:互联网 发布:淘宝访问受限怎么回事 编辑:程序博客网 时间:2024/04/26 01:59
如果您在非活动窗口的显示区域中按下鼠标左键,Windows将把活动窗口改为在其中按下鼠标按键的窗口,然后把WM_LBUTTONDOWN消息送到该窗口消息处理程序。当窗口消息处理程序得到WM_LBUTTONDOWN消息时,您的程序就可以安全地假定该窗口是活动化的了。不过,您的窗口消息处理程序可能在未接收到WM_LBUTTONDOWN消息的情况下先接收到了WM_LBUTTONUP的消息。如果在一个窗口中按下鼠标按键,然后移动到使用者窗口释放它,就会出现这种情况。类似的情况,当鼠标按键在另一个窗口中被释放时,窗口消息处理程序只能接收到WM_LBUTTONDOWN消息,而没有相应的WM_LBUTTONUP消息。
这些规则有两个例外:
窗口消息处理程序可以「拦截鼠标」并且连续地接收鼠标消息,即使此时鼠标在该窗口显示区域之外。您将在本章的后面学习如何拦截鼠标。
如果正在显示一个系统模态消息框或者系统模态对话框,那么其它程序就不能接收鼠标消息。当系统模态消息框或者对话框活动时,禁止切换到其它窗口或者程序。一个显示系统模态消息框的例子,是当您关闭Windows时。
对于所有这些消息来说,其lParam值均含有鼠标的位置:低字组为x坐标,高字组为y坐标,这两个坐标是相对于窗口显示区域左上角的位置。您可以用LOWORD和HIWORD宏来提取这些值:
x = LOWORD (lParam) ;
y = HIWORD (lParam) ;
wParam的值指示鼠标按键以及Shift和Ctrl键的状态。您可以使用表头文件WINUSER.H中定义的位屏蔽来测试wParam。MK前缀代表「鼠标按键」。
如果希望您的窗口消息处理程序能够收到双按键的鼠标消息,那么在呼叫RegisterClass初始化窗口类别结构时,必须在窗口风格中包含CS_DBLCLKS标识符:
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;
非显示区域鼠标消息,wParam和lParam参数与显示区域鼠标消息的wParam和lParam参数不同。wParam参数指明移动或者按鼠标按键的非显示区域。它设定为WINUSER.H中定义的以HT开头的标识符之一(HT表示「命中测试」)。
lParam参数的低位word为x坐标,高位word为y坐标,但是,它们是屏幕坐标,而不是像显示区域鼠标消息那样指的是显示区域坐标。对屏幕坐标,显示器左上角的x和y的值为0。当往右移时x的值增加,往下移时y的值增加(见图7-2)。
您可以用两个Windows函数将屏幕坐标转换为显示区域坐标或者反之:
ScreenToClient (hwnd, &pt) ; ClientToScreen (hwnd, &pt) ;
这里pt是POINT结构。这两个函数转换了保存在结构中的值,而且没有保留以前的值。注意,如果屏幕坐标点在窗口显示区域的上面或者左边,显示区域坐标x或y值就是负值。
图7-2 屏幕坐标与客户显示区域坐标
- 鼠标消息
- 鼠标消息
- 鼠标消息
- 鼠标消息
- 鼠标消息与键盘消息
- 鼠标消息与键盘消息
- MFC2.鼠标消息
- windows鼠标消息
- 鼠标输入消息
- Win32窗口鼠标消息
- 鼠标悬浮显示消息
- windows鼠标消息
- windows主要鼠标消息
- windows主要鼠标消息
- 模拟鼠标单击消息
- 鼠标消息处理
- MFC鼠标离开消息
- VC 鼠标消息WM_SETCURSOR
- 收到作业的同学的名单 3
- “我要金手指”——由模式谈对象对象的基本原则之依赖颠倒原则
- 软件配置管理概述
- "未将对象引用设置到对象的实例"异常的原因
- samba的配置-- 在vmware中和windows目录共享
- 鼠标消息
- SQL注入
- using JMX to Manage Web Applications (from tts)
- set constraints all deferred|immediate的作用
- 初试XSL
- 一年前的帖子,一年前的回忆(渐行渐远 2004)
- 可完全定制的Javascript日历 (Callback 实现)
- Eclipse基础--安装eclipse及语言包
- 隐藏在暗中的this指针