如何设置窗口的位置,并使其在走走不可言状
问题描述:
我想弄清楚使用Go GUI库walk的基础知识。如何设置窗口的位置,并使其在走走不可言状
对于初学者来说,我希望能够
- 控制的窗口的位置
希望在某种程度上类似于提供什么其他语言(在屏幕中心,中心于母公司,精确坐标等)。 - 使该窗口unresizable
这是我的,我希望在MaxSize
宣言将解决第二个问题的代码,但它没有,我一直在寻找某种一Position
的声明,但找不到对我有意义的任何内容。
package main
import (
// "github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
func main() {
MainWindow{
Title: "Test",
MinSize: Size{300, 50},
MaxSize: Size{300, 50}, // Doesn't work
// Position: ... // Doesn't exist
Layout: VBox{},
Children: []Widget{
Label{Text: "Hello World"},
},
}.Run()
}
答
看起来像walk
不在其自己的API中提供此功能。但walk
创建于win
之上,它实际上只是一个Go绑定到WinAPI。所以你可以轻松地调用任何WinAPI函数。例如,要在指定位置显示一个主窗口可调用SetWindowPos()
:
package main
import (
"github.com/lxn/win"
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
const (
SIZE_W = 600
SIZE_H = 400
)
type MyMainWindow struct {
*walk.MainWindow
}
func main() {
mw := new(MyMainWindow)
MainWindow{
Visible: false,
AssignTo: &mw.MainWindow,
}.Create()
win.SetWindowLong(mw.Handle(), win.GWL_STYLE, win.WS_BORDER) // removes default styling
xScreen := win.GetSystemMetrics(win.SM_CXSCREEN);
yScreen := win.GetSystemMetrics(win.SM_CYSCREEN);
win.SetWindowPos(
mw.Handle(),
0,
(xScreen - SIZE_W)/2,
(yScreen - SIZE_H)/2,
SIZE_W,
SIZE_H,
win.SWP_FRAMECHANGED,
)
win.ShowWindow(mw.Handle(), win.SW_SHOW);
mw.Run()
}
而且unresizable你需要取消设置WS_THICKFRAME
风格,使窗口。更多信息可以在here找到。