From f18307083428c11dcf66c8be3ffdec37e7d8d6e2 Mon Sep 17 00:00:00 2001 From: fanlusky <1730976608@qq.com> Date: Fri, 12 Jun 2026 22:42:35 +0800 Subject: [PATCH] Add some basic controls --- ui/CMakeLists.txt | 1 + ui/README.md | 4 +- ui/demos/msimeui-demo/DemoScene.cpp | 108 ++++- ui/include/msimeui/Controls.h | 129 ++++++ ui/include/msimeui/Layout.h | 42 ++ ui/src/Controls.cpp | 619 ++++++++++++++++++++++++++++ ui/src/Layout.cpp | 119 ++++++ ui/src/TextBox.cpp | 5 + ui/src/Window.cpp | 6 +- 9 files changed, 1023 insertions(+), 10 deletions(-) create mode 100644 ui/src/Controls.cpp diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt index 9a08d58d..b4db60cf 100644 --- a/ui/CMakeLists.txt +++ b/ui/CMakeLists.txt @@ -20,6 +20,7 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) add_library(msimeui STATIC src/Application.cpp src/Brush.cpp + src/Controls.cpp src/DebugLog.cpp src/DeviceResources.cpp src/TextBox.cpp diff --git a/ui/README.md b/ui/README.md index 7d2e4f74..925ce710 100644 --- a/ui/README.md +++ b/ui/README.md @@ -15,6 +15,8 @@ - `msimeui-demo` 示例程序 - D2D/DWrite 设备资源管理 - 基础布局和控件树 +- `StackPanel` / `HorizontalStackPanel` / `WrapPanel` +- `TextBlock` / `Button` / `CheckBox` / `ProgressBar` / `Slider` / `Separator` - `TextBox` 输入控件 ## 构建 @@ -82,5 +84,5 @@ build/bin/Debug/msimeui-demo.exe ## 后续工作 - 继续完善 `TextBox` 的输入、样式和布局能力 -- 增加按钮、滚动容器、列表和样式系统 +- 增加滚动容器、列表、树、菜单和弹出层 - 引入资源字典、主题和声明式界面描述 diff --git a/ui/demos/msimeui-demo/DemoScene.cpp b/ui/demos/msimeui-demo/DemoScene.cpp index ebe4fd2e..2ac7235f 100644 --- a/ui/demos/msimeui-demo/DemoScene.cpp +++ b/ui/demos/msimeui-demo/DemoScene.cpp @@ -2,6 +2,8 @@ #include "msimeui/Controls.h" +#include + namespace msimeui { std::unique_ptr CreateDemoScene() @@ -10,9 +12,9 @@ std::unique_ptr CreateDemoScene() root->AddChild(std::make_shared(28.0f)); root->AddChild(std::make_shared(L"msimeui", 34.0f, D2D1::ColorF(0x111827), true)); root->AddChild(std::make_shared(12.0f)); - root->AddChild(std::make_shared( - L"Direct2D / DirectWrite rendering with an in-tree TSF text input implementation.", - 16.0f, D2D1::ColorF(0x5B6472))); + root->AddChild( + std::make_shared(L"A retained-mode Win32 GUI framework with Direct2D / DirectWrite and in-tree TSF.", + 16.0f, D2D1::ColorF(0x5B6472))); root->AddChild(std::make_shared(36.0f)); Brush surface; @@ -22,13 +24,104 @@ std::unique_ptr CreateDemoScene() surface.radiusX = 22.0f; surface.radiusY = 22.0f; + auto heroCard = std::make_shared(surface, 20.0f); + auto heroStack = std::make_shared(16.0f); + auto statusText = + std::make_shared(L"Framework status: base controls are now interactive and composable.", 15.0f, + D2D1::ColorF(0x0F172A)); + auto featureWrap = std::make_shared(10.0f, 10.0f); + featureWrap->AddChild(std::make_shared