Sciter.js 指南 - GUI的窗口管理特性详解

如果第一次写桌面的 GUI 程序,可能对不同的窗口,还有窗口特殊的一些参数不了解,在这我专门来介绍一下在创建一个新窗口出来时,Sciter.js 作为一个跨平台的 HTML/CSS/JS 桌面应用程序引擎,提供哪些丰富的窗口管理功能,这些功能可以直接通过在根<html>元素上定义特定属性来实现。下面我将详细介绍这些窗口管理特性。

窗口类型与外观

窗口框架(window-frame)

Sciter.js支持多种窗口框架类型,通过window-frame属性设置:

  • "default" - 标准系统窗口
  • "standard" - 类似default
  • "extended" - 可自定义窗口标题栏,没有系统的哪些部分了,需要完全自己来画。比如关闭,前一个文章有介绍。
  • "solid" - 无边框窗口
  • "solid-with-shadow" - 带阴影的无边框窗口
  • "transparent" - 透明窗口,这个是创建异形窗口的关键

示例:samples.sciter/window/window-chrome-types.htm中,提供了多种窗口框架类型的演示:

html 复制代码
<html window-frame="extended" 
      window-width="50%"
      window-height="50%">
    <head>
        <title>Test</title>
        <style src="extended-window-crome.css" />
    </head>
    
    <window-header>
      <window-icon role="window-icon" />
      <window-caption role=window-caption>Extended window</window-caption>
      <window-buttons>
        <window-button role="window-minimize"></window-button>
        <window-button role="window-maximize"></window-button>
        <window-button role="window-close"></window-button>
      </window-buttons>
    </window-header>
    <body>...</body>
</html>

窗口尺寸

Sciter.js允许控制窗口的初始大小和限制:

  • window-width/window-height - 窗口初始尺寸
  • window-min-width/window-min-height - 窗口最小尺寸
  • window-max-width/window-max-height - 窗口最大尺寸

这些值可以是像素值、百分比或CSS单位。

示例:samples.sciter/window/chrome-types/window-frame-solid-with-shadow.htm中:

html 复制代码
<html window-frame="solid-with-shadow"
    window-width="50%"
    window-height="50%">
    <!-- ... -->
    <script>
    Window.this.minSize = [400*devicePixelRatio,300*devicePixelRatio];
    Window.this.maxSize = [1000*devicePixelRatio,800*devicePixelRatio];
    </script>
</html>

窗口调整大小(window-resizable)

控制窗口是否可调整大小及调整区域大小:

  • true - 允许调整大小
  • false - 禁止调整大小
  • <length> - 指定边缘调整区域大小,如"6px"

示例: 在演示文件demos/integration/res/default.htm中:

html 复制代码
<html window-corners="not-round" 
      window-resizable="6px">
    <!-- ... -->
</html>

窗口圆角(window-corners)

在支持的操作系统(如Windows 11)上设置窗口圆角:

  • "default" - 系统默认圆角
  • "not-round" - 无圆角
  • "round" - 圆角
  • "round-small" - 小圆角

示例:

html 复制代码
<html window-corners="not-round" 
      window-resizable="6px">
    <!-- ... -->
</html>

窗口位置与对齐

窗口对齐(window-alignment)

可以控制窗口相对于桌面或父窗口的位置:

  • 1..9 - 相对于桌面对齐(如小键盘布局)
  • -1..-9 - 相对于父窗口对齐

示例:samples.sciter/window/window-center.htm中:

html 复制代码
<html window-frame="standard"
      window-width="max-content"
      window-height="max-content"
      window-alignment="5">
    <!-- 5表示居中 -->
</html>

窗口视觉效果

背景模糊(window-blurbehind)

在支持的平台上启用窗口背景模糊效果:

示例:samples.sciter/window/blurbehind-modes.htm中:

html 复制代码
<script type="module">
document.on("change","form", (_,form) => {
    const props = form.value;
    Window.this.blurBehind = [props.ambience, props.tone, props.source].join(" ");
    if(props.ambience == "dark")
      document.attributes["theme"] = "dark";
    else 
      document.attributes["theme"] = "light";
});
</script>

窗口状态控制

窗口状态(window-state)

设置窗口的初始状态:

  • "shown" - 正常显示
  • "minimized" - 最小化
  • "maximized" - 最大化
  • "full-screen" - 全屏
  • "hidden" - 隐藏

示例:samples.sciter/window/chrome-types/window-frame-default.htm中:

html 复制代码
<script|module>
document.on("change","#full-screen", function(evt,checkbox) {
  Window.this.state = checkbox.value ? Window.WINDOW_FULL_SCREEN : Window.WINDOW_SHOWN;
});
</script>

窗口控制按钮

控制窗口是否显示最小化和最大化按钮:

  • window-minimizable - 是否可最小化
  • window-maximizable - 是否可最大化

结语

Sciter.js通过在<html>元素上定义特定属性,提供了强大的窗口管理功能,使开发者能够创建各种类型的窗口界面。这种方法既简单又灵活,适合开发各种桌面应用程序。与传统前端开发不同,Sciter.js直接控制原生窗口,使得桌面应用开发变得更加便捷。

上面是我找出来的示例,大家也可以在 sdk 的目录下见到,这介绍了如何通过HTML属性和JavaScript API来控制窗口的外观、大小、位置和行为。

相关推荐
wgod7 分钟前
new AbortController()
前端
UXbot13 分钟前
UXbot 是什么?一句指令生成完整应用的 AI 工具
前端·ai·交互·个人开发·ai编程·原型模式·ux
棒棒的唐28 分钟前
WSL2用npm安装的openclaw,无法正常使用openclaw gateway start启动服务的问题
前端·npm·gateway
哔哩哔哩技术36 分钟前
使用Compose Navigation3进行屏幕适配
前端
咬人喵喵2 小时前
E2.COOL 平台深度解析:从特效分类到实战操作指南
前端·编辑器·svg
RisunJan2 小时前
Linux命令-named-checkzone
linux·前端
小陈工2 小时前
Python Web开发入门(十):数据库迁移与版本管理——让数据库变更可控可回滚
前端·数据库·人工智能·python·sql·云原生·架构
吹晚风吧3 小时前
解决vite打包,base配置前缀,nginx的dist包找不到资源
服务器·前端·nginx
weixin199701080163 小时前
《施耐德商品详情页前端性能优化实战》
前端·性能优化
不想上班只想要钱3 小时前
模板里 item.xxx 报错 ,报 item的类型为未知
前端·vue