我正在使用基于MFC对话框的应用程序并具有子类CStatic
控件。我希望在我的子类控件中接收WM_MOUSEWHEEL和其他消息,但不知何故这些消息永远不会到达。
以下是我的Dialog的样子:
我只做了一些非常简单的绘图,并希望能够通过滚动来上下移动我的列表。
我已经做过:
PreTranslateMessage
当我在对话框内滚动/按一个键或用鼠标点击时,可悲的是没有任何东西被调用。这些消息无法到达。
这是我的鼠标轮处理程序,例如:
class CFolderView : public CStatic
{
...
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
DECLARE_MESSAGE_MAP()
...
}
BEGIN_MESSAGE_MAP(CFolderView, CStatic)
ON_WM_MOUSEWHEEL()
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
BOOL CFolderView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
MessageBox("Mouse Wheel moved!", "Debug", MB_OK);
return CStatic::OnMouseWheel(nFlags, zDelta, pt);
}
我无法理解为什么没有输入消息被发送到我的子类控件。是否有一些开关可以为子类控件启用输入?
答案 0 :(得分:2)
您无法处理WM_MOUSEWHEEL
中的CStatic
,因为它无法通过设计获得焦点。
来自MSDN:
鼠标时,WM_MOUSEWHEEL消息被发送到焦点窗口 轮子旋转
通过查看您的屏幕截图,我建议改为继承CListBox
。