我有一个问题与Gio UI(https:///gioui.org/).

My test App

正如您在那里看到的,窗口图标没有设置,也没有设置选项.

创建新窗口时,您只能设置标题:

w := app.NewWindow(app.Title("My APP Title")) 

但如果我理解正确的话,图标应该从资源 list 中加载:

go\pkg\mod\gioui.org@v0.3.1\app\internal\windows\windows.go

///

func LoadImage(hInst syscall.Handle, res uint32, typ uint32, cx, cy int, fuload uint32) (syscall.Handle, error) {
    h, _, err := _LoadImage.Call(uintptr(hInst), uintptr(res), uintptr(typ), uintptr(cx), uintptr(cy), uintptr(fuload))
    if h == 0 {
        return 0, fmt.Errorf("LoadImageW failed: %v", err)
    }
    return syscall.Handle(h), nil
}

To build resource manifest I am using go winres: https:///github.com/tc-hib/go-winres

我已经正确地在winres.jon中设置了应用程序图标和任务栏中的图标,如指南中所述.

我认为应该有一种方法在应用程序标题中设置窗口图标,但我找不到应该在json中指定哪个键:

{
  "RT_GROUP_ICON": {
    "APP": {
      "0000": [
        "icon_64.png",
        "icon_48.png",
        "icon_32.png",
        "icon_16.png"
      ]
    },
    "OTHER": {
      "0000": "icon.png"
    },
    "#42": {
      "0409": "icon_EN.ico",
      "040C": "icon_FR.ico"
    }
  }
}

推荐答案

要做到这一点,官方的方法是使用gogio工具,不幸的是,这种工具的文档非常少,与go-winres相比有很多限制.

go install gioui.org/cmd/gogio@latest一起安装

然后使用以下命令编译您的应用程序:

@GOOS=windows GOARCH=amd64 gogio -buildmode=exe -icon=appicon.png -arch=amd64 -target=windows -o myapp.exe app-path/

根据您的需要更改架构和路径.

无论如何,据我所知,gogio只支持PNG,它会自动生成所有需要的分辨率.

因为我想使用go-winres,所以我刚刚使用了Resource Hacker来反编译exe资源.

我发现要设置图标,您需要这样设置winres.json:

{
  "RT_GROUP_ICON": {
    "#1": {
      "0409": "myicon_EN.ico"
    }
  },
  "RT_MANIFEST": {
    "#1": {
      "0409": 
// Your settings
  }
}

然后你就可以用go buildgo-winres正常编译了,只需记住设置-ldflags=-H=windowsgui

Go相关问答推荐

运行add. inf,这样我们就可以在app.conf中使用. inf参数了?

在GO中创建[]字符串类型的变量

如何用Golang解码这个嵌套的json?

如何在Golang中使用ECHO服务器实现Socket.IO服务器

无法获取RPC描述符

Golang Gorm Fiber / argon2.Config 未定义

如何使用 AWS sdk 在 Go 中正确解组 PartiQL 查询的结果?

从 wincrypt API 到 Go 的 RC2 解密

这是泛型的有效用例吗?

Golang 中具体类型的错误片段

我在 go 中制作的递归函数有什么问题?

Golang invopop jsonschema 使用 if/then/else

每 N 秒运行一次函数,上下文超时

如何使用golang操作很长的字符串以避免内存不足

带有 grpc 的 protobuf 用于拆分包中的 Go

gob 解码器仅返回数组中的第一个元素

在 VSCode 中使用命令行参数调试 Go 测试

即使没有竞争条件也没有得到任何输出

Gorilla/Mux 和 Websocket 竞赛条件,这安全吗?

获取单调时间,同 CLOCK_MONOTONIC