在win32上实现响应WM_NCLBUTTONUP

在Windows编程中,当用户在窗口非客户区释放左键时,通常会接收到WM_NCLBUTTONUP消息。然而,如果窗口处于激活状态,此消息可能不会发送。本文探讨了这个不寻常的行为,特别是它与WM_MOVE消息的关系。为了解决这个问题,作者通过重写WM_NCHITTEST消息来模拟WM_NCLBUTTONUP的效果,确保在特定区域内触发所需行为。尽管这种方法可能会影响可调整大小窗口的操作,但在固定尺寸窗口上的测试显示有效。
摘要由CSDN通过智能技术生成

WM_NCLBUTTONUP,按照msdn的原话:

Posted when the user releases the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.

大概意思就是用户在窗口非客户区,鼠标左键弹起会发送该消息。但是该窗口是当前激活的且鼠标在当前的窗口,左键弹起,则不会发送该消息......?????疑惑,那我要你干啥?????管上一层窗口送下来的WM_NCLBUTTONUP吗??????

后来我查了下资料,发现这是个很玄幻的消息,当你单击鼠标、然后放开,会发现该消息并没有出现。相反,当双击窗口标题栏的时候,该消息出现了。

而这是微软自己的锅,至少到了win10.0.18362还有着这个奇怪的"特性"。事实上,Windows把这个消息变成了WM_MOVE,而不是WM_NCLBUTTONUP。

于是,想了一个权宜之计——重写WM_NCHITTEST。因为我是<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值