一句话
新建多个窗口;每个窗口下写代码的方式和主窗口完全一样。
本窗控件可以省略窗名;要动别的窗口,才写 窗口名.…。
硬约束
载入/关闭的窗口名是组件名标识符,不要加引号:载入(窗口1)。- 跨窗访问推荐全限定:
窗口1.按钮1.标题,避免多窗同名控件混淆。 - 每个窗口有独立
.yss;Release 下次级窗样式嵌入 exe,Debug 仍用旁路文件便于热改。 - 本窗
关闭(假)用于「即将关闭」里取消关闭;关其它窗用全局关闭(窗口名)。
命令签名
载入
- 签名:
逻辑 载入(组件名 窗口名, [逻辑 模态=假]) - 说明:显示工程中另一窗口
关闭
- 签名:
无 关闭(组件名 窗口名) - 说明:销毁已载入次级窗 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。详见 资源嵌入。