From e22a779dda8d27456b5e434453fd8f4850aeafbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9D=BF=20=E5=AE=89?= Date: Thu, 29 Jan 2026 19:39:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=89=8D=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 63 ------------------------- .gitignore | 19 ++++---- CLAUDE.md | 31 ++++++++++-- demo/Adminstor/Adminstor/DemoUi.rc | Bin 6282 -> 6404 bytes demo/Adminstor/Adminstor/Resource.h | 12 +---- demo/Adminstor/Adminstor/loginForm.cpp | 4 ++ demo/Adminstor/Adminstor/mainForm.cpp | 41 ++++++++++------ demo/Adminstor/Adminstor/mainForm.h | 1 + demo/Adminstor/Adminstor/small.ico | Bin 46227 -> 99678 bytes 9 files changed, 71 insertions(+), 100 deletions(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1ff0c42..0000000 --- a/.gitattributes +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index 05225a3..f3e0fd2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ -build/ -demo/ -_temp/ -_bin/ -temp/ -bin/ -.vs/ -*.lib \ No newline at end of file +/build +/demo +/_temp +/_bin +/temp +/bin +/.vs +*.db +*.gitignore +*.gitattributes +*.tlog \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 921db2b..093b4b8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,6 +23,13 @@ cmake -B build -DBUILD_SHARED_LIBS=ON # 仅构建库(不构建 demo) cmake -B build -DBUILD_DEMO=OFF + +# 编译为静态库 +cmake --build build/vs2022_x86 --target EzUI --config Debug +cmake --build build/vs2022_x86 --target EzUI --config Release +cmake --build build/vs2022_x64 --target EzUI --config Debug +cmake --build build/vs2022_x64 --target EzUI --config Release + ``` ## 核心架构 @@ -37,8 +44,11 @@ cmake -B build -DBUILD_DEMO=OFF 所有控件继承自 `Control` 基类,核心控件包括: - 基础控件:`Label`, `Button`, `TextBox`, `PictureBox` - 选择控件:`CheckBox`, `RadioButton`, `ComboBox` -- 布局容器:`HLayout`, `VLayout`, `HListView`, `VListView`, `TileListView`, `TabLayout` -- 功能控件:`ScrollBar`, `Menu`, `NotifyIcon`, `ProgressBar`, `TreeView`, `Spacer` +- 数据控件:`TableView`, `TreeView`, `ListView` 系列 +- 布局容器:`HLayout`, `VLayout`, `HListView`, `VListView`, `TileListView`, `TabLayout`, `PagedListView` +- 功能控件:`ScrollBar`, `Menu`, `NotifyIcon`, `ProgressBar`, `Spacer`, `IFrame`, `ShadowBox` +- 表格控件:`TableView` +- 动画:`Animation` - 类似 Qt 的过渡动画系统 ### 布局系统 - **尺寸优先级**:比例尺寸 (`SetRateWidth/Height`) > 绝对尺寸 (`SetFixedSize`) > 控件内容大小 @@ -51,6 +61,8 @@ cmake -B build -DBUILD_DEMO=OFF - `UISelector` - CSS 选择器匹配系统 - `Direct2DRender` - Direct2D 绘图实现 - `RenderTypes` - 颜色、对齐方式等绘图类型 +- `UIDef` - 框架内使用的宏定义集合 +- `EzUI.h` - 框架主接口头文件,定义事件类、枚举、全局资源等核心结构 ### 事件系统 - 支持事件冒泡机制,可实现事件捕获与穿透 @@ -67,6 +79,18 @@ cmake -B build -DBUILD_DEMO=OFF - 控件树内存由父控件自动管理:`Attach`/`Detach` - 图片资源通过 `PtrManager` 自动释放 - XML 布局加载后由 `UIManager` 管理生命周期 +- `add_resource_package` 函数支持资源打包为 `.res` 文件 + +### 调试技巧 +- 在 Debug 模式下运行时,按下 `F11` 可实时查看布局信息,高亮显示控件边界 + +## Demo 项目 + +- `helloWorld` - 基础示例 +- `QQ` - 仿 QQ 登录界面(含资源打包) +- `kugou` - 酷狗音乐播放器(含 VLC 依赖和资源打包) +- `ResPackage` - 资源打包工具 +- `Adminstor` / `DemoUi` - 管理界面示例 ## 开发约定 @@ -74,4 +98,5 @@ cmake -B build -DBUILD_DEMO=OFF - 源文件位于 `sources/` 目录 - 一切皆控件,纯代码组合 UI - 使用 CSS 驱动视觉,结构与样式分离 -- 中文注释,中文沟通 +- XML 解析使用 `tinyxml` 库 + diff --git a/demo/Adminstor/Adminstor/DemoUi.rc b/demo/Adminstor/Adminstor/DemoUi.rc index ff2682746ecda86adb244e5807c0181c7350cffa..c38195b42d9c101ad2ac680279469f2004b4a63e 100644 GIT binary patch delta 86 zcmeA&Y%$sp!!GE_;KJa^5YG_I;LG61;KSfEc_O#?N4CA!#=rBaKq*{jyeGVHm(LX diff --git a/demo/Adminstor/Adminstor/Resource.h b/demo/Adminstor/Adminstor/Resource.h index 10beec9..8d5a39d 100644 --- a/demo/Adminstor/Adminstor/Resource.h +++ b/demo/Adminstor/Adminstor/Resource.h @@ -2,16 +2,6 @@ // Microsoft Visual C++ 生成的包含文件。 // 供 DemoUi.rc 使用 // +#define IDI_SMALL 101 #define IDD_INPUT 102 #define IDC_EDIT1 1000 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 104 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/demo/Adminstor/Adminstor/loginForm.cpp b/demo/Adminstor/Adminstor/loginForm.cpp index 43ca279..e8c7e1f 100644 --- a/demo/Adminstor/Adminstor/loginForm.cpp +++ b/demo/Adminstor/Adminstor/loginForm.cpp @@ -50,6 +50,10 @@ loginForm::loginForm() :LayeredWindow(320, 448) { umg.LoadXml("res/loginForm.htm");//加载xml里面的控件与样式 umg.SetupUI(this); + + // 通过资源ID加载图标 (在 app.rc 中定义 IDI_SMALL=101) + HICON hIco = (HICON)::LoadImageW(GetModuleHandleW(nullptr), MAKEINTRESOURCEW(IDI_SMALL), IMAGE_ICON, 32, 32, 0); + if (hIco) SetIcon(hIco); } loginForm::~loginForm() diff --git a/demo/Adminstor/Adminstor/mainForm.cpp b/demo/Adminstor/Adminstor/mainForm.cpp index 31cefe4..9e51546 100644 --- a/demo/Adminstor/Adminstor/mainForm.cpp +++ b/demo/Adminstor/Adminstor/mainForm.cpp @@ -105,10 +105,6 @@ void mainForm::OnNotify(Control* sender, EventArgs& args) break; default: break; - } - if (args.EventType == Event::OnMouseDown) { - - } __super::OnNotify(sender, args); } @@ -118,6 +114,27 @@ void mainForm::OnClose(bool& close) Application::Exit(); } +void mainForm::OnMouseUp(ezui::MouseButton mbtn, const ezui::Point& point) +{ + if (mbtn == ezui::MouseButton::Right) { + // 右键弹起处理(可实现右键单击) + TableView* tableView = (TableView*)FindControl("tableViewAdmin"); //获取表格控件 + if (tableView) { + //表格 + int pRow = tableView->GetHoverRow(); //当前行号 + int pCol = tableView->GetHoverCol(); //当前列号 + if (pRow < 0 || pCol < 0) return; // 说明不在表格区域内 + + UIString celContent = tableView->GetData(pRow, pCol); + //std::cout << "单元格内容: " << celContent.ansi() << std::endl; + std::cout << "行列号为 (" << pRow << ", " << pCol << ") 当前列宽: " << tableView->GetColumnWidth(pCol) << std::endl; + + } + } + ezui::Window::OnMouseUp(mbtn, point); +} + +// UI初始化 mainForm::mainForm() :LayeredWindow(1500, 750) { SetResizable(true); // 启用窗口大小调整 @@ -125,6 +142,10 @@ mainForm::mainForm() :LayeredWindow(1500, 750) umg.LoadXml("res/mainForm.htm");//加载xml里面的控件与样式 umg.SetupUI(this); + // 通过资源ID加载图标 (在 app.rc 中定义 IDI_SMALL=101) + HICON hIco = (HICON)::LoadImageW(GetModuleHandleW(nullptr), MAKEINTRESOURCEW(IDI_SMALL), IMAGE_ICON, 32, 32, 0); + if (hIco) SetIcon(hIco); + // 如果是debug模式则创建控制台窗口用于输出调试信息 #ifdef _DEBUG AllocConsole(); @@ -134,7 +155,6 @@ mainForm::mainForm() :LayeredWindow(1500, 750) std::cout << "调试模式控制台已启动!" << std::endl; #endif - // 初始化设置表格各项属性 TableView* tableView = (TableView*)FindControl("tableViewAdmin"); //获取表格控件 if (tableView) { @@ -149,18 +169,9 @@ mainForm::mainForm() :LayeredWindow(1500, 750) for(int i = 0; i < withs.size(); i++) tableView->SetColumnWidth(i, withs[i]); - // 鼠标右键单击的回调 - tableView->RightClick = [tableView](int row, int col) { - int pRow = tableView->GetHoverRow(); //当前行号 - int pCol = tableView->GetHoverCol(); //当前列号 - UIString celContent = tableView->GetData(pRow, pCol); - //std::cout << "单元格内容: " << celContent.ansi() << std::endl; - std::cout << "当前列宽: " << tableView->GetColumnWidth(pCol) << std::endl; - }; - // 单元格编辑完成(编辑结束时触发,提供旧值与新值) tableView->CellEditFinished = [](int row, int col, const UIString& oldValue, const UIString& newValue) { - std::cout << "完成编辑单元格内容: " << newValue.ansi() << ", " << oldValue.ansi() << std::endl; + //std::cout << "完成编辑单元格内容: " << newValue.ansi() << ", " << oldValue.ansi() << std::endl; }; } diff --git a/demo/Adminstor/Adminstor/mainForm.h b/demo/Adminstor/Adminstor/mainForm.h index 10b2a16..092e473 100644 --- a/demo/Adminstor/Adminstor/mainForm.h +++ b/demo/Adminstor/Adminstor/mainForm.h @@ -12,6 +12,7 @@ private: protected: virtual void OnNotify(Control* sender, EventArgs& args)override;//重载事件通知 virtual void OnClose(bool& close)override;//当窗口关闭的时候 + virtual void OnMouseUp(ezui::MouseButton mbtn, const ezui::Point& point) override; // 鼠标抬起 public: //ui管理类 UIManager umg; diff --git a/demo/Adminstor/Adminstor/small.ico b/demo/Adminstor/Adminstor/small.ico index b3ec03bd617f32e58128fa977fd6ac9605124f4b..9af4529db1b7dc503b342190ba9ae1a549a33d44 100644 GIT binary patch literal 99678 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 WetLNV_q>b}D<9LeCn_`6(*FbEx2eVe literal 46227 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