鼠标下面子窗口响应滚轮消息 WM_MOUSEWHEEL,而不需要焦点,也不改变焦点。
来源:互联网 发布:人工智能:伏羲觉醒 编辑:程序博客网 时间:2024/05/18 18:42
转动滚轮会导致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); }}
- 鼠标下面子窗口响应滚轮消息 WM_MOUSEWHEEL,而不需要焦点,也不改变焦点。
- 鼠标滚轮消息WM_MOUSEWHEEL
- 使控件子窗口的响应鼠标滚轮消息
- 使控件子窗口的响应鼠标滚轮消息
- MFC 子窗体响应鼠标滚轮消息
- c# listview 点击空白,也不改变焦点
- C# 子窗口获得焦点
- MFC中子窗口鼠标滚轮无法响应
- 实现Label的鼠标点击响应,以及获取焦点后改变颜色
- IWebBrowser2在没有焦点时响应滚轮事件
- 鼠标单击事件、滚轮事件,根据焦点缩放图片
- win32中WM_MOUSEWHEEL消息响应
- 焦点与WM_MOUSEWHEEL相关的问题
- VC MDI 子窗口或嵌入窗体获得焦点后,用Alt快捷键弹出主窗口菜单无响应以及
- fvwm 焦点窗口和鼠标移动, 窗口状态
- js实现鼠标滚轮滚动以当前鼠标焦点为中心缩放
- textbox 获得焦点而输入法改变的问题
- Android 控件背景随控件焦点而改变
- KindEditer For Asp.net 图片上传
- ios简单sqlite使用
- Firebird 数据库管理系统
- 赫夫曼编码
- 初始化C++类变量的简单脚本
- 鼠标下面子窗口响应滚轮消息 WM_MOUSEWHEEL,而不需要焦点,也不改变焦点。
- alv中的style
- 系统提示一个程序正在被另一个程序调用,如何知道是被哪个程序调用
- 找工作二三事
- 男人只有有了钱才有自信
- 使用 Android PreferenceScreen 偏好显示类(android.preference.PreferenceScreen)
- c++小知识
- Mysql MyISAM引擎相关数据文件浅析
- android 用tcpdump抓取网络包