How to set title bar icon using Gio

WBOY
Release: 2024-02-09 21:18:09
forward
556 people have browsed it

如何使用 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"))
Copy after login

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

go\pkg\mod\[email protected]\app\internal\windows\windows.go
Copy after login

//

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
}
Copy after login

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"
    }
  }
}
Copy after login

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/
Copy after login

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 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
  }
}
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!