Go Walk 窗口居中问题解决:编译错误 .gui.go:114:24: undefined: walk.MainWindowFromHWND

在使用 Go Walk 库创建 GUI 应用程序时,可能会遇到编译错误:.gui.go:114:24: undefined: walk.MainWindowFromHWND。这通常是因为代码中尝试使用 walk.MainWindowFromHWND 函数来获取主窗口,但该函数在 Walk 库的最新版本中已被移除。

解决方法

  1. 删除居中代码: 直接删除代码中使用 walk.MainWindowFromHWND 函数的部分,并将窗口居中功能移除。

  2. 手动设置窗口位置: 可以使用 MainWindow.SetBounds() 方法手动设置窗口的位置。

示例代码

package main

import (
    "fmt"
    "github.com/gen2brain/dlgs"
    "github.com/lxn/walk"
    . "github.com/lxn/walk/declarative"
    "io"
    "net/http"
    "os"
    "path/filepath"
)

func downloadFile(url string, filepath string) error {
    // 创建文件
    out, err := os.Create(filepath)
    if err != nil {
        return err
    }
    defer out.Close()

    // 发送请求并下载文件
    resp, err := http.Get(url)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    // 写入文件
    _, err = io.Copy(out, resp.Body)
    if err != nil {
        return err
    }

    return nil
}

func writeIni(name string) error {
    // 获取用户目录
    userDir, err := os.UserHomeDir()
    if err != nil {
        return err
    }

    // 获取配置文件路径
    iniPath := filepath.Join(userDir, "HC.ini")

    // 创建配置文件
    f, err := os.Create(iniPath)
    if err != nil {
        return err
    }
    defer f.Close()

    // 写入配置
    _, err = f.WriteString("[general]
")
    if err != nil {
        return err
    }

    return nil
}

func main() {
    var (
        entry *walk.LineEdit
    )

    // 创建GUI界面
    MainWindow{
        Title:   "证书下载和配置",
        MinSize: Size{Width: 300, Height: 100},
        Layout:  VBox{},
        Children: []Widget{
            LineEdit{
                AssignTo: &entry,
            },
            PushButton{
                Text: "下载证书并写入配置",
                OnClicked: func() {
                    // 获取编辑框内容
                    entryText := entry.Text()

                    // 如果编辑框内容为空,则提示错误信息
                    if entryText == "" {
                        dlgs.Error("错误", "请输入编号")
                        return
                    }

                    // 下载证书
                    filepath := filepath.Join(os.Getenv("USERPROFILE"), "Desktop", "mitmproxy-ca-cert.p12")
                    err := downloadFile("http://mitm.it/cert/p12", filepath)
                    if err != nil {
                        dlgs.Error("错误", fmt.Sprintf("下载证书失败: %v", err))
                        return
                    }

                    // 写入配置文件
                    err = writeIni(entryText)
                    if err != nil {
                        dlgs.Error("错误", fmt.Sprintf("写入配置文件失败: %v", err))
                        return
                    }

                    // 提示设置完成信息
                    dlgs.Info("信息", "设置完成,证书已下载到桌面请手动安装")
                    // 关闭窗口
                    walk.App().Exit(0)
                },
            },
        },
    }.Run()
}

注意

  • 使用 walk.App().ActiveForm() 获取当前活动窗口时,需要确保应用程序中只有一个活动窗口。
  • Screen().WorkArea().Width/2Screen().WorkArea().Height/2 用于获取屏幕工作区域的中心点坐标。
  • mw.SetBounds() 方法可以用来设置窗口的位置和大小。

通过上述方法,可以解决 walk.MainWindowFromHWND 无法使用的问题,并实现窗口的居中或手动设置位置。

Go Walk 窗口居中问题解决:编译错误 .gui.go:114:24: undefined: walk.MainWindowFromHWND

原文地址: https://www.cveoy.top/t/topic/nROZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录