Skip to content

窗口管理 (Windows)

zero-native 支持多窗口。主窗口会自动创建;辅助窗口(子窗口)可以通过 Zig 或 JavaScript 创建。

通过 Zig 创建窗口

zig
const info = try runtime.createWindow(.{
    .label = "tools",
    .title = "Tools",
    .default_frame = zero_native.geometry.RectF.init(80, 80, 420, 320),
});
try runtime.focusWindow(info.id);

通过 JavaScript 创建窗口

js_window_api 会在 JavaScript 中暴露 window.zero.windows.* 辅助函数。当配置了运行时权限时,窗口指令仍然需要处于允许的源(Allowed Origin)并具备窗口权限(Window Permission):

zig
const app_permissions = [_][]const u8{zero_native.security.permission_window};

.security = .{
    .permissions = &app_permissions,
    .navigation = .{ .allowed_origins = &.{ "zero://app" } },
},
.js_window_api = true,

随后,JavaScript 可以在允许的源中调用辅助函数:

javascript
const win = await window.zero.windows.create({
  label: "tools",
  title: "Tools",
  width: 420,
  height: 320,
});

const all = await window.zero.windows.list();
await window.zero.windows.focus(win.id);
await window.zero.windows.close(win.id);

窗口类型

类型描述
WindowId不透明的标识符(u64)
WindowCreateOptions用于 runtime.createWindow() 的选项:label, title, frame
WindowInfo创建窗口后返回的信息:id, label, title, frame
WindowState持久化的状态:id, label, title, frame, open, focused, maximized, fullscreen, scale
WindowRestorePolicy恢复窗口布局时的策略,例如将其限制在可见屏幕范围内,或者将其置于主显示器中心

平台限制

常量
max_windows16 (最大窗口数)
max_window_label_bytes64 (窗口标签最大字节数)
max_window_title_bytes128 (窗口标题最大字节数)

窗口状态持久化

window_state.Store 会将窗口几何尺寸持久化存储到应用状态目录中的 windows.zon 文件内。启动恢复时,将读取清单(Manifest)中的窗口标签并应用已保存的窗口位置与尺寸(Frame);而标题将继续由 app.zon 或运行时窗口创建选项提供。

字段描述
id窗口 ID
label窗口标签(用于合并匹配)
frame位置与大小 (x, y, width, height)
maximized窗口是否最大化
fullscreen窗口是否全屏
scale显示器缩放比例因子

当调用 saveWindow 时,存储库会通过匹配 labelid 进行合并,因此辅助窗口可以与主窗口一同被保留下来。如果在加载时发现丢失、格式错误或为空的标签记录,将被忽略,且在下一次写入文件时会被剔除。

在 app.zon 中声明窗口

zig
.windows = .{
    .{ .label = "main", .title = "zero-native", .width = 720, .height = 480, .restore_state = true },
},