-
-
Notifications
You must be signed in to change notification settings - Fork 50
1.1
twgh edited this page Jul 2, 2022
·
3 revisions
go get github.com/twgh/xcgui
网盘里有64位的和32位的dll,一般选择64位的,go编译的程序默认也是64位的。
xcgui.dll需要和编译出来的程序放在一起,但每写一个程序都重复放的话就很麻烦了。
在开发时我建议把xcgui.dll放到C:\Windows\System32
目录下,这样就不需要每次都把dll和程序放在一起了。
刚开始你只需要知道3个包,程序包:app
、窗口包:window
、常量包:xcc
。
package main
import (
"github.com/twgh/xcgui/app"
"github.com/twgh/xcgui/window"
"github.com/twgh/xcgui/xcc"
)
func main() {
// 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了
a := app.New(true)
// 创建普通窗口, 宽300, 高200, 标题是"xcgui window", xcc.Window_Style_Default是使用默认窗口风格
w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default)
// 显示窗口
w.Show(true)
// 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出
a.Run()
// 退出界面库释放资源
a.Exit()
}
go build -ldflags="-s -w -H windowsgui"
参数解释:-H windowsgui
会隐藏黑窗口,-s -w
去除了符号表和调试信息,这样可以减小软件体积。
直接编译后大小为1.61M,使用upx64位压缩后大小变为386K
先把xcgui.dll放到项目目录里,然后看下面代码:
package main
import (
_ "embed"
"os"
"github.com/twgh/xcgui/app"
"github.com/twgh/xcgui/window"
"github.com/twgh/xcgui/xcc"
)
//go:embed XCGUI.dll
var dll []byte
func main() {
os.WriteFile("xcgui.dll", dll, 0666)
// 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了
a := app.New(true)
// 创建普通窗口, 宽300, 高200, 标题是"xcgui window", xcc.Window_Style_Default是使用默认窗口风格
w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default)
// 显示窗口
w.Show(true)
// 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出
a.Run()
// 退出界面库释放资源
a.Exit()
}
这样用户就感觉不到dll的存在了,和一个二进制文件也没啥太大区别。
package main
import (
_ "embed"
"github.com/twgh/xcgui/app"
"github.com/twgh/xcgui/window"
"github.com/twgh/xcgui/xc"
"github.com/twgh/xcgui/xcc"
)
//go:embed XCGUI.dll
var dll []byte
func main() {
// 把 xcgui.dll 写出到windows临时目录
err := xc.WriteDll(dll)
if err != nil {
panic(err)
}
// 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了
a := app.New(true)
// 创建普通窗口, 宽300, 高200, 标题是"xcgui window", xcc.Window_Style_Default是使用默认窗口风格
w := window.New(0, 0, 300, 200, "xcgui window", 0, xcc.Window_Style_Default)
// 显示窗口
w.Show(true)
// 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出
a.Run()
// 退出界面库释放资源
a.Exit()
}