zoukankan      html  css  js  c++  java
  • 【笨嘴拙舌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
    HTRIGHT    In the right border of a window


    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释放)”

  • 相关阅读:
    利用百度地图API实现百度地图坐标拾取
    newtonsoft.json的JObject里的JSON数据 动态
    监听微信返回按钮
    C# 如何理解如下泛型约束 class A<T>:where T:class{}
    微博数据库设计 _转
    新浪微博,腾讯微博mysql数据库主表猜想 __转
    Ferris教程学习笔记:js示例3.9 倒计时时钟
    Ferris教程学习笔记:js示例3.8 简易网页时钟
    Ferris教程学习笔记:js示例3.6 判断数字是否为两位数
    Ferris教程学习笔记:js示例3.5 页面加载后累加,自加1
  • 原文地址:https://www.cnblogs.com/pavkoo/p/3316506.html
Copyright © 2011-2022 走看看