zoukankan      html  css  js  c++  java
  • MFC 消息中( WPARAM wParam,LPARAM lParam)包含信息

    windows的消息具有以下两个参数:
      (1)字参数(wParam)
      (2)长参数(lParam)
      字参数和长参数都是32位整数,用于提供消息的附带消息,是消息传递过程中参数的载体。附加信息消息号取决于消息号。

    一、wParam和lParam消息 :部分说明需要查看MSDN

    例如:

    WM_SIZE

    wParam
    Specifies the type of resizing requested. This parameter can be one of the following values.
    SIZE_MAXHIDE
    Message is sent to all pop-up windows when some other window is maximized.
    SIZE_MAXIMIZED
    The window has been maximized.
    SIZE_MAXSHOW
    Message is sent to all pop-up windows when some other window has been restored to its former size.
    SIZE_MINIMIZED
    The window has been minimized.
    SIZE_RESTORED
    The window has been resized, but neither the SIZE_MINIMIZED nor SIZE_MAXIMIZED value applies

    lParamThe low-order word of lParam specifies the new width of the client area.

    The high-order word of lParam specifies the new height of the client area.

     1 WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高。

     2 滚动条WM_VSCROLL或WM_HSCROLL消息,LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。

    3 击键消息,有WM_SYSKEYDOWN、WM_SYSKEYUP、WM_KEYUP、WM_KEYDOWN,其中wParam是虚拟键代码,lParam是包含属于击键的其他信息。lParam消息参数分为6个域,有重复计数、环境代码、键的先前状态等。 

    4 字符消息WM_CHAR、WM_DEADCHAR、WM_SYSCHAR、WM_SYSDEADCHAR,lParam消息参数跟击键消息的lParam消息参数内容相同,wParam参数是ANSI或Unicode字符代码

    5 客户区鼠标消息WM_LBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONDOWN、WM_RBUTTONUP、WM_MBUTTONDOWN、WM_MBUTTONUP,lParam参数的低位是鼠标的客户区x坐标,高位是客户区y坐标。wParam参数是指示鼠标键及Shift和Ctrl键的状态。wParam&MK_SHIFT或MK_CTRL,如果返回TRUE就意味着有按下Shift或Ctrl键。

    6 非客户区消息,wParam参数指明移动或者单击鼠标键的非客户区位置,以HT开头,lParam参数低位指出了鼠标所在屏幕坐标的x坐标,高位指出了鼠标所在屏幕坐标的y坐标。 

     7 鼠标轮滚动消息,WM_MOUSEWHEEL消息,lParam将获得鼠标的屏幕位置(坐标),wParam参数的低位表明鼠标键和Shift与Ctrl键的状态。wParam高位有一个“delta”值,该值可正可负,指出了滚轮导致屏幕滚动几行,120表示向上3行。 

     8 计时器消息WM_TIMER,wParam参数等于计时器的ID值,lParam为0

     9 按钮子窗口的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。 

    10 焦点消息,对于正在失去焦点的窗口,会收到WM_KILLFOCUS消息,其wParam参数是即将接收输入焦点的窗口的句柄。对于即将获取焦点的窗口,会收到WM_SETFOCUS消息,其wParam参数是正在失去焦点的窗口的句柄。

    11 编辑控制的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。

    12 列表框的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。 

    13 菜单消息1,WM_INITMENU,wParam是主菜单句柄,lParam是0. 

    14 菜单消息2,WM_MENUSELECT,菜单跟踪消息,指针移到菜单的某一些,就会发送这个消息给窗口过程,其wParam参数的低位是选中项菜单的ID或者弹出式菜单的句柄,高位是选择标识,lParam参数是包含选中项的菜单句柄。

    15 菜单消息3,WM_INITMENUPOPUP,准备显示一个弹出式菜单时产生的消息,wParam参数是弹出式菜单的句柄,lParam的低位是弹出式菜单的索引,如果该菜单是系统菜单,那么高位是1,否则为0。 

     16 菜单消息4,WM_COMMAND,选中菜单后产生,wParam低位是击中菜单的ID,高位是0,lParam参数也是0。

     17 菜单消息5,WM_SYSCOMMAND,表示用户从系统菜单中选择一个启用的菜单项,其wParam参数是菜单的ID, lParam为0.如果该消息是由按鼠标产生的,那么lParam参数是鼠标的屏幕坐标。

    18 加速键消息,WM_COMMAND消息,wParam低位是加速键ID,高位是1, lParam是0.

    消息

    说明

    wParam

    lParam

    WM_PAINT

       

    低位是客户区的宽

    高位是客户区的高

    WM_VSCROLL

    WM_HSCROLL

    窗口滚动条消息

    低位指出了鼠标对滚动条的操作

     
     

    击键消息

    虚拟键代码

    分为6个域,有重复计数、环境代码、键的先前状态等

     

    字符消息

    ANSI或Unicode字符代码

    分为6个域,有重复计数、环境代码、键的先前状态等

     

    客户区鼠标消息

    指示鼠标键及Shift和Ctrl键的状态

    鼠标的客户区坐标

     

    非客户区鼠标消息

    指明移动或者单击鼠标键的非客户区位置,以HT开头

    鼠标的屏幕坐标

    WM_MOUSEWHEEL

    鼠标轮滚动消息

    低位表明鼠标键和Shift与Ctrl键的状态

    高位指出了滚轮导致屏幕滚动几行

    鼠标的屏幕位置

    WM_TIMER

    计时器消息

    计时器的ID值

    0

    WM_COMMAND

    按钮

    低位是子窗口ID,高位是通知码

    子窗口句柄

    WM_SETFOCUS

    焦点消息

    正在失去焦点的窗口的句柄

     

    WM_KILLFOCUS

    焦点消息

    即将接收输入焦点的窗口的句柄

     

    WM_COMMAND

    编辑控制

    低位是子窗口ID,高位是通知码

    子窗口句柄

    WM_COMMAND

    列表框

    低位是子窗口ID,高位是通知码

    子窗口句柄

    WM_INITMENU

     

    主菜单句柄

    0

    WM_MENUSELECT

    菜单跟踪消息

    低位是选中项菜单的ID或者弹出式菜单的句柄,高位是选择标识

    选中项的菜单句柄

    WM_INITMENUPOPUP

    准备显示一个弹出式菜单时产生

    弹出式菜单的句柄

    低位是弹出式菜单的索引,如果该菜单是系统菜单,那么高位是1,否则为0.

    WM_COMMAND

    选中菜单后产生

    低位是击中菜单的ID

    高位是0

    0

    WM_SYSCOMMAND

    用户从系统菜单中选择一个启用的菜单项

    菜单的ID

    0如果该消息是由按鼠标产生的,那么是鼠标的屏幕坐标。

    WM_COMMAND 

    加速键消息

    低位是加速键ID

    高位是1

    0

    在Win32中,wParam   lParam是用来传递消息数据的最常用的手段. 
    比如,对按键消息来说,鼠标的X和Y的坐标被压缩进lParam中 
    对MFC来说,消息可以用多样的类型参数来传递,对用户自定义消息 
    来说,只能用wParam和lParam来传递。

    在Win32   SDK中消息本身是作为一个结构体记录传递给应用程序的,这个记录中包含消息的类型以及其他信息。这个记录类型叫做MSG,它在window中是这样声明的: 
    typedef   struct   tagMSG   {           //   msg     
          HWND   hwnd;       //窗口句柄 
          UINT   message;       //消息常量标识符 
          WPARAM   wParam;     //32位消息的特定附加信息,具体表示什么处决于message 
          LPARAM   lParam;     //32位消息的特定附加信息,具体表示什么处决于message 
          DWORD   time;       //消息创建时的时间 
          POINT   pt;               //消息创建时的鼠标位置 
    }   MSG; 
    hwnd   接收消息的32位窗口句柄。窗口可以是任何类型的屏幕对象, 
    因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。 
    message   用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。 
    wParam   通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。 
    lParam   通常是一个指向内存中数据的指针。 
    由于wParam,lParam和指针都是32位的,需要时可以强制类型转换。具体表示什么,与message相关,他们是事先定义好的。 
    如果自定义消息:#define   WM_MYMESSAGE   WM_USER+100,需确定wParam,lParam的意义 
    (假设wParam=0时发送数据,wParam=1时接收数据,lParam为CMyClass*   指针,指向一个CMyClass对象,准备要发送的数据或接收数据 
    发送WM_MYMESSAGE时   SendMessage(hwnd,WM_MYMESSAGE,0,pMyClassObject) 
    接收消息的窗口,接收WM_MYMESSAGE中(CMyClass*)lParam参数即pMyClassObject传过来的数据


    二、应用获取控件的ID

    LOWORD(GetCurrentMessage()->wParam) ===>获得发消息的控件ID值

    WORD HIWORD(
        DWORD dwValue
    );
    WORD LOWORD(
        DWORD dwValue
    );

    知网有篇文章也许有用:C++消息参数wParam与lParam的研究
  • 相关阅读:
    防删没什么意思啊,直接写废你~
    绝大多数情况下,没有解决不了的问题,只有因为平时缺少练习而惧怕问题的复杂度,畏惧的心理让我们选择避让,采取并不那么好的方案去解决问题
    Java 模拟面试题
    Crossthread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on
    一步步从数据库备份恢复SharePoint Portal Server 2003
    【转】理解 JavaScript 闭包
    Just For Fun
    The database schema is too old to perform this operation in this SharePoint cluster. Please upgrade the database and...
    Hello World!
    使用filter筛选刚体碰撞
  • 原文地址:https://www.cnblogs.com/xingrun/p/3454787.html
Copyright © 2011-2022 走看看