zoukankan      html  css  js  c++  java
  • duilib WindowImplBase BUG修复 --- 按一次ESC键, 关闭多个窗口

    BUG造成的影响

              继承自WindowImplBase的窗口类, 如果没有重写重写ResponseDefaultKeyEvent而由WindowImplBase默认处理的话, 会导致按一次有ESC键, 导致多个窗口全部关闭.

     

    产生原因

    第1张图:
    esc1

    ESC按键属于PreMessage, 所以会经由这里的PreMessageHandlers处理, 如果 MessageHandler 处理了该消息, 那么她就应该置 bHandled 为 true, 以防止 ESC 消息继续往下传导致多个窗口关闭.


    第2张图:
    esc4

    如果处理了 ResponseDefaultKeyEvent, 那个应该返回TRUE.

    但实际的代码作者处理时大意了:

    第3张图:
    esc2

    参数 hHandled 被注释掉了, 所以此函数导致的结果是:  bHandled 总是为 false.  由于为false, 进一步导致ResponseDefaultKeyEvent 的返回值无用. 所以应当像下面这样做修改.

    解决方案

    第4张图:
    esc3

    在头文件以及 MessageHandler 中开启 bHandled 参数的使用.
    并修改 bHandled 的值为 ResponseDefaultKeyEvent 的返回值. 代表是否已经处理. 返回值无效, 没有使用.

    参考修改: https://github.com/movsb/duilib/commit/5927b28

    女孩不哭 @ cnblogs.com/memset @ 2014-07-01

  • 相关阅读:
    人月神话读后感2
    大三学习进度13
    大三学习进度16
    大三学习进度14
    大三学习进度11
    大三学习进度15
    人月神话读后感3
    大三学习进度10
    Linux设备树
    clk_enable
  • 原文地址:https://www.cnblogs.com/memset/p/duilib_all_windows_close_once_esc.html
Copyright © 2011-2022 走看看