子窗口不捕获WM_MOUSEWHEEL事件

时间:2013-09-17 12:13:13

标签: c++ windows winapi

我有包含孩子的主窗口。在孩子我需要处理鼠标滚轮滚动,但是滚动鼠标滚轮消息转到主窗口并不重要。我用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);

1 个答案:

答案 0 :(得分:7)

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

如果焦点窗口没有处理轮子消息,它将由DefWindowProc传播到焦点窗口的父节点,再传播到其父节点,依此类推。因此,轮子消息仅移动向上窗口层次结构。

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

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