Files
StellarX/CHANGELOG.md
2025-10-27 14:59:29 +08:00

10 KiB
Raw Blame History

更新日志

StellarX 项目所有显著的变化都将被记录在这个文件中。

格式基于 Keep a Changelog, 并且本项目遵循 语义化版本

English document

[v2.1.0] - 2025-10-27

重点:窗口可拉伸/最大化补强EasyX + Win32、布局管理器HBox/VBox 第一阶段)、选项卡控件雏形;系统性修复黑边、最大化残影、频闪与“控件需交互才出现”等历史问题。并统一了背景快照/恢复按钮单行截断Tooltip 的机制。

新增

  • 窗口拉伸 / 最大化补强(在 EasyX 基础上用 Win32 加固)
    • 新增 Window::enableResize(bool enable, int minW, int minH);运行时开关可拉伸并设置最小跟踪尺寸。
    • 子类化窗口过程:处理 WM_GETMINMAXINFO / WM_SIZE / WM_EXITSIZEMOVE / WM_ERASEBKGND / WM_PAINT,并启用 WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,解决 EasyX 窗口原生不可拉伸问题。
    • 整窗背景绘制:在 WM_PAINT 用 GDI 直写客户区(纯色/图片均支持),彻底消除黑边与最大化残影。
    • 一次性重绘:合并连续 WM_SIZE,使用 pendingW/H + needResizeDirty 在主循环尾部统一置脏重绘,避免死循环与抖动。
  • 布局管理器(第一阶段)
    • Canvas 引入布局元数据:LayoutKind::{Absolute, HBox, VBox, Grid(预留), Flow(预留), Stack(预留)}LayoutParamsmargin{L,R,T,B}fixedW/fixedH(-1=沿用)weightAlign{Start,Center,End,Stretch})。
    • 实装 HBox/VBox 自动布局(容器内部自动排布;容器本身仍绝对定位,可嵌套)。
  • 选项卡Tabs控件雏形
    • 页签条与页面容器解耦;多页签切换;为透明主题提供背景快照避免叠影。
  • 按钮文本单行截断MBCS中/英分治)
    • 基于像素宽度阈值的 ... 截断,避免半字节/半汉字。
  • 悬停提示Tooltip
    • Label 为载体,支持延时出现、自动隐藏、自定义文案(默认回退到按钮文本);使用控件级背景快照/恢复

🔧 变更

  • Window 渲染路径
    • 弱化“离屏 frame→整屏贴图”的依赖WM_PAINTGDI 整窗背景 + EasyX 批量绘制BeginBatchDraw/EndBatchDraw + FlushBatchDraw)以抑制频闪。
    • 尺寸变化仅重建 zoomBackground(图片背景的缩放副本),显示延后到下一帧。
  • Control 基类
    • 标准化 captureBackground/restoreBackground;统一透明/叠放控件行为。
    • 统一 dirty 语义:容器自身脏才重画背景,但子控件每帧评估并按需绘制,不再出现“容器不脏→子控件不画”的空窗。
  • Table
    • 透明模式下,分页按钮与页码标签跟随表格的文本/填充风格,避免风格漂移。
    • 分页度量与整体居中重做:可用宽度含表头;“上一页/下一页+页码”作为一个块水平居中。
    • 修复背景快照区域未计入表头导致恢复失败的问题。
  • 事件循环
    • 合并 WM_SIZE 到循环尾统一处理,降低输入延迟与重绘风暴。

修复

  • 黑边 / 最大化残影 / 频闪WM_ERASEBKGND 返回 1 禁止系统擦背景;WM_PAINT 全面覆盖;清空裁剪区防止旧帧残留。
  • 容器不画、控件需交互后才出现:首帧与输入后触发全树置脏;子控件在容器未脏时也能正常绘制。
  • Table 翻页重叠与透明叠影:修正快照区域、重算坐标并即时恢复+重绘。

⚠️ 可能不兼容

  • 若外部代码直接访问 Window 私有成员(如 dialogs),请改用 getControls() / getdialogs()
  • Table 的分页与表头度量变化可能影响外部硬编码偏移;需要对齐新公式。
  • 自定义控件若未遵循绘制前 SetWorkingImage(nullptr) 的约定,请自查。

📌 升级指引

  1. 窗口背景:将手工 cleardevice()+putimage 迁移到 WM_PAINT整窗覆盖流程。
  2. 透明控件:首绘前 captureBackground(),隐藏/覆盖时 restoreBackground()
  3. 布局:容器设 layout.kind = HBox/VBox;子项用 LayoutParamsmargin/fixed/weight/align)。
  4. 按钮截断:保持单次截断,避免重复 ...
  5. 表格:移除自绘分页,使用内置导航。

[v2.0.1] - 2025 - 10 - 03

新增

  • 新增示例:基于 StellarX 实现的 32 位寄存器查看工具(支持位取反、左移、右移,十六进制/十进制带符号/无符号切换,分组二进制显示)。
    • 示例路径:examples/register-viewer/
  • TextBox新增setTextAPI可在外部设置文本框内容
  • TextBox::setTextAPI修改在设置文本后立即调用draw方法重绘
  • Button新增setButtonClickAPI,允许通过外部函数修改按钮的点击状态,并执行相应的回调函数
  • ==所有文档更新对应英文版本==

[v2.0.0] - 2025-09-21

概述

v2.0.0 为一次重大升级major release。本次发布新增对话框与消息框工厂Dialog / MessageBox并对事件分发、API语义与内部资源管理做了若干重要修复和改进。

