我正在尝试使用普通的WinAPI使自己成为一个GUI库。但我发现处理Window Message真的很令人沮丧。
例如,我可以看到当我将鼠标移到窗口上时,WM_NCHITTEST将在WM_MOUSEMOVE之前发送给我。 但如果我按下左按钮,四处移动,然后松开左按钮。然后我只接收WM_MOUSEMOVE。可能是因为我在接收WM_LBUTTONUP时收到WM_LBUTTONDOWN和ReleaseCapture(HWND)时调用SetFocus(HWND),SetCapture(HWND)
这些不同的行为对我来说似乎是个迷雾。我想知道是否有任何文档/文章解释有关这些窗口消息的详细信息。至少,告诉我应该注意什么。 (查尔斯的“编程Windows”对我来说不起作用,因为它只介绍了这些消息的基础,但没有告诉我像我提到的关于WM_NCHITTEST / WM_MOUSEMOVE的陷阱)
答案 0 :(得分:3)
通过说SetCapture(HWND)
,您要求系统将所有鼠标消息重定向到您的窗口,直到您致电ReleaseCapture(HWND)
。当某个窗口捕获鼠标输入(所有消息都重定向到那里)时,无需发送WM_NCHITTEST
。
如果需要,您可以自己将WM_NCHITTEST发送到鼠标下的窗口。
答案 1 :(得分:2)
http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx http://blogs.msdn.com/b/oldnewthing/archive/2011/02/18/10131176.aspx
WM_NCHITTEST用于命中测试。它只在需要时发送。 MSDN上有每条消息的文档。还有一个关于鼠标输入的部分http://msdn.microsoft.com/en-us/library/ms645533(v=VS.85).aspx