2

我有包含孩子的主窗口。在孩子中,我需要处理鼠标滚轮滚动,但是我滚动鼠标滚轮消息到主窗口的位置并不重要。我用 Spy++ 得到了这些结果。

不知道为什么会这样,但我认为创建孩子有问题,我的代码:

m_window = CreateWindowEx(0, CustomTreeView::m_className.c_str(), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL, x, y, width, height, parent, NULL, NULL, NULL);
4

1 回答 1

9

WM_MOUSEWHEEL消息被发送到具有焦点的窗口(即最后一个SetFocus()调用它的窗口)。鼠标光标的位置无关紧要 - 消息将始终转到焦点窗口。

如果焦点窗口不处理滚轮消息,则将其传播DefWindowProc到焦点窗口的父级,然后再传播到其父级,依此类推。所以轮消息只会向上移动窗口层次结构。

如果您想要一个没有输入焦点的子窗口来获取滚轮消息,那么您需要自己安排将它们转发给它。

如果你这样做,你应该通过不同的消息来做,以避免无限循环的可能性。

于 2013-09-17T12:20:42.497 回答