GO使用lxn/walk的前置条件

直接编码使用会报错,需要编译相关文件后打包才可正常使用

2024-06-09 01:51:51   2025-02-11 07:06:08   Go   65 views  

 

安装相关库

go get github.com/akavel/rsrc
go get github.com/lxn/win
go get github.com/lxn/walk

创建最小示例mian.go

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.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>

将 main.manifest 生成为 app.syso

rsrc -manifest main.manifest -o main.syso

如果有icon文件可以同时执行(ico文件名为myicon.ico)

rsrc -manifest main.manifest -ico myicon.ico -o main.syso

编译打包(无cmd命令行的GUI窗口,如需cmd使用go build即可)

go build -ldflags="-H windowsgui -w -s"