首页 > 解决方案 > 在 MFC VC++ 中未捕获 MouseWheel 事件

问题描述

目前我正在将我的一个 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
    }
}

标签: windowsvisual-c++mfc

解决方案


我自己想出了答案。在 Windows 10 中,有一个新概念,即在活动窗口和幽灵窗口上滚动工作。由于代码片段来自以前的遗留事件,因此事件过去常常被传递到主窗口,因为幽灵窗口没有使用它。

从 windows10 开始,有一个鼠标滚动设置,如果它被激活,幽灵窗口也开始消耗鼠标滚动事件


推荐阅读