部分 API/行为发生不向后兼容的变化breaking changes

新增

  • 对话框系统:

    • 新增 Dialog 类,继承自 Canvas,用于构建模态与非模态对话框
    • 新增 MessageBox 工厂类,提供 ShowModal(同步阻塞)与 ShowAsync异步回调两种便捷API
    • 支持六种标准消息框类型:OK, OKCancel, YesNo, YesNoCancel, RetryCancel, AbortRetryIgnore
    • 自动处理对话框布局、背景保存与恢复、事件传播和生命周期管理
  • 事件系统增强:

    • 所有控件的 handleEvent 方法现在返回 bool 类型,表示是否消费了事件
    • 引入事件消费机制,支持更精细的事件传播控制
    • Window 类的事件循环现在优先处理对话框事件
  • 控件状态管理:

    • Control 基类新增 dirty 标志和 setDirty() 方法,统一管理重绘状态
    • 所有控件现在都实现了 IsVisible()model() 方法
  • API 增强:

    • Button 类新增 setButtonFalseColor() 方法
    • TextBox 类的 setMaxCharLen() 现在接受 size_t 类型参数
    • Window 类新增对话框管理方法和去重检测机制

重大变更Breaking Changes

  • API 签名变更:

    • 所有控件的 handleEvent(const ExMessage& msg) 方法从返回 void 改为返回 bool
    • Control 基类新增纯虚函数 IsVisible() constmodel() const,所有派生类必须实现
  • 资源管理变更:

    • Control 基类的样式保存从栈对象改为堆对象,使用指针管理
    • 增强了资源释放的安全性,所有资源都在析构函数中正确释放
  • 事件处理逻辑:

    • Window 的 runEventLoop() 方法完全重写,现在优先处理对话框事件
    • 引入了事件消费机制,事件被消费后不会继续传播

修复Fixed

  • 内存管理:

    • 修复 Button::setFillIma() 的内存泄漏问题
    • 修复 Control 基类析构函数中的资源释放问题
    • 修复 Dialog 类背景图像资源管理问题
  • 布局与渲染:

    • 修复 Table 组件的分页计算、列宽和行高越界问题
    • 修复 TablepX 坐标累加错误导致的布局错乱
    • 修复 Canvas::draw() 中导致子控件不被绘制的 dirty 判定问题
    • 修复 TextBox::draw()restoreStyle() 的不对称调用问题
  • 事件处理:

    • 修复窗口事件分发逻辑,确保对话框/顶层控件优先处理事件
    • 修复鼠标移出按钮区域时状态更新不及时的问题
    • 修复非模态对话框事件处理中的竞争条件
  • 其他问题:

    • 修复文本测量和渲染中的潜在错误
    • 修复对话框关闭后背景恢复不完全的问题
    • 修复多对话框场景下的 z-order 管理问题

改进Changed

  • 代码质量:

    • 重构了大量内部 API增强异常安全性与可维护性
    • 使用智能指针和现代 C++ 特性替代裸 new/delete
    • 统一了代码风格和命名约定
  • 性能优化:

    • 优化了事件处理流程,减少不必要的重绘
    • 改进了对话框背景保存和恢复机制
    • 减少了内存分配和拷贝操作
  • 文档与示例:

    • 为所有新增功能添加了详细的使用示例
    • 完善了代码注释和 API 文档
    • 更新了 README 和 CHANGELOG 反映最新变化

[1.1.0] - 2025-09-08

新增

  • Window 类 API 增强:
    • 添加了完整的获取器(getter)方法集,提高类的封装性和可用性
    • getHwnd() - 获取窗口句柄,便于与原生 Windows API 集成
    • getWidth() - 获取窗口宽度
    • getHeight() - 获取窗口高度
    • getHeadline() - 获取窗口标题
    • getBkcolor() - 获取窗口背景颜色
    • getBkImage() - 获取窗口背景图片指针
    • getControls() - 获取控件管理容器的引用,允许迭代和操作已添加的控件

改进

  • API 一致性: 为所有重要属性提供了对称的设置器(setter)和获取器(getter)方法
  • 代码文档: 进一步完善了类注释,使其更加清晰和专业

[1.0.0] - 2025-09-08

发布摘要

首个稳定版本 (Stable Release)

新增

  • StellarX 框架的第一个稳定版本
  • 完整的控件库:按钮、标签、文本框、画布、表格和窗口
  • 基于 CMake 的构建系统
  • 详细的文档和示例代码
  • 明确声明:本框架专为 Windows 平台设计

Released

  • 首次发布预编译的二进制库文件,方便用户快速集成,无需从源码编译。
  • 提供的发布包包括:
    • StellarX-v1.0.0-x64-Windows-msvc-x64.zip
      • 编译环境: Visual Studio 2022 (MSVC v143)
      • 架构: x64 (64位)
      • 运行时库: /MD
      • 构建模式: Release | Debug
      • 内容: 包含所有必要的头文件(include/)和静态库文件(``lib/StellarX-Debug.lib StellarX-Release.lib`)

核心特性

  • 模块化设计,遵循 SOLID 原则
  • 统一的控件接口draw() 和 handleEvent()
  • 支持多种控件形状和样式
  • 自定义事件处理回调
  • 轻量级设计,无外部依赖

[0.1.0] - 2025-08-15

新增

  • 初始项目结构和核心架构
  • Control 基类和基本事件处理系统
  • 基础示例和文档设置