鼠标下面子窗口响应滚轮消息 WM_MOUSEWHEEL,而不需要焦点,也不改变焦点。

简介:

转动滚轮会导致Windows在有输入焦点的窗口(不是鼠标光标下面的窗口)产生WM_MOUSEWHEEL消息。所以当子窗口没有焦点的时候将收不到消息WM_MOUSEWHEEL。但是,当我们把鼠标移到某个子窗口的时候,并转动滚轮,应该是希望这个子窗口响应滚轮,而不管它是否有焦点。最直接的解决方法是调用SetFoucs函数把这个子窗口设为有焦点。

常规来说,滚轮是改变滚动条位置的,而单击鼠标左键才是用来改变焦点的。滚动滚轮的时候焦点改变并不是我们所希望的。

那我们要怎么又使鼠标下面的窗口响应滚轮, 而又不改变焦点呢? 这就需要重载 PreTranslateMessage 来改变响应WM_MOUSEWHEEL消息的窗口。


下面是例程:

BOOL CXXXApp::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_MOUSEHWHEEL || pMsg->message == WM_MOUSEWHEEL)
{
POINT pos; 
GetCursorPos (&pos); 
pMsg->hwnd = WindowFromPoint (pos); 
}

return CWinAppEx::PreTranslateMessage(pMsg);
}
对于没用MFC的程序来说,可以参考下面的代码
int WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,  int nCmdShow) 

    MSG msg; 
     while (GetMessage (&msg, NULL, 0, 0)) 
    { 
         if (msg.message == WM_MOUSEWHEEL) 
        { 
            POINT pos; 
            GetCursorPos (&pos); 
            msg.hwnd = WindowFromPoint (pos);        // 要在TranslateMessage 函数前面
        }
        TranslateMessage (&msg); 
        DispatchMessage (&msg); 
    }
}
目录
相关文章
|
9月前
键盘绑定按下事件
键盘绑定按下事件
30 0
如何知道鼠标进入及离开一个视图?
如何知道鼠标进入及离开一个视图?
Qt | 鼠标事件和滚轮事件 QMouseEvent、QWheelEvent
学习使用Qt的鼠标事件和滚轮事件。
692 0
|
Windows
Windows程序设计——窗口键盘消息滚动事件
Windows程序设计——窗口键盘消息滚动事件
240 0
|
移动开发 数据可视化 前端开发
解决安卓收起键盘无法触发失焦事件的问题
解决安卓收起键盘无法触发失焦事件的问题
974 0
|
Java
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
420 0
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
|
Windows
WindowFocusListener窗体焦点监听器
WindowFocusListener窗体焦点监听器
228 0
WindowFocusListener窗体焦点监听器
鼠标滚轮消息的捕捉
鼠标滚轮消息的捕捉
673 0
|
C# Windows
C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法
你QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法:   要么重写需要弹出的窗体的事件: protected override CreateParams CreateParams     {     get     {         const ...
1186 0