焦点与WM_MOUSEWHEEL相关的问题
来源:互联网 发布:淘宝宝贝图片下载 编辑:程序博客网 时间:2024/05/21 09:19
最近在使用公司界面库中发现一个问题,就是下拉框获得焦点以后父窗口无法收到WM_MOUSEWHEEL消息,即使主动设置父窗口焦点问题依然存在。一开始怀疑是焦点不再父窗口上导致的问题,然后我就在窗口类的消息处理中加上日志记录WM_SETFOCUS和WM_KILLFOCUS获取和失去焦点的窗口。
运行后的结果是,即使手动设置父窗口的焦点,父窗口确实收到了WM_SETFOCUS消息,但是紧接着子窗口也收到WM_SETFOCUS,父窗口收到WM_KILLFOCUS消息。排除各种可能性以后,确信这是windows父子窗口的一种机制,焦点在父子窗口间一定存在着某种必然的联系,就是父窗口的某个子窗口会强制夺取父窗口的焦点。
那么既然这样,这就是导致父窗口无法收到WM_MOUSEWHEEL消息的根本原因吗?继续探究,我在父窗口中加入一个界面库之外的普通WTL窗口,发现焦点在这个窗口的时候,不会导致父窗口收不到WM_MOUSEWHEEL消息。那么这就排除了子窗口夺取焦点导致父窗口收不到WM_MOUSEWHEEL的因素,所以问题还是出在界面库对WM_MOUSEWHEEL的处理上。
所以再仔细查看界面库相关代码,找到了问题的根本原因。
界面库在窗口处理WM_MOUSEWHEEL消息后直接返回了,没有交由底层api继续处理该消息,导致子窗口收到WM_MOUSEWHEEL后,没有被继续分发给父窗口。解决方法也很简单,在子窗口处理WM_MOUSEWHEEL消息的时候,按需求决定是否继续由底层处理,比如子窗口在自己被隐藏的时候,bHanded设为FALSE,继续交给父窗口处理就行了。
0 0
- 焦点与WM_MOUSEWHEEL相关的问题
- 鼠标钩子与WM_MOUSEWHEEL
- Dialog 焦点问题,ListView 与 CheckBox 的焦点问题
- ListView 与EditText共存的焦点问题
- ListView与CheckBox混用焦点的问题
- div与焦点事件的问题
- 外部EditText与PopWindow的焦点问题
- VC 窗口焦点问题以及回车键,tab键的相关
- WM_MOUSEWHEEL在多屏下的BUG
- “WM_MOUSEWHEEL” : 未声明的标识符
- Android 相关知识 EditText焦点相关问题
- EditText的焦点问题
- ListView的焦点问题
- EditText焦点的问题。
- EditText焦点的问题
- EditText 的焦点问题
- ListView的焦点问题
- 鼠标下面子窗口响应滚轮消息 WM_MOUSEWHEEL,而不需要焦点,也不改变焦点。
- string字符串若干操作
- ffmpeg学习笔记(1)
- 【活动报名】11Space :和大牛一起聊聊“微信小程序”!
- Description ResourcePathLocationType Java compiler level does not match the version of the instal
- Web安全测试(一)-手工安全测试方法&修改建议
- 焦点与WM_MOUSEWHEEL相关的问题
- 关于C++中的public、private、protected
- 初识JNDI
- Android N 调用相册crash- FileUriExposedException
- if与switch;for和while知识点
- Android 图片上下旋转
- 脚本实现U盘自动挂载(linux)
- 两个栈实现一个队列的push和pop
- Xcode 8 去除控制台打印多余信息