shenhuan111
shenhuan111
采纳率64.3%
2015-04-14 04:39 阅读 3.3k

VC++中窗口过程函数的wParam和lParam区别??

VC++中窗口过程函数的wParam和lParam区别??是什么希望解析

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

9条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2015-04-14 06:52

    我要告诉你的是方法,怎么去自学,而不是结论:

    看到 https://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx 这里(google 搜索wm_keydown msdn第一个结果)

    wParam
    The virtual-key code of the nonsystem key. See Virtual-Key Codes.
    wparam是非系统键的虚拟键码
    lParam
    The repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown following.
    重复的次数、扩展键旗标,上下文码,之前的按键状态旗标
    下面的表格告诉你每一位的作用。

    点赞 1 评论 复制链接分享
  • bdmh bdmh 2015-04-14 05:08
  • VisualEleven Eleven 2015-04-15 08:49

    消息不同,wparam/lparam代表的含义就不一样,它们与具体的消息相关。具体请参考MSDN文档

    点赞 1 评论 复制链接分享
  • oyljerry oyljerry 2015-04-14 06:06

    WPARAM 和 LPARAM,消息响应机制
    wParam和lParam 这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:
    一个是WORD类型的16位整型变量;另一个是LONG类型的32位整型变量。因此根据匈牙利命名法,16位的变量就被命名为wParam, 32位的变量就被命名为lParam。

    到了Win32API中,原来的16位变量也被扩展为32位,因此此时wParam和lParam的大小完全相同。
    在Win32API的早期,为了保证和Win16API的代码可移植性MS定义了WPARAM和LPARAM两个宏。
    当时保留了w前缀的原因一方面是由于WPARAM宏也已W开头,还有也因为要提醒程序员注意到可移植性,当然到了现在Win16早已退出历史舞台,这个前缀也就约定俗成的沿用下来了。

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-04-14 06:13

    wParem和lParam是两个通用的参数。
    在不同的消息中,作用各不相同。具体要看是哪条消息。
    你可以理解为表格上的“备注”,SendMessage发送的消息如同一个表格:
    发给什么窗口,消息名,备注1,备注2。
    比如说对于WM_SETTEXT这个消息,它只用了lparam参数,用于传递设置的文本,而wparam传0。
    WM_LBUTTONDOWN消息两个参数都用上了,wparam用来存放是否按下shift,是否同时按下ctrl,按的是鼠标哪个按钮
    lparam存放的是坐标(高位低位各存x y坐标)
    你要问,有时候2个参数不够怎么办,有的消息非常复杂,WM_INITDIALOG的lparam就指向了一个结构体。具体的参数还可以通过它扩展。
    也有的消息,lparam wparam都不需要。

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-04-14 06:15

    顺便说下,要学会查msdn,比如我提到的3个消息,你可以看msdn去看它们的lparam和wparam各种是干嘛的,比如WM_LBUTTONDOWN
    https://msdn.microsoft.com/en-us/library/ms645607.aspx
    这里就写得很清楚

    Parameters
    wParam
    Indicates whether various virtual keys are down. This parameter can be one or more of the following values.
    ...
    lParam
    The low-order word specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
    The high-order word specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.

    点赞 评论 复制链接分享
  • shenhuan111 shenhuan111 2015-04-14 06:44
     LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
        switch(message)
        {
        case WM_PAINT:
            //MessageBox(NULL,L"2",L"消息窗口",0);//
            ValidateRect(hwnd,NULL);
            break;
        case WM_KEYDOWN:
            if(wParam==VK_ESCAPE)
            {
                DestroyWindow(hwnd);
                //MessageBox(NULL,L"ESC",L"消息窗口",0);//
            }
            break;
    

    这里wParam接受到了按键的信息,而lparam没有,不过这个lParam是做什么用的,举个例
    我刚开始接触VC++的windows编程,不是很清楚

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-04-14 06:55

    在wparam的说明后面有个跳转,可以看到
    https://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx

    这里有具体的虚拟键码
    比如:
    VK_ESCAPE
    0x1B
    ESC key
    就是键盘上左上角的esc。

    别的你也可以类似去查,明白么?

    点赞 评论 复制链接分享
  • hust_wangyajun hust_wangyajun 2015-04-14 16:43

    下载一个本地的MSDN帮助文档,每个窗口过程的WPARAM和LPARAM代表不同的含义,具体需要查。

    点赞 评论 复制链接分享

相关推荐