go get github.com/akavel/rsrc
go get github.com/lxn/win
go get github.com/lxn/walk
package main
import (
"fmt"
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
func main() {
var mw *walk.MainWindow
err := MainWindow{
AssignTo: &mw,
Title: "最小化示例",
MinSize: Size{Width: 400, Height: 300},
Layout: VBox{},
Children: []Widget{
PushButton{
Text: "点击我",
OnClicked: func() {
walk.MsgBox(mw, "消息", "按钮被点击了!", walk.MsgBoxIconInformation)
},
},
},
}.Create()
if err != nil {
fmt.Println("创建主窗口失败:", err)
return
}
mw.Run()
}
文件说明:
main.manifest 是 应用程序配置元数据 的 清单文件
main.manifest 保存在 main.go 的 同级目录下
直接复制 “文件内容” 即可,没特殊情况无需修改
main.manifest文件内容
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
</windowsSettings>
</application>
</assembly>
rsrc -manifest main.manifest -o main.syso
rsrc -manifest main.manifest -ico myicon.ico -o main.syso
go build -ldflags="-H windowsgui -w -s"