在 Tauri 应用中,窗口的创建与管理主要由后端(Rust)控制,前端可以通过 IPC 命令触发相应的操作。Tauri 的窗口 API 覆盖了从创建、显示、隐藏到关闭等所有常见状态,使用起来非常直观。
1. 创建窗口
窗口通常在 Rust 端通过 tauri::WindowBuilder 创建,配置项包括标题、尺寸、是否可见、是否带装饰等。
use tauri::WindowBuilder;
#[tauri::command]
fn open_new_window(app: tauri::AppHandle) {
WindowBuilder::new(&app, "second", tauri::WindowUrl::App("index.html".into()))
.title("新窗口")
.inner_size(800.0, 600.0)
.resizable(true)
.build()
.unwrap();
}
也可以在 Tauri 配置文件 tauri.conf.json 中预先定义多个窗口,并按需通过标签名操作。
2. 显示与隐藏
窗口创建后可能处于隐藏状态(例如 visible(false)),可以通过 API 动态控制:
// Rust 端
window.show().unwrap();
window.hide().unwrap();
前端调用:
import { getCurrent } from '@tauri-apps/api/window';
const win = getCurrent();
await win.show();
await win.hide();
隐藏窗口不会销毁它,只是从视线中移除,常用于系统托盘应用或后台驻留。
3. 最小化与最大化
await win.minimize(); // 最小化到任务栏
await win.maximize(); // 最大化(或恢复,取决于当前状态)
await win.unmaximize(); // 取消最大化
await win.toggleMaximize(); // 切换最大化状态
Rust 端对应:
window.minimize().unwrap();
window.maximize().unwrap();
window.unmaximize().unwrap();
注意 maximize 和 unmaximize 是独立操作,toggleMaximize 则更方便。
4. 关闭窗口
关闭窗口有两种方式:隐藏式关闭和真正销毁。
await win.close(); // 请求关闭窗口
在 Rust 端可以监听关闭事件,阻止默认行为(例如改为隐藏到托盘):
window.on_window_event(|event| {
if let tauri::WindowEvent::CloseRequested { api, .. } = event {
api.prevent_close(); // 阻止关闭
window.hide().unwrap(); // 改为隐藏
}
});
前端也可以调用 destroy 强制销毁窗口:
await win.destroy(); // 不触发 close 事件,直接销毁
5. 聚焦与置顶
虽然不是严格的状态控制,但聚焦和置顶也常用:
await win.setFocus(); // 让窗口获取焦点
await win.setAlwaysOnTop(true); // 窗口置顶
6. 全屏控制
await win.setFullscreen(true);
const isFullscreen = await win.isFullscreen();
Rust 端有同名方法。
实际使用建议
- 多窗口管理:给每个窗口设置唯一的标签(label),方便从任意位置通过
app.get_window("label")获取实例。 - 状态持久化:关闭窗口前保存其位置和大小,下次打开时恢复,提升用户体验。
- 托盘应用:主窗口关闭事件改为隐藏,退出时彻底销毁。
这些 API 设计精简且跨平台一致,让窗口状态控制不再是繁琐的系统调用,而是几行代码就能完成的常规操作。