为什么.Net应用程序会收到两次WM_NCHITTEST?

时间:2011-08-29 22:15:24

标签: .net winapi

我正在做一个无缝模拟SendInput生成的消息的函数。

到目前为止,我正在向窗口发送WM_NCHITTEST。 然后WM_SETCURSOR与命中测试的结果。 最后是WM_MOUSEMOVE。

但是有些窗口(即:visualstudio,.net)接收到2个或更多相同WM_NCHITTEST的序列。

我怎么知道有多少命中测试被发送到窗口?

/*Example from vstudio 2010:*/
<15008> 000E030E S WM_NCHITTEST xPos:509 yPos:543   //1st
<15009> 000E030E R WM_NCHITTEST nHittest:HTCLIENT
<15010> 000E030E S WM_NCHITTEST xPos:509 yPos:543   //2nd
<15011> 000E030E R WM_NCHITTEST nHittest:HTCLIENT
<15012> 000E030E S WM_SETCURSOR hwnd:000E030E nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<15013> 000E030E R WM_SETCURSOR fHaltProcessing:False
<15014> 000E030E P WM_MOUSEMOVE fwKeys:0000 xPos:509 yPos:543

1 个答案:

答案 0 :(得分:-1)

Windows操作系统或任何应用程序可以在需要查询窗口的几何形状时随时发送WM_NCHITTEST以获得任何坐标。如果您的代码完全没有关于调用时间的任何假设,那么您的代码是错误的。

从理论上说,“因为我喜欢”是对“您为什么发送WM_NCHITTEST的答案”。

从广义上讲,用SendInput()模拟SendMessage()是行不通的。您应该停止尝试这样做。