Go语言Windows GUI库XCGUI,DirectUI设计思想,高度自定义界面,支持Direct2D硬件加速

介绍

  • 本库封装自炫彩界面库,功能丰富(近2000个API接口),简单易用,轻量级,高度DIY自定义,支持一键换肤。
  • 炫彩界面库是由C/C++语言开发:软件运行效率高,不需要第三方库的支持,不依赖MFC,ATL,WINDOWS标准控件等。
  • DirectUI设计思想:在窗口内没有子窗口,界面元素都是逻辑上的区域(无HWND句柄,安全,灵活),所有UI元素都是自主开发(不受系统限制),更加灵活的实现各种程序界面,满足不同用户的需求。
  • 拥有免费的UI设计器:快速开发工具,所见即所得,高度自定义系统(DIY),让UI开发变的更加简单。
  • 支持Direct2D,硬件加速,能更大程度的发挥硬件特性,创建高性能,高质量的2D图形。
  • wiki里有简单的入门教程,有空可以看一下。
  • 有完善的中文官方文档:中文官方文档

获取

go get github.com/twgh/xcgui

可视化UI设计器

使用UI设计器可以快速设计界面,节省大量代码。

uidesigner

设计器使用例子,只有这么多代码:

package main

import (
    _ "embed"
    "github.com/twgh/xcgui/app"
    "github.com/twgh/xcgui/window"
    "github.com/twgh/xcgui/xcc"
)

//go:embed res/qqmusic.zip
var qqmusic []byte

func 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放到不同程序的运行目录了。

(1)命令行下载

64位

curl -fL "https://pkggo-generic.pkg.coding.net/xcgui/file/xcgui.dll?version=latest" -o xcgui.dll

32位

curl -fL "https://pkggo-generic.pkg.coding.net/xcgui/file/xcgui-32.dll?version=latest" -o xcgui.dll

如果你没有curl的话,直接复制命令里的链接在浏览器下载也可以,或者使用下面的方法。

(2)使用getxcgui工具下载

go install github.com/twgh/getxcgui@latest
getxcgui

如果要把dll直接下载到C:\Windows\System32目录里,请使用如下命令:

getxcgui -o %windir%\system32\xcgui.dll

此工具的源码在这里,更多flags可以点进去查看

(3)网盘下载

网盘内还包含界面设计器和chm帮助文档

网盘 下载地址
百度网盘 下载
蓝奏云 下载

简单窗口(纯代码)

SimpleWindow

package main

import (
    "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包里搜索即可看到相关常量注释:

5eX6pD.jpg

命令介绍

xc包里包含xcgui.dll里所有的API,有一千多个函数,可以直接使用,封装好的类都在其他包里。

在某些情况下,把xc包里的原生函数与封装好的类混合起来使用会更加方便。

炫彩所有的结构体也都在xc包里。

建议使用 Goland 进行开发,以获得最好的开发体验。本项目所使用的注释格式在Goland里看起来是最好的。

事件

炫彩的全部事件都已经定义好了,都是以Event开头的, 以1结尾的事件是会传进去元素的句柄。

事件回调函数尽量不要使用匿名函数,使用匿名函数意味着您每次都在创建1个新的回调,最终您将会遇到因创建过多回调导致程序崩溃的报错(大概在2000个回调时会遇到),事件回调函数不使用匿名函数即可避免此问题。

xc-event.png

一个事件可以注册多个处理函数,执行顺序为先执行最后注册的函数,最后执行第一个注册的函数,当你想拦截当前事件或不想向后传递,只需要将参数*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 持续更新 文档
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 2

感谢楼主的教程,想问下【炫彩界面库】是否是开源组件呢?如果商用需要购买版权之类的吗?

4年前 评论
twgh (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!