netease-im / NIM_Duilib_Framework

网易云信Windows应用开发框架。
MIT License
2.09k stars 834 forks source link

示例的move_control中移动的快一点就会导致拖动显示窗口类AppWindow不会关闭 #445

Closed clearsky closed 2 years ago

clearsky commented 2 years ago

问题现象

examples的move_control中元素移动的快一点就会导致拖动显示窗口类AppWindow不会关闭 在LowLevelMouseProc或Window::Close中下断点,vs就卡住鼠标开始漂移,调试不了找不知道问题在哪,所以在这来问下这个问题可能的原因 seF 这个时候这些没正常关闭的窗口已经不能再拖动了,说明已经进入AppWindow::OnClose执行了UnInstallHook()

预期结果

拖动显示窗口类AppWindow正常关闭

重现步骤

快速点击元素拖动然后松开鼠标

clearsky commented 2 years ago

找到问题了 DoDraging里面有句注释 //这里创建新窗口 当然得确保不能重复有窗口,这里省略 Window::Close用的TimerManager::GetInstance()->AddCancelableTimer(m_closeFlag.GetWeakFlag(), closeCallback, 300, 1); 关闭窗口是有延迟的,如果在这个延迟内再次点击拖动就创造了一个新窗口 这个时候之前的关闭窗口生效了,进入OnClose把pThis置空了,那么现在这个新窗口就关闭不了了