首页 > 代码库 > duilib BUG修复 --- 按一次ESC键, 关闭多个窗口
duilib BUG修复 --- 按一次ESC键, 关闭多个窗口
BUG造成的影响
继承自WindowImplBase的窗口类, 如果没有重写重写ResponseDefaultKeyEvent而由WindowImplBase默认处理的话, 会导致按一次有ESC键, 导致多个窗口全部关闭.
产生原因
第1张图:
ESC按键属于PreMessage, 所以会经由这里的PreMessageHandlers处理, 如果 MessageHandler 处理了该消息, 那么她就应该置 bHandled 为 true, 以防止 ESC 消息继续往下传导致多个窗口关闭.
第2张图:
如果处理了 ResponseDefaultKeyEvent, 那个应该返回TRUE.
但实际的代码作者处理时大意了:
第3张图:
参数 hHandled 被注释掉了, 所以此函数导致的结果是: bHandled 总是为 false. 由于为false, 进一步导致ResponseDefaultKeyEvent 的返回值无用. 所以应当像下面这样做修改.
解决方案
第4张图:
在头文件以及 MessageHandler 中开启 bHandled 参数的使用.
并修改 bHandled 的值为 ResponseDefaultKeyEvent 的返回值. 代表是否已经处理. 返回值无效, 没有使用.
参考修改: https://github.com/movsb/duilib/commit/5927b28
女孩不哭 @ cnblogs.com/memset @ 2014-07-01
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。