Go Walk 窗口居中问题解决:编译错误 .gui.go:114:24: undefined: walk.MainWindowFromHWND
Go Walk 窗口居中问题解决:编译错误 .gui.go:114:24: undefined: walk.MainWindowFromHWND
在使用 Go Walk 库创建 GUI 应用程序时,可能会遇到编译错误:.gui.go:114:24: undefined: walk.MainWindowFromHWND。这通常是因为代码中尝试使用 walk.MainWindowFromHWND 函数来获取主窗口,但该函数在 Walk 库的最新版本中已被移除。
解决方法:
-
删除居中代码: 直接删除代码中使用
walk.MainWindowFromHWND函数的部分,并将窗口居中功能移除。 -
手动设置窗口位置: 可以使用
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/2和Screen().WorkArea().Height/2用于获取屏幕工作区域的中心点坐标。mw.SetBounds()方法可以用来设置窗口的位置和大小。
通过上述方法,可以解决 walk.MainWindowFromHWND 无法使用的问题,并实现窗口的居中或手动设置位置。
原文地址: https://www.cveoy.top/t/topic/nROZ 著作权归作者所有。请勿转载和采集!