60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
# Fix-BUG-20260203-0001
|
||
|
||
> 适用场景:记录某个 BUG 的修复方案、影响评估、验证结果与落地信息。
|
||
|
||
## 关联信息
|
||
|
||
- Fix ID: Fix-BUG-20260203-0001
|
||
- 关联 BUG ID: BUG-20260203-0001
|
||
- 修复目标: 避免对话框打开时错误合成并下发 `WM_MOUSEMOVE`,只在对话框关闭后刷新可见控件 hover 状态。
|
||
- 状态:已完成
|
||
- 负责人: 未记录
|
||
- 分支 / 版本: master / v3.0.1
|
||
|
||
## 根因分析
|
||
|
||
- 根因: 合成 `WM_MOUSEMOVE` 的代码位于 `if (needredraw || dialogClose)` 范围内,但执行合成下发时没有再判断 `dialogClose` 是否为真。
|
||
- 触发条件: 打开对话框触发重绘判断。
|
||
- 为什么之前没发现:[可选] 早期未引入日志系统,隐藏的事件下发问题不易被发现。
|
||
- 关键证据:[可选] 对话框打开日志中出现“对话框关闭,合成WM_MOUSEMOVE已下发”。
|
||
|
||
## 修复方案
|
||
|
||
- 修复思路: 合成 `WM_MOUSEMOVE` 前显式判断 `dialogClose`,只有对话框关闭路径才执行合成并下发。
|
||
- 关键改动:
|
||
- 在 `Window::runEventLoop()` 中,对合成 `WM_MOUSEMOVE` 下发逻辑增加 `dialogClose == true` 条件。
|
||
- 涉及文件 / 类 / 函数:
|
||
- `Window.cpp`
|
||
- `Window::runEventLoop()`
|
||
- 影响的 API / 行为:[可选] 无对外 API 变化。
|
||
- 关键约束 / 不变量:[可选] `dialogClose == true` 才能合成并下发 `WM_MOUSEMOVE`。
|
||
- 回滚点 / 开关:[可选] 回退 `dialogClose` 条件判断。
|
||
|
||
## 影响评估
|
||
|
||
- 影响范围: 对话框打开 / 关闭后的 hover 状态刷新、普通控件事件下发。
|
||
- 兼容性影响:无
|
||
- 行为变化:有(对话框打开阶段不再下发合成 `WM_MOUSEMOVE`)
|
||
- 性能影响:持平或更优,减少不必要事件下发。
|
||
- 回归风险: 暂无;需确认对话框关闭后 hover 状态仍能正确刷新。
|
||
|
||
## 验证结果
|
||
|
||
- 验证步骤:
|
||
|
||
1. 创建包含对话框的最小 Demo。
|
||
2. 启动日志系统。
|
||
3. 触发对话框弹出并观察日志。
|
||
4. 关闭对话框并确认只在关闭阶段出现合成 `WM_MOUSEMOVE` 下发。
|
||
|
||
- 验证结果: PDF 历史记录标记已修复。
|
||
- 回归检查:[可选] 非模态对话框事件处理、关闭后 hover 状态刷新、普通控件悬停状态。
|
||
- 验证证据:[可选] PDF 记录包含 2026-02-10 运行日志。
|
||
|
||
## 落地信息
|
||
|
||
- Commit: b765e54eff28ebcd0bd99a81dec80b3ac0769337
|
||
- PR:[可选] git 推送
|
||
- 发布版本: v3.0.1
|
||
- 备注: 来源原始 Fix 记录未包含 `-XXXX` 后缀,入库时按 BUG ID 补充为 `Fix-BUG-20260203-0001`。
|