在 MFC VC++ 中未捕获 MouseWheel 事件
Posted
技术标签:
【中文标题】在 MFC VC++ 中未捕获 MouseWheel 事件【英文标题】:MouseWheel event not getting captured in MFC VC++ 【发布时间】:2020-01-22 13:54:42 【问题描述】:目前我正在将我的一个 MFC 应用程序从 Windows 7 32 位迁移到 Windows 10 64 位。突然,我的鼠标滚轮在我的应用程序中停止工作。
相同的代码在 Windows 7 上的应用程序中工作。
谁能给点建议?
//Mouse registration
m_MouseHook = SetWindowsHookEx(WH_MOUSE,&MouseHookProc, AfxGetInstanceHandle(), GetCurrentThreadId());
//Callback function
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
CPPUITrace objTrace(_T("CPostProcUIControlsDialog::MouseHookProc"));
objTrace.LogError(_T("Madhu::Got wParam %d and nCode is %d"),wParam,nCode);
if (wParam == WM_MOUSEWHEEL) //Never getting this event
//Logic
【问题讨论】:
钩子设置成功了吗? 您的代码无法编译,缺少return CallNextHookEx(ghook, ncode, wparam, lparam);
如果您只是尝试处理鼠标滚轮消息,这可能不是正确的方法。
为什么要使用钩子来处理鼠标滚轮消息?这对我来说听起来过于复杂。只需像处理任何其他 WM_MOUSExxx 消息一样正常处理 WM_MOUSEWHEEL 消息。
这是一个在 Win7 中运行良好的遗留应用程序,当我将其迁移到 Win10 时,它停止运行
【参考方案1】:
我自己想出了答案。在 Windows 10 中,有一个新概念,即在活动窗口和幽灵窗口上滚动工作。由于代码 sn-p 以前来自旧版,因此事件过去常常被传递到主窗口,因为幽灵窗口没有消耗它。
从 windows10 开始有一个鼠标滚动设置,如果它被激活,幽灵窗口也开始消耗鼠标滚动事件
【讨论】:
以上是关于在 MFC VC++ 中未捕获 MouseWheel 事件的主要内容,如果未能解决你的问题,请参考以下文章