中文 | English
sw
即 SimpleWindow
,是一个用于构建 Windows 桌面程序的 C++ GUI 框架,实现了对 Windows 标准控件的面向对象封装,适合用于构建简单的桌面应用程序。
-
基于 Windows API:
SimpleWindow 是一个基于 Windows API 的框架,无其他依赖项。 -
支持属性:
实现了类似于 C# 的属性语法,可以直观地获取和修改对象属性。 -
高 DPI 支持:
原生支持高 DPI,使用 DIP(设备独立像素)作为默认长度单位。 -
灵活的布局:
实现了一套类似于 WPF 的布局系统,支持诸如GridLayout
、StackLayout
、DockLayout
等各种布局。 -
路由事件:
采用路由事件机制,即事件可以冒泡,从源控件向上传播,可以在不同层次的控件上注册事件处理程序。
首先,将本项目克隆到本地:
git clone https://github.com/Mzying2001/sw.git
- 在解决方案中添加
vs/sw.vcxproj
项目的引用; - 在项目属性中,将路径
sw/inc
添加到附加包含目录(Additional Include Directories)。
-
在
CMakeLists.txt
中添加:add_subdirectory(path/to/sw)
-
链接
sw
库,例如:target_link_libraries(your_target PRIVATE sw)
single_header 中提供了 sw
的单文件版本,由脚本自动生成。直接下载 sw_all.h
和 sw_all.cpp
并添加到项目中即可使用。
sw
已支持 vcpkg 包管理器,包名为 mzying2001-sw
。
-
安装 vcpkg 包:
vcpkg install mzying2001-sw
-
若使用 CMake,添加
sw
到项目中:find_package(sw CONFIG REQUIRED) target_link_libraries(your_target PRIVATE sw::sw)
-
配置完成后,可以在项目中直接包含
sw
的头文件,例如:#include <sw/SimpleWindow.h>
Note
sw
的代码文件均使用 UTF-8 编码,若文件编码与系统不一致可能会出现编译器警告或者错误,建议在使用时添加 /utf-8
(对于 MSVC)或者 -finput-charset=UTF-8
(对于 g++/clang)编译选项,或者自行修改文件编码。
以下是一个 SimpleWindow 的 HelloWorld 程序,更多示例详见这里。
#include "SimpleWindow.h"
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
// 窗口对象
sw::Window mainWindow;
// 按钮对象
sw::Button button;
// 修改窗口的布局方式,让按钮居中
mainWindow.SetLayout<sw::FillLayout>();
// 对Text属性赋值即可修改按钮文本
button.Text = L"Click Me";
// 添加按钮单击事件处理函数,实现单击按钮弹出消息框
button.AddHandler(sw::ButtonBase_Clicked,
[](sw::UIElement& sender, sw::RoutedEventArgs& e) {
sw::MsgBox::Show(L"Hello, SimpleWindow!");
});
mainWindow.AddChild(button);
mainWindow.Show();
// 开始消息循环
return sw::App::MsgLoop();
}
有关 SimpleWindow 的详细开发文档,请访问 mzying2001.github.io/sw。
SimpleWindow 框架是基于 MIT 许可证发布的,允许您在自己的项目中自由使用和修改它。
欢迎贡献者参与 SimpleWindow 的开发和改进。如果您发现 Bug 或有改进建议,请提出 Issue 或发送 Pull Request。