DeepSeek V4.1 Flash
aee3a388b5
修复信号面板滚动条跟随、工具栏连点丢状态、图层竖向网格线步长、多网格单点自适应与单点信号拖拽
用户 2026-10-15 报告的五个问题,逐一给出根因与修法(详见 Documents/agent_mem.md §9.32):
1. 拖动信号面板滚动条、鼠标移到绘图区后“滑块卡在原地不动”
根因:Application::WM_MOUSEMOVE 的 plotOnlyMove 只看 inPlot && m_mouseOverPlot,
拖滚动条进入绘图区后判定“本帧只影响绘图区” ⇒ 面板滚动偏移已变却从不重绘。
修法:新增 draggingNonPlot(正在拖非绘图区组件时一律走完整失效)。
2. 工具栏快速连点 / 双击丢状态
根因:(a) 窗口类带 CS_DBLCLKS,快速第二次按下被合成 WM_LBUTTONDBLCLK 而工具栏未处理
(那一次按下完全丢失);
(b) HandleMouseMove 只要鼠标不在工具栏上就调 OnMouseLeave(),清掉 m_pressedIndex
⇒ 按住期间从按钮边缘划出再回到按钮松手不会触发任何动作。
修法:WM_LBUTTONDBLCLK 命中工具栏时按“按下”处理;m_activeTarget == TOOLBAR 期间不调 OnMouseLeave()。
3. 网格叠底:拖拽期间竖向网格线错位 / 丢失,操作信号样式时“闪烁”
根因:PaintLane 的竖向主刻步长由 Tab().ViewMin/ViewMax 推出,而渲染信号图层时该区间已被
RenderLaneLayerRegion 改成“宽窗口”(≈2× 前台)⇒ 图层辅助线步长 2×、位置与前台不同、
“与主刻重合则跳过”的判据也随之错位 ⇒ 贴图后网格线错位 / 整条丢失,
并在“图层帧 ↔ 结算帧”之间来回切换时闪烁。
修法:新增 m_renderTimeStep,由 RenderLaneLayerRegion 用前台视界跨度算好传入
(与纵向 m_wideTickSpan/m_wideTickHeight 同一思路),PaintLane 优先使用它。
4. 多个网格、每个网格只有一个数据点时「适应视图」把数据点甩飞
修法:新增 FitSinglePointLanes(),按用户给出的规则:
* 左右边界 = 所有网格中最左 / 最右数据点的时间,再向外各偏“一个网格小格”的时间跨度;
* 逐网格 Y 自适应,并在纵向上下各留“一个 Y 小格”的高度;
* 全部数据点在同一时刻时 ⇒ 时间跨度 1s 且以该时刻居中(与首个单点信号的初始视图对齐);
* 某网格只有一个取值 ⇒ 该网格 Y 跨度 1 且居中。
仅在全部可见信号都是单点(finiteCount == 1)时启用,否则交回常规 FitAll。
5. 单点信号的悬停高亮与拖拽换网格
修法:HitTestSignal 新增单点分支(SinglePointScreenPos + 容差 = max(常规容差, 该点绘制半径));
悬停用环状光晕且不改鼠标形状(QueryCursor 不查 HitTestSignal),按下拖拽后才改 IDC_SIZEALL;
拖拽虚影对单点信号回退为实心点 + 环。
验证(全部离屏,不占用鼠标 / 键盘 / 屏幕):
- .preflight/check(SW_HIDE + 只注入合成消息 + 进程/线程 BELOW_NORMAL)**67/67 通过**,连跑 3 次稳定。
其中 [C] 直接量“宽基底图层位图自身”的网格线间距(图层主刻 123px vs 前台 122px、辅助线 25px vs 25px),
并断言拖拽帧确实来自宽基底贴图路径(m_wideLastValid)。
- A/B 判别:回退上述六处修复后 **17 项如实失败**([C] 辅助线 49px vs 25px、20 vs 40 条、最大偏移 539px)。
- make release:三个改动文件重新编译 **零警告**;链接用临时 `make release TARGET_FILE_NAME=Target_check` 通过。
同步记忆:Documents/agent_mem.md 新增 §9.32、§11.2 第 64–68 条硬约束、变更日志末行。
2026-10-15 17:58:33 +08:00
..
2026-10-15 17:58:33 +08:00
2026-09-29 15:05:29 +08:00
2026-10-15 17:58:33 +08:00
2026-10-15 17:58:33 +08:00
2026-10-10 11:30:07 +08:00
2026-10-09 09:30:30 +08:00