Files
StellarX-kaifa/开发记录/Fix/Fix-BUG-20260203-0001-对话框打开时错误下发合成WM_MOUSEMOVE修复.md
T

60 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`。