windows鼠标消息

这篇博客详细介绍了Windows系统中鼠标和键盘消息的处理,包括WM_NCHITTEST、客户区鼠标消息、非客户区鼠标消息、键盘消息、字符消息以及其他特殊消息如WM_SIZE、WM_COMMAND等。讲解了wParam和lParam参数在不同消息中的含义,帮助理解窗口过程函数中的消息处理。
摘要由CSDN通过智能技术生成

最开始为windows消息迷惑的时候是一个叫做sendMessage的函数:

LRESULT SendMessage(
  HWND hWnd,
  UINT Msg,
  WPARAM wParam,
  LPARAM lParam
);

最后的两个参数在不同的情况下到底应该怎么来赋值呢?后来又遇到了窗口过程函数:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam),后面的两个参数在不同的消息下分别代表什么意思呢?

曾经四处搜索过,但是没有满意的答复,这两天在看《windows程序设计》,把关于鼠标这部分内容记录下来,作个笔记。

 

鼠标消息:

 

鼠标消息有21种,可以分为三类:

1.命中测试消息WM_NCHITTEST(我的理解:以WM开头的严格来说是消息名称,完整的消息应该是个结构体MSG msg,该消息名称为msg.wParam,但是一般消息和消息名称似乎分的不是很仔细)。

它是优先于任何接下来要说到的客户区和非客户区的鼠标消息。因为其余20种鼠标消息都是基于它的基础之上产生的。也就是说user用鼠标点击之后首先产生的是WM_NCHITTEST消息,然后经窗口函数的DefWindowProc返回一个值,这个值将成为新的鼠标消息的wParam值。

注意:不要被这里的字面字母所迷惑,WM_NCHITTEST虽然有NC作为前缀,但是它不仅是产生非客户区鼠标消息的基础同时也是客户区消息的产生基础。

经由WM_NCHITTEST消息产生的值可以是任意非客户区鼠标消息的wParam值再加上以下四种中的一种:

HTCLIENT                           客户区

HTNOWHERE                      不在窗口中

HTTRANSPARENT                窗口被另外一个窗口覆盖

HTERROR                            使得DefWindowProc产生蜂鸣声

举个例子:如果DefWindowProc返回的是HTCLIENT ,那么windows将把屏幕坐标转换为客户区坐标并产生客户区鼠标消息。

lParam包含的是鼠标位置的屏幕

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值