如何设置窗口的位置,并使其在走走不可言状

问题描述:

我想弄清楚使用Go GUI库walk的基础知识。如何设置窗口的位置,并使其在走走不可言状

对于初学者来说,我希望能够

  1. 控制的窗口的位置
    希望在某种程度上类似于提供什么其他语言(在屏幕中心,中心于母公司,精确坐标等)。
  2. 使该窗口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找到。