YStudio Y++

多窗口设计

Y++ / YStudio 开发文档 · 一点滴

一句话

新建多个窗口;每个窗口下写代码的方式和主窗口完全一样。
本窗控件可以省略窗名;要动别的窗口,才写 窗口名.…。

硬约束

  1. 载入 / 关闭 的窗口名是组件名标识符,不要加引号:载入(窗口1)。
  2. 跨窗访问推荐全限定:窗口1.按钮1.标题,避免多窗同名控件混淆。
  3. 每个窗口有独立 .yss;Release 下次级窗样式嵌入 exe,Debug 仍用旁路文件便于热改。
  4. 本窗 关闭(假) 用于「即将关闭」里取消关闭;关其它窗用全局 关闭(窗口名)。

命令签名

载入

  • 签名:逻辑 载入(组件名 窗口名, [逻辑 模态=假])
  • 说明:显示工程中另一窗口

关闭

  • 签名:无 关闭(组件名 窗口名)
  • 说明:销毁已载入次级窗 HWND

本窗关闭

  • 签名:无 {窗体}.关闭([逻辑 执行=真])
  • 说明:假=取消即将关闭

假设工程里有:主窗口、窗口1、窗口2。

载入(窗口1)
载入(窗口1, 真)          ' 模态
关闭(窗口1)
窗口1.关闭(假)           ' 限定写法,取消关闭
错误 正确
载入("窗口1") 载入(窗口1)
关闭("窗口1") 关闭(窗口1)

YSS(每窗独立)

  • 文件:窗口/窗口1/窗口1.yss(新建时自动骨架;也可放 资源/窗口1.yss)
  • 运行:各窗口加载自己的 .yss,互不覆盖
  • Release:次级窗 YSS / 控件表 / 启动属性写入 exe(g_yppEmbeddedSecondaryForms),外拷只需主程序
  • Debug:仍用 exe 旁 form_controls_*.bin、form_launch_*.txt、form_yss_ext_*.bin 与同名 .yss

窗体事件 / 属性

设计器可设标题栏、最大/最小/关闭、边框、置顶、圆角、标题按钮风格、背景材质等;支持 创建完毕、即将关闭(可取消)、尺寸改变、激活/失活。
次级窗的亚克力/云母、macOS 交通灯、圆角裁剪与主窗一致。
Release 下属性来自嵌入的 form_launch_<窗名>.txt。

事件写法(与主窗一致)

每个窗口有自己的 窗口/<名>/<名>.yc。本窗控件事件不要加窗名前缀:

' 窗口/窗口1/窗口1.yc — 与主窗同名「按钮1」互不抢绑
函数 按钮1.单击() {
    按钮1.标题 = "点了次级窗"
}
函数 窗口1.创建完毕() {
    ' 窗体事件仍用「窗名.事件」
}

设计器插入事件 stub 亦保持短名;编译时按 yc 路径自动绑定到对应窗口。

跨窗属性 / 方法(三段式)

本窗省略窗名;动别的窗口必须写 窗名.…(控件属性/方法为三段式):

' 在 窗口1 的代码里改主窗口:
主窗口.按钮1.标题 = "Y++"
主窗口.标题 = "测试新标题"
主窗口.按钮1.可见 = 假
主窗口.按钮1.移动(10, 20)
主窗口.关闭()

反向同理:主窗代码里写 窗口1.按钮1.标题 = "x" / 窗口1.按钮1.清空()。

与单 exe 发布

多窗口工程在 Release 下是静态单一 exe:载入 打开的次级窗从嵌入表取控件 blob、启动 meta、YSS 扩展与窗体 YSS。详见 资源嵌入。

相关:工程结构 · YSS · 窗口 XML