窗口创建与控制
窗口由 WindowOption 创建,创建成功后返回当前窗口的 WindowId。
WindowOption 负责窗口的初始配置:
默认值如下:
continuous_rendering 只控制事件循环是否持续触发重绘,不会改变 Flor 的界面模型。普通 GUI 应用保持默认值即可;动画、实时预览、游戏循环这类需要每帧刷新的场景再设为 true。
resize_layout_policy 只有启用 resize-layout-coalescing feature 后才会编译进 WindowOption。它目前有两个值:
如果没有遇到 resize 期间明显卡顿,保持默认 Immediate。完整 feature 说明见 Resize 布局策略。
open 的视图函数
open 的签名是:
view_fn 是窗口根视图的构建函数。Flor 创建平台窗口、渲染器和窗口入口后,会把当前窗口的 WindowId 传给它,并把返回值转换为窗口根控件树。
如果不需要使用窗口 ID,就写成 _window_id。
open 参数里的 WindowId 怎么用
open(move |window_id| { ... }) 里的 window_id 不建议在根视图构建阶段直接调用窗口控制方法。此时窗口正在完成初始化,Flor 还在挂载根视图、注册渲染器、初始化焦点和刷新布局;在这个闭包里直接 set_size、set_window_mode、request_redraw、destroy 等,容易让初始化顺序超出预期,产生额外重绘、布局状态不同步或平台层行为问题。
这个 WindowId 更适合被捕获到控件事件里,用来在后续事件中操控当前窗口:
如果只是设置初始标题、尺寸、背景色、刷新模式,应优先写在 WindowOption 字段里,而不是在 open 的闭包里再改。
无边框窗口与初始位置
borderless、corner_radius、parent_window 和 position 会在创建平台窗口时一次性传入底层 WindowCreateOptions。这类参数应该写在 WindowOption,不要在 open 闭包里补救式修改。
如果设置了 parent_window 但没有设置 position,当前 Windows 实现会优先把窗口放到父窗口所在显示器的工作区内,并尽量相对父窗口居中。
WindowId
WindowId 是平台窗口的句柄封装。当前 Windows 平台实现中它是:
它实现了 WindowApi 和 WindowOperations。调用这些方法时需要导入 trait:
创建与生命周期
显示与窗口模式
WindowMode 包含 Normal、Minimized、Maximized、Fullscreen。当前 Windows 实现里,Fullscreen 暂时按最大化处理。
位置与尺寸
位置使用 i32,允许多显示器环境里的负坐标;尺寸使用 u32。
DPI、输入法与鼠标
重绘
普通控件状态变化会由 Flor 自动请求重绘。只有在你直接通过窗口或平台能力改了框架无法感知的外部状态时,才需要手动调用 request_redraw()。
延迟窗口命令
WindowRequestApi 为 WindowId 增加了一组 request_* 方法,把窗口操作放入 Flor 事件循环队列执行,而不是在当前调用点立即执行。完整方法清单、返回值和回调时机见 WindowRequestApi。
它存在的主要原因是避免窗口操作在错误的调用栈里直接进入平台 API,造成重入、死锁或死循环。例如:在窗口消息处理、响应式更新、跨线程回调或事件循环正在刷新布局 / 绘制时,直接 set_size、show、destroy、drag_window 可能再次触发窗口消息或唤醒逻辑,导致当前事件循环嵌套执行。request_* 会把这些操作延后到 Flor 事件循环的统一 flush 点,先结束当前派发,再按 FIFO 顺序执行窗口命令。
如果你的需求来自非事件循环线程,还需要看 跨线程窗口命令:这个 feature 会让命令入队后主动唤醒事件循环,避免请求已经入队但事件循环还在等待。
这里的重点是使用 request_* 表达“稍后由事件循环安全执行”。如果你需要逐项确认哪些窗口操作支持延迟执行,或需要处理 result(...) 回调,直接查 WindowRequestApi。
锚定窗口
flor::windows 公开了锚定窗口辅助函数,用于让一个弹窗持续跟随父窗口里的某个 ViewId:
布局刷新后,Flor 会更新当前父窗口下已注册的锚定窗口。默认放置策略优先在锚点下方显示,空间不足时改放上方,并尽量把横向位置钳制在父窗口客户区内。锚点已经不属于父窗口、无法读取位置或完全离开客户区时,已注册弹窗会被请求销毁。

