【笨嘴拙舌WINDOWS】键盘消息,鼠标消息
键盘消息
Windows系统无论何时只有一个窗口(可能是子窗口,也就是控件)能获得焦点。
焦点窗口通过windows消息来响应人的键盘操作,与键盘相关的常用消息罗列如下:
WM_KEYDOWN 按下键
WM_KEYUP 松开键
WM_SYSKEYDOWN 按下系统键(Alt)
WM_SYSKEYUP 松开系统键
WM_CHAR 按下松开后WINDOWS产生的字符消息 (A B C D 。。。)
WM_SYSCHAR 按下松开后WINDOWS产生的系统字符消息 (Home End PageUp PageDown 。。。)
人操作键盘后,键盘的电路板会打开特定的电路,经过键盘驱动程序,发送给windows操作系统,然后由系统产生计算机能理解的人的操作行为,操作系统会在Wparam和Lparam中附加人在操作时附带的信息,对于键盘消息其附带信息解释如下
| WParam | LParam | |
| WM_KEYDOWN | 虚拟键码 |
这个32位整形参数的每一位均赋予一定的意义: 0-15 指定当前消息重复的次数。如果按键足够长,会发送多个消息。然而,重复次数不进行累加。 16-23 指定扫描码。该值取决于OEM。 24 通常为0 25-28 保留,未使用。 29 是否按下了Alt,如果是为1,否则为0 31 指定转换状态。对于按下消息,该值总是0.松开消息,该值为1 |
| WM_KEYUP | 虚拟键码 | 同上 |
| WM_SYSKEYDOWN | 虚拟键码 | 同上 |
| WM_SYSKEYUP | 虚拟键码 | 同上 |
| WM_CHAR | 字符(Ascii或者Unicode) | 同上 |
| WM_SYSCHAR | 字符(Ascii或者Unicode) | 同上 |
“Windows为每一个应用程序保持了一个消息队列,在翻译键盘驱动消息为WINDOWS消息之后,操作系统先将消息发送到Windows的“系统消息队列”,然后才放入应用消息队列”
鼠标消息
对于鼠标消息其附带信息解释如下
| 意义 | Wparam | Lparam | |
| 客户区对应的点击 | |||
| WM_LBUTTONDOWN | 按下左键 | 指示鼠标键及Shift和Ctrl的状态 MK_LBUTTON MK_MBUTTON MK_RBUTTON MK_SHIFT 按下Shift键 MK_CONTROL 按下Ctrl键 |
低16位:鼠标在客户坐标下的X值 高16位:鼠标在客户坐标下的Y值 |
| WM_LBUTTONUP | 释放左键 | ||
| WM_LBUTTONDBLCLK | 双击左键 | ||
| WM_MBUTTONDOWN | 按下中键 | ||
| WM_MBUTTONUP | 释放中键 | ||
| WM_MBUTTONDBLCLK | 双击中键 | ||
| WM_RBUTTONDOWN | 按下右键 | ||
| WM_RBUTTONUP | 释放右键 | ||
| WM_RBUTTONDBLCLK | 双击右键 | ||
| 非客户区对应的点击 | |||
| WM_NCLBUTTONDOWN | Hittest表示鼠标在窗口的位置,该值是windows处理WM_NCHITTEST消息完毕后的返回结果:
HTBORDER In the border of a window that does not have a sizing border HTBOTTOM In the lower horizontal border of a window HTBOTTOMLEFT In the lower-left corner of a window border HTBOTTOMRIGHT In the lower-right corner of a window border HTCAPTION In a title bar HTCLIENT In a client area HTERROR On the screen background or on a dividing line between windows (same as HTNOWHERE, except that the DefWindowProc function produces a system beep to indicate an error) HTGROWBOX In a size box (same as HTSIZE) HTHSCROLL In a horizontal scroll bar HTLEFT In the left border of a window HTMENU In a menu HTNOWHERE On the screen background or on a dividing line between windows HTREDUCE In a Minimize button HTSIZE In a size box (same as HTGROWBOX) HTSYSMENU In a System menu or in a Close button in a child window HTTOP In the upper horizontal border of a window HTTOPLEFT In the upper-left corner of a window border HTTOPRIGHT In the upper right corner of a window border HTTRANSPARENT In a window currently covered by another window HTVSCROLL In the vertical scroll bar HTZOOM In a Maximize button |
低16位:鼠标在屏幕坐标下的X值 高16位:鼠标在屏幕坐标下的Y值 |
|
| WM_NCLBUTTONUP | |||
| WM_NCLBUTTONDBLCLK | |||
| WM_NCMBUTTONDOWN | |||
| WM_NCMBUTTONUP | |||
| WM_NCMBUTTONDBLCLK | |||
| WM_NCRBUTTONDOWN | |||
| WM_NCRBUTTONUP | |||
| WM_NCRBUTTONDBLCLK | |||
| WM_NCHITTEST | 非客户区命中测试 | 未使用 | 低16位:鼠标在屏幕坐标下的X值 高16位:鼠标在屏幕坐标下的Y值 |
“WM_NCHITTEST消息优先于其他鼠标消息,当鼠标移动,或者被按下键,就会发送该消息,如果鼠标没有被捕获,就将消息发送给鼠标下的窗口,否则发送给捕获窗口(使用SetCapture(hwnd)捕获,ReleaseCapture释放)”
【笨嘴拙舌WINDOWS】键盘消息,鼠标消息的更多相关文章
- 判断软件的闲置时间(使用Application.OnMessage过滤所有键盘鼠标消息)
GetLastInputInfo是检测系统输入的,应用到某个程序中不合适! 此问题有二种解法来监控输入消息: 1.用线程级HOOK,钩上MOUSEHOOK与KEYBOARDHOOK 2.在Applic ...
- 界面控件 - 滚动条ScrollBar(对滚动条消息和鼠标消息结合讲的不错)
界面是人机交互的门户,对产品至关重要.在界面开发中只有想不到没有做不到的,有好的想法,当然要尝试着做出来.对滚动条的扩展,现在有很多类是的例子. VS2015的代码编辑是非常强大的,其中有一个功能可以 ...
- windows 编程 —— 消息与参数(滚动条、键盘、鼠标)
目录: 滚动条 键盘 鼠标 滚动条ScrollBar 发送消息:WM_VSCROLL和WM_HSCROLL 参数wParam:wParam消息参数被分为一个低字组和一个高字组.wParam的低字组是一 ...
- 10 Windows编程——鼠标消息
和鼠标相关的三个属于:click,double-click,drag 鼠标消息和键盘消息不同:只要鼠标跨越某个窗口,或者在某个窗口中按键,消息. 客户去鼠标消息 WM_MOUSEMOVE WM_[L, ...
- 深刻:截获windows的消息并分析实例(DefWindowProc),以WM_NCHITTEST举例(Windows下每一个鼠标消息都是由 WM_NCHITTEST 消息产生的,这个消息的参数包含了鼠标位置的信息)
1,回调函数工作机制 回调函数由操作系统自动调用,回调函数的返回值当然也是返回给操作系统了. 2,截获操作系统发出的消息,截获到后,将另外一个消息返回给操作系统,已达到欺骗操作系统的目的. 下面还是以 ...
- 【转】windows消息和消息队列详解
转载出处:http://blog.csdn.net/bichenggui/article/details/4677494 windows消息和消息队列 与基于MS - DOS的应用程序不同,Wind ...
- windows消息和消息队列
windows消息和消息队列 转自:http://blog.163.com/zhangjie_0303/blog/static/990827062010113062446767/ 与基于MS - DO ...
- Windows的四类消息
Windows的三类消息1.标准消息宏名称 对映消息 消息处理函数(名称已由系统预设)ON_WM_CHAR WM_CAHR OnCharON_WM_CLOSE WM_CLOSE OnCloseON_W ...
- DirectX11 With Windows SDK--05 键盘和鼠标输入
前言 提供键鼠输入可以说是一个游戏的必备要素.在这里,我们不使用DirectInput,而是使用Windows的消息处理机制,不过要从头开始实现会让事情变得很复杂.DXTK提供了鼠标输入的Mouse. ...
随机推荐
- 帝国cms数据还原后提示数据库表不存在怎么解决?
下午,ytkah用帝国cms在wamp调试时发现了一个问题,还原备份好的数据后更新的页面提示数据库表不存在,查看了phpmyadmin分类的数据库表实际上是存在的,这个是怎么回事呢?重新搭建一个新站点 ...
- 对drupal的理解【转】
写本文是想跟刚用drupal的朋友,分享一下心得,国内用drupal的太少了,希望大家能好好交流. 希望几分钟看完后你能马上上手drupal,至少能理解hook,api,theme,module,cc ...
- 游戏引擎网络开发者的64做与不做(二A):协议与API
[编者按]在这个系列之前的文章"游戏引擎网络开发者的64做与不做(一):客户端方面"中,Sergey介绍了游戏引擎添加网络支持时在客户端方面的注意点.本文,Sergey则将结合实战 ...
- POJ 3978 Primes(素数筛选法)
题目 简单的计算A,B之间有多少个素数 只是测试数据有是负的 //AC //A和B之间有多少个素数 //数据可能有负的!!! #include<string.h> #include< ...
- Message,MessageQueue,Looper,Handler详解
Message,MessageQueue,Looper,Handler详解 一.几个关键概念 1.MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方.每一个线程最 ...
- App接口设计1
http://blog.csdn.net/newjueqi/article/details/44062849 http://www.tuicool.com/articles/YNZBna http:/ ...
- (转)价值240万的photoshop中文教程,错过了后悔都来不及 (吹得好响)
PS抠图方法 一.魔术棒法——最直观的方法 适用范围:图像和背景色色差明显,背景色单一,图像边界清晰. 方法意图:通过删除背景色来获取图像. 方法缺陷:对散乱的毛发没有用. 使用方法:1.点击“魔 ...
- java 时间戳与日期字符串相互转换
/** * 时间戳转换成日期格式字符串 * @param seconds 精确到秒的字符串 * @param formatStr * @return */ public static String t ...
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-3]
引入Struts2 在pom.xml中加入jar包 <!-- struts2 --> <dependency> <groupId>org.apache.struts ...
- MongoDB (五) MongoDB 数据库操作
一.MongoDB创建数据库: use 命令 MongoDB use DATABASE_NAME 用于创建数据库.该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库. 语法: use D ...