Native Windows GUI 对话框使用指南
对话框概述
在 Native Windows GUI 框架中,对话框是预制的特殊窗口,主要用于获取用户输入值。与常规控件不同,对话框属于资源(Resources)而非控件(Controls),这意味着它们不需要父控件,也不能包含子控件。
框架提供了三种内置对话框类型,每种都通过特性(feature)开关控制:
- 文件对话框 (file-dialog 特性):用于获取文件路径进行加载或保存操作
- 颜色对话框 (color-dialog 特性):以RGB格式获取和保存颜色数据
- 字体对话框 (font-dialog 特性):选择系统字体并支持自定义选项
基本使用方法
对话框通过构建器模式创建,文档中详细列出了各参数说明。调用对话框的核心方法是 run(parent),这个方法会阻塞当前函数执行,因为对话框拥有独立的事件循环。
if app.open_directory_dialog.run() {
app.file_dialog_result.clear();
if let Ok(directory) = app.open_directory_dialog.get_selected_item() {
app.file_dialog_result.set_text(&directory);
}
}
重要注意事项:
- 对话框运行时,同一线程中的其他窗口应被禁用
- 设置父窗口参数会自动处理禁用逻辑
- 用户选择的值会保存在对话框对象中,需通过特定方法获取
文件对话框详解
文件对话框基于Windows通用项目对话框实现,支持三种操作模式:
FileDialogAction::Open:打开文件FileDialogAction::OpenDirectory:打开目录FileDialogAction::Save:保存文件
多选功能
通过构建器的 multiselect 标志或 set_multiselect 方法可启用多选模式,但仅适用于打开操作。
结果获取
- 单选对话框:
get_selected_item() - 多选对话框:
get_selected_items()
调用错误的方法将返回错误。
颜色对话框详解
颜色对话框返回RGB格式的颜色值,范围从 [0u8, 0u8, 0u8](黑色)到 [255, 255, 255](白色)。
自定义颜色功能
支持保存最多16种自定义颜色:
- 用户通过对话框界面设置
- 开发者通过
set_saved_color(index, color)设置 - 通过
saved_color(index)获取
构建时可通过 saved_color(index, color) 方法预设颜色。
字体对话框详解
字体对话框返回 FontInfo 对象描述用户选择的字体(注意:不是字体资源本身)。
字体信息使用
获取的字体信息可用于创建字体资源。需要注意的是,框架提供的默认字体资源较为简单,仅支持:
- 字号
- 字体系列
- 字重
自定义对话框实现
Native Windows GUI 没有采用传统的Win32方式处理自定义对话框,因为传统方式涉及资源文件使用,且对话框在同一线程的不同消息循环中运行。
推荐实现方式:
- 将用户对话框作为常规GUI对象实现
- 在独立线程中运行
- 通过线程间通信处理交互
这种设计避免了传统方式的复杂性,同时提供了更好的灵活性和可控性。
最佳实践建议
- 合理使用特性开关,只包含应用实际需要的对话框类型
- 始终为对话框指定父窗口,确保正确的窗口禁用行为
- 对于长时间运行的对话框,考虑使用多线程实现
- 妥善处理对话框返回的可能错误情况
- 对于频繁使用的对话框,考虑重用对话框实例而非重复创建
通过掌握这些对话框的使用方法,开发者可以高效地为应用添加标准的Windows交互体验,同时保持代码的简洁性和可维护性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



