【Golang】Go语言Windows GUI库XCGUI,DirectUI设计思想,高度自定义界面,支持Direct2D硬件加速
Github地址
https://github.com/twgh/xcgui
介绍
- 本库封装自炫彩界面库,功能丰富(1000多个API接口),简单易用,轻量级,高度DIY自定义,支持一键换肤。
- 炫彩界面库是由C/C++语言开发:软件运行效率高,不需要第三方库的支持,不依赖MFC,ATL,WINDOWS标准控件等。
- DirectUI设计思想:在窗口内没有子窗口,界面元素都是逻辑上的区域(无HWND句柄,安全,灵活),所有UI元素都是自主开发(不受系统限制),更加灵活的实现各种程序界面,满足不同用户的需求。
- 拥有免费的UI设计器:快速开发工具,所见即所得,高度自定义系统(DIY),让UI开发变的更加简单。
- 支持Direct2D,硬件加速,能更大程度的发挥硬件特性,创建高性能,高质量的2D图形。
- 有完善的中文官方文档:中文官方文档
获取
go get github.com/twgh/xcgui
可视化UI设计器
使用UI设计器可以快速设计界面,节省大量代码。
设计器使用例子,只有这么多代码:
package mainimport (_ "embed""github.com/twgh/xcgui/app""github.com/twgh/xcgui/window""github.com/twgh/xcgui/xcc"
)//go:embed res/qqmusic.zip
var qqmusic []bytefunc main() {a := app.New(true)// 从内存zip中加载资源文件a.LoadResourceZipMem(qqmusic, "resource.res", "")// 从内存zip中加载布局文件, 创建窗口对象w := window.NewByLayoutZipMem(qqmusic, "main.xml", "", 0, 0)// 调整布局w.AdjustLayout()// 显示窗口w.ShowWindow(xcc.SW_SHOW)a.Run()a.Exit()
}
动态链接库下载
网盘 | 下载地址 |
---|---|
百度网盘 | 下载 |
蓝奏云 | 下载 |
程序运行时需要把XCGUI.dll
放到程序运行目录。
在开发时最好是放到C:\Windows\System32目录,这样就不需要频繁把dll放到不同程序的运行目录了。
简单窗口(纯代码)
package mainimport ("github.com/twgh/xcgui/app""github.com/twgh/xcgui/window""github.com/twgh/xcgui/xcc"
)func main() {// 1.初始化UI库a := app.New(true)// 2.创建窗口w := window.New(0, 0, 430, 300, "", 0, xcc.Window_Style_Simple|xcc.Window_Style_Btn_Close)// 设置窗口边框大小w.SetBorderSize(0, 30, 0, 0)// 设置窗口透明类型w.SetTransparentType(xcc.Window_Transparent_Shadow)// 设置窗口阴影w.SetShadowInfo(8, 254, 10, false, 0)// 3.显示窗口w.ShowWindow(xcc.SW_SHOW)// 4.运行程序a.Run()// 5.释放UI库a.Exit()
}
常量
xcc包里都是常量,像这样使用:xcc.Window_Transparent_Shadow
。
需要用到xcc包常量的参数注释都是类似下图这样的,复制Window_Transparent_
到xcc包里搜索即可看到相关常量注释:
命令介绍
xc包里包含xcgui.dll里所有的API,有一千多个函数,可以直接使用,封装好的类都在其他包里。
在某些情况下,把xc包里的原生函数与封装好的类混合起来使用会更加方便。
炫彩所有的结构体也都在xc包里。
事件
炫彩的全部事件都已经定义好了,都是以Event开头的, 以1结尾的事件是会传进去元素的句柄。
事件回调函数尽量不要使用匿名函数,使用匿名函数意味着您每次都在创建1个新的回调,最终您将会遇到因创建过多回调导致程序崩溃的报错(大概在2000个回调时会遇到),事件回调函数不使用匿名函数即可避免此问题。
一个事件可以注册多个处理函数,执行顺序为先执行最后注册的函数,最后执行第一个注册的函数,当你想拦截当前事件或不想向后传递,只需要将参数*pbHandled=true
即可。
封装进度
这些类都是基于xc包里的一千多个函数封装的。
中文名称 | 包名 | 类名 | 是否封装完毕 | 文档 |
---|---|---|---|---|
程序(炫彩全局API) | app | App | √ | 文档 |
窗口 | window | Window | √ | 文档 |
框架窗口 | window | FrameWindow | √ | 文档 |
模态窗口 | window | ModalWindow | √ | 文档 |
形状对象 | widget | Shape | √ | 文档 |
圆形形状对象 | widget | ShapeEllipse | √ | 文档 |
形状对象GIF | widget | ShapeGif | √ | 文档 |
组框形状对象 | widget | ShapeGroupBox | √ | 文档 |
直线形状对象 | widget | ShapeLine | √ | 文档 |
形状对象图片 | widget | ShapePicture | √ | 文档 |
矩形形状对象 | widget | ShapeRect | √ | 文档 |
形状对象文本 | widget | ShapeText | √ | 文档 |
表格 | widget | Table | √ | 文档 |
按钮 | widget | Button | √ | 文档 |
下拉组合框 | widget | ComboBox | √ | 文档 |
编辑框(常规, 富文本, 聊天气泡) | widget | Edit | √ | 文档 |
代码编辑框 | widget | Editor | √ | 文档 |
基础元素 | widget | Element | √ | 文档 |
列表 | widget | List | √ | 文档 |
列表框 | widget | ListBox | √ | 文档 |
弹出菜单 | widget | Menu | √ | 文档 |
进度条 | widget | ProgressBar | √ | 文档 |
静态文本连接按钮 | widget | TextLink | √ | 文档 |
布局元素 | widget | LayoutEle | √ | 文档 |
布局框架 | widget | LayoutFrame | √ | 文档 |
列表视图 | widget | ListView | √ | 文档 |
菜单条 | widget | MenuBar | √ | 文档 |
Pane元素 | widget | Pane | √ | 文档 |
滚动条 | widget | ScrollBar | √ | 文档 |
滚动视图 | widget | ScrollView | √ | 文档 |
滑动条元素 | widget | SliderBar | √ | 文档 |
标签栏元素 | widget | TabBar | √ | 文档 |
工具条 | widget | ToolBar | √ | 文档 |
列表树元素 | widget | Tree | √ | 文档 |
日期时间 | widget | DateTime | √ | 文档 |
月历卡片 | widget | MonthCal | √ | 文档 |
数据适配器-列表视元素 | adapter | AdapterListView | √ | 文档 |
数据适配器-单列Map-列表头(listHeader) | adapter | AdapterMap | √ | 文档 |
数据适配器-XList-XListBox | adapter | AdapterTable | √ | 文档 |
数据适配器-树元素 | adapter | AdapterTree | √ | 文档 |
背景管理器 | bkmanager | BkManager | √ | 文档 |
背景对象 | bkobj | BkObj | √ | 文档 |
字体 | font | Font | √ | 文档 |
图片操作 | imagex | Image | √ | 文档 |
SVG矢量图形 | svg | Svg | √ | 文档 |
列表项模板 | tmpl | ListItemTemplate | √ | 文档 |
节点 | tmpl | Node | √ | 文档 |
图形绘制 | drawx | Draw | √ | 文档 |
动画序列 | ani | Anima | √ | 文档 |
动画组 | ani | AnimaGroup | √ | 文档 |
动画项 | ani | AnimaItem | √ | 文档 |
动画旋转项 | ani | AnimaRotate | √ | 文档 |
动画缩放项 | ani | AnimaScale | √ | 文档 |
含有XCGUI所有API和结构体 | xc | √ | 文档 | |
XCGUI常量 | xcc | √ | 文档 | |
缓动 | ease | √ | 文档 | |
资源操作 | res | √ | 文档 | |
Windows系统api | wapi | 持续更新 | 文档 | |
调用wapi封装了对窗口的操作 | wnd | 持续更新 | 文档 |
【Golang】Go语言Windows GUI库XCGUI,DirectUI设计思想,高度自定义界面,支持Direct2D硬件加速相关推荐
- C语言windows.h库的常用函数(三)
SetCursorPos函数 用途 SetCursorPos函数是windows.h库中用来设置指针位置的函数,使用该函数鼠标指针将会直接跳至指定坐标位置 参数 SetCursorPos函数拥有x和y ...
- 【C 语言】动态库封装与设计 ( Windows 动态库简介 | Visual Studio 调用动态库 )
文章目录 一.Windows 动态库简介 二.Visual Studio 调用动态库 一.Windows 动态库简介 在 C:\Windows\System32 目录中 , 存放着 Windows 中 ...
- Go语言IUP GUI库的安装笔记
为什么80%的码农都做不了架构师?>>> 步骤a 前往https://github.com/grd/iup 查看说明,看到Quick installation guide fo ...
- C语言windows.h库的常用函数(二)
GetCursorPos函数 在上一篇中的WindowFromPoint函数的示例代码中就已经用到了GetCursorPos函数,这是一个用于获取鼠标指针位置的函数. #include<stdi ...
- C语言windows.h库的常用函数(一)
1:FindWindow函数 该函数可以通过窗口类名或者窗口标题名来查找特定窗口句柄,返回值是窗口的句柄(在Windows中,句柄是一个系统内部数据结构的引用.例如当你操作一个窗口,或说是一个Delp ...
- C语言windows.h库的常用函数(四)
CopyFile函数 用途 CopyFile函数可以用来复制文件到指定目录. 参数 CopyFile("文件源目录","文件目标目录",TRUE or FALS ...
- 热身:go语言windows gui界面开发之walk 改错
如果其他文章发现服务跑不起来,出现闪退,可以参考本文,请看到最后. 编译和环境问题点我解决 第一步 直接上代码 package mainimport ("syscall"" ...
- 教程二:go语言windows gui界面开发之walk 控件学习第一节
常用控件集合 本章介绍并学习路线中弹窗之前(包含弹窗)的所有控件 一.认识控件 本章将要学习的控件列表如下图所示,逐一讲解使用方法: 二.预备知识 2.1 控件结构体中通用字段 AssignTo :绑 ...
- 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )
文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...
最新文章
- android交叉编译libxml2,Openwrt 交叉编译libxml2(示例代码)
- Go语言逆向技术:恢复函数名称算法
- python爬虫解析数据_Python爬虫入门知识:解析数据篇
- for循环中的setTimeout()
- 计算机组成原理总结及知识网图
- java EasyUI导出当前页和导出模板
- 酒店管理系统-可行性研究报告
- php用for循环输出九九乘法表,php循环之打印九九乘法表
- Java第32课——求数组元素最大值
- 【2021软件创新实验室暑假集训】总结篇
- lldb连接debugserver报错failed to get reply to handshake packet
- 华为路由器时区以及时间配置
- 查询2021高考成绩位次,2021年江苏高考位次表及高考个人成绩排名查询
- 【小区物业管理系统——开题报告 分享(仅供参考呀)】
- 20162316刘诚昊 Java Queue的测试
- 查询最后一次消费记录
- 联想拯救者刃7000K 2022 评测
- 【设计模式】设计模式的七大原则
- 给你的AppImage创建桌面快捷方式
- android studio多媒体播放器,Android支持全屏、小窗口的视频播放器