如果您查看 Visual Studio 2012,您会注意到如果您使用鼠标滚轮,鼠标下方的窗口将滚动,而不是焦点窗口。也就是说,如果您将光标放在代码编辑器中,并将鼠标移到解决方案资源管理器窗口上并滚动,解决方案资源管理器将滚动,而不是代码编辑器。但是,WM_MOUSEWHEEL 消息只发送到焦点窗口,因此在本例中是代码编辑器。我们如何实现我们的程序,使 WM_MOUSEWHEEL 消息滚动鼠标下的窗口,这是直观的,而不是焦点窗口?
最佳答案
显然我们可以在程序的核心解决这个问题。查看您的消息循环代码,它应该在您的 WinMain 方法中:
while (GetMessage (&msg, NULL, 0, 0) > 0)
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
在这里,我们只需要说明如果消息是 WM_MOUSEWHEEL 消息,我们要将它传递给鼠标下方的窗口,而不是焦点窗口:
POINT mouse;
while (GetMessage (&msg, NULL, 0, 0) > 0)
{
//Any other message.
if (msg.message != WM_MOUSEWHEEL)
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
//Send the message to the window over which the mouse is hovering.
else
{
GetCursorPos (&mouse);
msg.hwnd = WindowFromPoint (mouse);
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
现在,鼠标下方的窗口将始终收到滚动消息,而不是焦点窗口。
关于c++ - 在鼠标下滚动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20256016/