鼠标下面子窗口响应滚轮消息 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); 
    }
}

时间: 2024-11-08 23:29:23

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

捕获鼠标滚轮 shift-如何捕获鼠标的左右滚轮消息,然后模拟Shift按键按下

问题描述 如何捕获鼠标的左右滚轮消息,然后模拟Shift按键按下 需求现状如下:我有个软件在XP下使用挺好的.但是到了win7下面,使用该软件的时候,出现如下问题:鼠标左右滚轮变得和上下滚轮一样了,只有同时按下shift键,才能恢复到原来鼠标左右滚轮功能.为了让鼠标的左右滚轮能正常使用,我不得不同时按下shift键,很麻烦.我的打算:想用VC6写一个钩子函数,捕获鼠标的左右滚轮消息,如果检测到有鼠标的左右滚轮滚动,然后模拟Shift按钮按下,向所有进程发送此模拟Shift按钮按下的键盘消息. 解

MFC里让动态创建的ActiveX控件响应Windows消息

碰到的问题:      我在MFC程序中使用一个由CWnd::CreateControl 创建的WebBrowser控件,这个控件是有CWnd继承下来的,今天我有一个需求是要在当中响应Windows消息去重绘,但是我发现这个控件窗口居然不能够接受父窗口的Windows窗口消息,很是无语. 问题产生的原因:      导致控件无法接收Windows窗口消息的原因是因为CreateControl 没有子类化子窗口,自然是无法响应了.关于子类化的相关资料请查看参考资料,或者自行搜索. 解决的办法:  

mfc edit控件怎么响应键盘消息?

问题描述 mfc edit控件怎么响应键盘消息? 比如我用edit做个密码框,输入完密码,直接按回车键就可以登录.不用鼠标去点按钮了,这样怎么做呢? 解决方案 添加edit控件的键盘消息映射,ON_WM_KEYDOWN( ),添加对应处理函数的代码,通过检测输入的是否是回车来决定登录动作.

C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法

你QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法:   要么重写需要弹出的窗体的事件: protected override CreateParams CreateParams     {     get     {         const int WS_EX_NOACTIVATE = 0x08000000;         CreateParams cp = base.CreateParams;         cp.ExStyle |

Mac怎么将Mission Control下的窗口按应用成组

  Mac电脑怎么将Mission Control下的窗口按应用成组 不过,一个好消息是,在使用 Mission Control 的时候,我们可以将类似的应用程序进行分组.更重要的是,在启用分组功能的时候,所有相关联的应用程序都会被放置在一个窗口里,并且该窗口下方会显示对应应用程序的图标. 很显然,有了图标之后,我们可以更容易识别某一个特定的应用程序窗口.下面,我们来看看具体应该怎么操作. 1. 打开系统偏好设置,进入 Mission Control. 2. 在弹出的窗口中勾选"使窗口按应用程序

win7系统下某个窗口程序无声音的原因以及解决方法

  电脑声音出现问题是很多用户都遇到过的问题,通常情况下我们队音频设置进行调整或重装声卡驱动即可解决,而小编在今天遇到一个特别奇怪的问题,同时运行多个应用程序,却发现其中一个程序没有声音,而其他窗口程序声音则正常,对于出现该问题是什么原因造成的,我们需要如何解决?下面小编就以自身的经验,为大家带来解决方法,希望对您有所帮助! 原因分析: Win7系统中有合成器调节,可以帮助用户对程序单独调节音量,如其他声音都正常,那么很有可能就是你不小心单独关闭了某个游戏的音量. 解决方法: 1.单击右下角,音

请大家指导下我html5响应式设计可好

问题描述 请大家指导下我html5响应式设计可好 现在的技术就是:使用百分比设定标签宽度,em设字体,然后通过媒体查询判断不同屏幕尺寸下的标签具体变化,还有什么阻止内容溢出的max-width:可以设计不同尺寸时加载不同的图片: 但我查资料这些都是13年大家都会的技术了. 请问:最近有什么关于响应式的新技术吗?我没查到什么新技术的资料啊 解决方案 最新出来的很多ui 都是基于H5 你可以参考下bootstrap ZUI ace等一些用 网格布局的前端UI框架. 解决方案二: 推荐使用bootst

iframe onkeydown-iframe框架下onkeydown事件响应问题

问题描述 iframe框架下onkeydown事件响应问题 1.在chrome25浏览器下,使用iframe引用一个页面,被引用的页面中是使用Extjs4创建的多种控件 2.在js文件的最后注册了window.onkeydown事件,用于屏蔽用户输入的backspace按键退回到上一步 3.当直接打开被引用的页面,onkeydown能够正确的响应 4.当从iframe打开页面时,onkeydown不会被触发:在iframe打开的页面上任何一处点击后,onkeydown能够被触发 请问这个问题怎么

c++-MFC中静态文本框获取鼠标移动到按钮上的消息

问题描述 MFC中静态文本框获取鼠标移动到按钮上的消息 MFC对话框运用程序,对话框上有多个按钮和静态文本框,鼠标移动到不同按钮上时静态文本框输出不同字符串,这个功能怎么实现?我刚学MFC,是个小白,希望各位大神不嫌麻烦,讲详细一点.谢谢! 解决方案 1.重载PreTranslateMessage函数2.实现如下代码BOOL CMouseDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here an