【egui】[特殊字符] 窗口配置小抄:eframe::NativeOptions

NativeOptions 结构体就是窗口的设置面板 ------想调整窗口大小、图标、行为?都在这。不需要背,用到时回来翻就行

📋 一图看懂所有设置

rust 复制代码
pub struct NativeOptions {
    // 🎨 长得啥样
    pub always_on_top: bool,        // 置顶显示?
    pub maximized: bool,            // 启动时最大化?
    pub decorated: bool,            // 显示标题栏和边框?
    pub fullscreen: bool,           // 全屏模式?
    pub transparent: bool,          // 透明窗口?
    pub mouse_passthrough: bool,    // 鼠标穿透(做悬浮窗用)?
    pub icon_data: Option<IconData>,// 窗口图标(默认是个"e")

    // 📏 多大、在哪儿
    pub initial_window_pos: Option<Pos2>,   // 初始位置
    pub initial_window_size: Option<Vec2>,  // 初始大小
    pub min_window_size: Option<Vec2>,      // 最小尺寸
    pub max_window_size: Option<Vec2>,      // 最大尺寸
    pub resizable: bool,            // 能调整大小吗?
    pub centered: bool,             // 居中显示?(Wayland 不行)

    // 🎮 用起来咋样
    pub drag_and_drop_support: bool,    // 支持拖放文件?(Windows)
    pub active: bool,                    // 启动时获得焦点?
    pub vsync: bool,                      // 垂直同步(防画面撕裂)

    // ⚙️ 渲染相关(一般不动)
    pub multisampling: u16,               // 抗锯齿级别
    pub depth_buffer: u8,                 // 深度缓冲(3D才需要)
    pub stencil_buffer: u8,               // 模板缓冲(3D才需要)
    pub hardware_acceleration: HardwareAcceleration, // 硬件加速偏好
    pub renderer: Renderer,                // 用 glow 还是 wgpu
    pub wgpu_options: WgpuConfiguration,   // wgpu 详细设置

    // 🌗 主题相关
    pub follow_system_theme: bool,  // 跟随系统深色/浅色模式?
    pub default_theme: Theme,       // 默认主题(Dark/Light)

    // 🔄 生命周期
    pub run_and_return: bool,       // 窗口关了后程序继续运行?
    pub event_loop_builder: Option<EventLoopBuilderHook>, // 事件循环钩子
    pub shader_version: Option<ShaderVersion>, // OpenGL 版本兼容

    // 💾 数据存储
    pub app_id: Option<String>,     // 应用ID(决定配置文件放哪)
}

🎯 常用场景速查

1. 最基础:固定大小窗口

rust 复制代码
let options = eframe::NativeOptions {
    initial_window_size: Some(egui::vec2(800.0, 600.0)),
    resizable: false,  // 不让用户拖大拖小
    ..Default::default()
};

2. 全屏应用(比如游戏、演示)

rust 复制代码
let options = eframe::NativeOptions {
    fullscreen: true,
    ..Default::default()
};

3. 置顶工具(比如悬浮计时器)

rust 复制代码
let options = eframe::NativeOptions {
    always_on_top: true,
    mouse_passthrough: true,  // 鼠标穿透,点击下面的窗口
    decorated: false,         // 无边框,更清爽
    ..Default::default()
};

4. 带图标的正式应用

rust 复制代码
let options = eframe::NativeOptions {
    icon_data: Some(load_my_icon()),  // 从 PNG 加载
    app_id: Some("com.example.myapp".to_string()), // 数据存哪
    ..Default::default()
};

💾 app_id:你的数据存在哪

平台 存储路径
Linux /home/用户名/.local/share/你的APP_ID
macOS /Users/用户名/Library/Application Support/你的APP_ID
Windows C:\Users\用户名\AppData\Roaming\你的APP_ID

📌 Wayland 用户注意app_id 还影响图标显示和窗口分组,记得设!

🧪 调试 vs 发布

开发时用默认设置就行,发布前再调这些:

rust 复制代码
let mut options = eframe::NativeOptions::default();

// 正式发布时
if cfg!(not(debug_assertions)) {
    options.icon_data = Some(load_my_icon());
    options.app_id = Some("com.myapp.prod".to_string());
}

📌 一句话原则

用到的才配,配了才知道------窗口设置就像装修,开工前想清楚,开工后改也来得及。遇到具体需求再回来翻这个文件,五分钟搞定。

💡 记住:默认设置已经能跑起来,这些是让你跑得更舒服的"选配"。

相关推荐
红尘散仙8 小时前
一个 `#[uniffi::export]`,把 Rust 接进 React Native
前端·后端·rust
红尘散仙8 小时前
一行 `#[specta::specta]`,让 Tauri IPC 有类型
前端·后端·rust
codealy19 小时前
Rust 核心理论与内存安全(一)
后端·安全·rust
土豆.exe21 小时前
IfAI v0.5.0 深度技术解析:120,000 行 Rust 打造的 AI-Native 编辑器
rust·编辑器·ai-native
咸甜适中21 小时前
rust语言学习笔记Trait之 AsRef 和 AsMut(引用转换)
笔记·学习·rust
XD7429716361 天前
科技早报晚报|2026年5月18日:Agent 原生语言、代码语义图谱与 Rust 数据层,今天更值得跟进的 3 个技术机会
开发语言·科技·rust·科技新闻·开发者工具·ai工程
yezipi耶不耶1 天前
讲讲 RTMate (WebSocket as A Service)中的消息的发布订阅机制
websocket·网络协议·rust
五月君_1 天前
Bun v1.3.14 发布,Rust 版即将进 Claude Code 内测,下一版可能就告别 Zig
开发语言·后端·rust
techdashen2 天前
深入 Rust enum 的内存世界
开发语言·后端·rust
techdashen2 天前
Rust 模块和文件不是一回事:一次讲清 `mod`、`use`、`pub use`
开发语言·后端·rust