Win32. Hook. Intercept WM_MOUSEWHEEL by child windows

↘锁芯ラ 提交于 2019-12-13 05:24:02

问题


I am trying to intercept mouse wheel by child windows under cursor. But something is wrong. It seems like message sends many times. What did I do wrong?

LRESULT CALLBACK MouseProc(__in  int     nCode,
                           __in  WPARAM  wParam,
                           __in  LPARAM  lParam)
{
    LRESULT      ret = 0;
    static  BOOL b   = TRUE;

    if (wParam == WM_MOUSEWHEEL)
    {
        if (b)
        {
            MOUSEHOOKSTRUCTEX *pMhs = (MOUSEHOOKSTRUCTEX *)lParam;
            short zDelta            = HIWORD(pMhs->mouseData);
            POINT pt;
            GetCursorPos(&pt);
            LPARAM lParam = MAKELPARAM(pt.x, pt.y);

            HWND hWnd = WindowFromPoint(pt);

            b = FALSE;
            SendMessage(hWnd, WM_MOUSEWHEEL, zDelta, lParam);
        }
        else
        {
            b = TRUE;
        }

        ret = 1;
    }
    else
    {
        CallNextHookEx(0, nCode, wParam, lParam);
    }

    return ret;
}

来源:https://stackoverflow.com/questions/18496002/win32-hook-intercept-wm-mousewheel-by-child-windows

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!