// 托管 Window 资源与原生窗口相连:源码排出 resize/title 命令,成功刷新后由 GUI 线程执行。 // 实际可用视口再返回布局约束,原生窗口尺寸不是业务对象上凭空写入的一份几何副本。 // 保存目标 Window,两个按钮对同一资源请求不同尺寸。 class WindowActions { window: Window // 请求 900x600 逻辑尺寸,最终大小仍由窗口管理器决定。 function compact(self: WindowActions, event: Event): Unit { self.window.resize(900, 600) } // 请求 1120x720;同次输入多次 resize 可由命令队列合并到最后值。 function wide(self: WindowActions, event: Event): Unit { self.window.resize(1120, 720) } } // 原生矩形的测量覆盖展示父约束如何随窗口变化。 class WindowBand: RectBlock { // 取当前出现位置 maxWidth 作为期望宽度,固定高 32;不读取其他窗口的尺寸。 function measure(self: WindowBand, mount: Mount, constraints: Constraints): MeasureResult { return MeasureResult(constraints.maxWidth, 32) } } // ui.window 返回当前主窗口托管资源;page.open 指定同一资源,后面的 title/resize 为原生命令。 window = ui.window() actions = WindowActions(window) band = WindowBand(80, 32, 0, "#237A45") compact = Button("紧凑窗口 900 × 600") wide = Button("宽窗口 1120 × 720") compactConnection = compact.on("click", actions.compact) wideConnection = wide.on("click", actions.wide) page = Page() page.render(Column(24, 16, TextBlock("代码与 GUI 操作同一个受管窗口对象"), band, compact, wide)) page.open(window) window.setTitle("Endor Window") window.resize(1120, 720)