我是靠谱客的博主 害羞书本,最近开发中收集的这篇文章主要介绍mousewheel 取消_鼠标下面子窗口响应滚轮消息 WM_MOUSEWHEEL,而不需要焦点,也不改变焦点。...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转载自:http://blog.csdn.net/mazhen2006/article/details/7050449

转动滚轮会导致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);

}

}

posted on 2015-01-22 00:10 杨粼波 阅读(4115) 评论(0)  编辑 收藏 引用

最后

以上就是害羞书本为你收集整理的mousewheel 取消_鼠标下面子窗口响应滚轮消息 WM_MOUSEWHEEL,而不需要焦点,也不改变焦点。...的全部内容,希望文章能够帮你解决mousewheel 取消_鼠标下面子窗口响应滚轮消息 WM_MOUSEWHEEL,而不需要焦点,也不改变焦点。...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部