# 功能变更 ID: Feature-20260409-0003 > 适用场景:记录小到中等规模的功能、接口、行为、默认值或配置变化。 > 不适用场景:新增核心模块、重大模块重构、架构级设计,请使用“新增功能模块”模板。 ## 基本信息 - ID: Feature-20260409-0003 - 标题: 输入事件、hover 与遮挡交互调整 - 状态:已完成 - 类型:修改 - 级别:L2 中等 - 模块:Window / Canvas / Button / TextBox / Dialog / TabControl - 版本 / 分支:`master` - 环境:Windows + EasyX + VS2022 - 负责人:Codex 协作修改 ## 变更背景 - 背景: - 初始版本中,hover、点击、遮挡与重叠控件之间的事件传递不够稳定。 - 目标: - 建立更一致的鼠标事件消费规则,减少穿透、残留 hover 和无意义重绘。 - 不做什么:[可选] - 暂不彻底解决“快速划过多按钮偶发一帧双高亮”的底层限制问题。 ## 变更内容 - 变更摘要: - 收紧 `Button / TextBox / Dialog` 的事件消费语义,并补上对话框关闭后及遮挡场景下的 hover 清理。 - 新增项:[可选] - `Window::dispatchSyntheticMouseMoveToControls(...)` - 修改项:[可选] - `Button` 只在合理命中路径上吞掉鼠标事件 - `TextBox` 纯 hover 不再处理 - 非模态对话框覆盖区域内阻断底层穿透 - 对话框关闭后补发合成鼠标移动同步 hover - 删除 / 废弃项:[可选] - 大量 hover DEBUG 日志已降噪 - 受影响的文件 / 类 / 函数: - `Window.cpp` - `Canvas.cpp` - `Button.cpp` - `TextBox.cpp` - `Dialog.cpp` - `TabControl.cpp` - 对外 API / 属性变化:[可选] - 无新增公开 API,主要是行为语义变化 ## 行为对照 - 变更前: - 遮挡区域 hover/click 可能穿透;对话框关闭后底层 hover 可能残留。 - 变更后: - 交互更偏向“命中即消费,关闭后同步清理 hover,遮挡区域不透传”。 - 兼容性说明:部分兼容 - 迁移说明:[可选] - 若旧代码依赖非模态对话框下方控件还能收到事件,这种行为已被收紧 ## 验证与落地 - 验证方式: - `KEY == 2 / 3 / 4` 中对按钮、Tab、Table 分页、对话框关闭链做回归 - 验证结果: - 主要交互一致性问题已收敛 - 关联 BUG / Fix:[可选] - `BUG-20260409-0001` - `Fix-BUG-20260409-0001` - Commit: - `7f8431a` - `b07a4ec` - 当前工作区未提交阶段 - PR:[可选] - 发布版本:[可选] - 备注:[可选]