如何使 window 适合其内容并使其在 Sciter 的屏幕上居中?

How to fit a window to its contents and center it on the screen in Sciter?

第一次试用 GUI 软件时,我要做的第一件事就是将 window 居中并使其适合其内容。我个人认为这应该尽可能简单,最好在官方文档中解释。

在我看来,将一个程序的主要 window 居中显示在屏幕上的能力是任何 GUI 库的一个非常基本的要求。

但是,我无法在官方文档中找到这些说明。

我不记得我在哪里找到作者的说明,但这里是使用 TIScript 的“vanilla”Sciter:

const w = self.intrinsicWidthMax();
const h = self.intrinsicHeight();
const (sw, sh) = view.screenBox(#frame, #dimension);
view.move((sw / 2) - (w / 2), (sh / 2) - (h / 2), w, h, true);

#frame在这里指的是整个屏幕,或者说显示器。 #dimension指定返回它的widthheight(返回屏幕某些方面的坐标还有其他符号)。

view.move 是一个 unfortunately-named 重载方法,因为除了移动它之外,它还允许调整 window 的大小。最后一个布尔参数指定 window 框架和标题的大小是否应被视为总 window 大小的一部分。

在官方示例中,建议将它放在 function self.ready() { ... } 中,但我将它放在主脚本文件的顶部没有遇到任何问题。

这是 Sciter.JS 的 JavaScript 端口:

// https://github.com/c-smile/sciter-js-sdk/discussions/39#discussioncomment-377697
const [ _, w ] = document.state.contentWidths();
const h = document.state.contentHeight(w);
const [ sw, sh ] = Window.this.screenBox('frame', 'dimension');
Window.this.move((sw - w) / 2, (sh - h) / 2, w, h, true);