Home  >  Article  >  Backend Development  >  How to set title bar icon using Gio

How to set title bar icon using Gio

WBOY
WBOYforward
2024-02-09 21:18:09552browse

如何使用 Gio 设置标题栏图标

php Xiaobian Yuzai today introduces you to a simple and practical method, that is, how to use Gio to set the title bar icon. When developing desktop applications, a beautiful title bar icon can increase the appeal and professional feel of the application. We can achieve this easily by using Gio, a powerful graphics library. In this article, we’ll walk you through how to set up a title bar icon using Gio to make your app visually stand out. Let’s take a look!

Question content

I have a problem using Gio UI (https://gioui.org/).

As you can see, the window icon is not set and there is no option to set it.

When you create a new window, you can only set the title:

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

But if I understand correctly, the icon should be loaded from the resource manifest:

go\pkg\mod\[email protected]\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 the resource manifest, I use go winres: https://github.com/tc-hib/go-winres

I have correctly set the application icon in winres.json and the icon in the taskbar as described in the guide.

I think there should be a way to set the window icon in the application title, but I can't find which key I should specify in the 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"
    }
  }
}

Solution

The official way is to use the gogio tool, unfortunately the documentation for this tool is poor compared to go-winres Very few, and with many restrictions.

Use go install gioui.org/cmd/gogio@latest Install it

Then compile your application using the following command:

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

Change the schema and paths according to your needs.

Anyway, as far as I understand gogio only supports png, it will automatically generate all required resolutions.

Since I wanted to use go-winres, I just used Resource Hacker a> to decompile the exe resource.

I found that to set the icon you need to set winres.json like this:

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

Then you can use go build and go-winres to compile normally, just remember to set -ldflags=-H=windowsgui

The above is the detailed content of How to set title bar icon using Gio. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete