人人都会AI编程

9.2 窗口状态控制:创建、显示、隐藏、最小化、最大化、关闭

更新时间:2026-07-11

在 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();

注意 maximizeunmaximize 是独立操作,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 设计精简且跨平台一致,让窗口状态控制不再是繁琐的系统调用,而是几行代码就能完成的常规操作。