我正在使用 MFC 库开发一个应用程序,并且我目前正在尝试防止用户在滚动鼠标滚轮时意外更改其中一个组合框控件。
我正在寻找一种解决方案,而不是从类派生新类CComboBox
并防止鼠标在那里滚动。
我对系统的理解是 Windows 将WM_MOUSEWHEEL
消息传递给处理它的组合框控件(滚动组合框),然后将其传播到父控件链(因此它们到我的CFormView
等),这意味着我无法阻止通过在我的表单视图中捕获事件来滚动。
有没有人可以解决这个问题?提前致谢!
您始终可以从中派生控件CComboBox
并将WM_MOUSEWHEEL
消息捕获在控件本身中。然后只需在表单视图中使用新的派生组合框。
如果您不想创建派生类(可能对您的项目来说更改太大),您可以子类化组合框并将其捕获WM_MOUSEWHEEL
。
覆盖主窗口类中的 PreTranslateMessage 处理程序并查找 WM_MOUSEWHEEL 消息。比较 PreTranslateMessage 处理程序中的 pMsg->hwnd 句柄与组合框句柄,如果找到,将消息过滤掉。