防止鼠标滚轮滚动控件

时间:2013-02-22 18:29:14

标签: c++ winapi mfc

我正在使用MFC库开发应用程序,我正在尝试阻止用户在滚动鼠标滚轮时意外更改其中一个组合框控件。

我正在寻找一种解决方案,而无需从CComboBox类派生新类并阻止鼠标在那里滚动。

我对系统的理解是Windows将WM_MOUSEWHEEL消息传递给处理它的组合框控件(滚动组合框),然后将其传播到父控件链上(所以它们传递给我的{ {1}}等),这意味着我无法通过在表单视图中捕获事件来阻止滚动。

有没有人能解决这个问题?提前谢谢!

2 个答案:

答案 0 :(得分:3)

您始终可以从CComboBox派生控件,并在控件本身中捕获WM_MOUSEWHEEL消息。然后只需在表单视图中使用新的派生组合框。

如果您不想创建派生类(可能对项目进行了太大的更改),您可以对组合框进行子类化并将WM_MOUSEWHEEL陷入其中。

答案 1 :(得分:2)

覆盖主窗口类中的PreTranslateMessage处理程序并查找WM_MOUSEWHEEL消息。将PreTranslateMessage处理程序中的pMsg-> hwnd句柄与组合框句柄进行比较,如果找到,则将消息过滤掉。