在 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 事件的主要内容,如果未能解决你的问题,请参考以下文章

在 MFC 应用程序中未调用 ExitInstance

VC中MFC从哪里开始运行,MFC怎么调试,很急呀

功能区 MFC 中未显示快速访问工具栏 (QAT)

VC中MFC从哪里开始运行,MFC怎么调试

vc6.0 mfc窗口问题

VC++(MFC)中动态创建和管理按钮控件,怎么做?