在Dyalog APL中最小化子窗口时,缺少窗口标题
这是对前文的延续,来自 Unpredictable behavior when minimizing application child windows in Windows 11.
下面的Dyalog APL程序创建了一个窗口,当按下按钮时会打开一个子窗口。如果子窗口被最小化,则不会显示窗口标题。这很成问题,因为在我的实际应用中有几个子窗口也可能被最小化,我需要能够区分它们。
:Namespace ChildWindows
∇ OpenChildWindow
'F.F1'⎕WC'Form'('Caption' 'Child Window')
∇
∇ Run
'F'⎕WC'Form'('Caption' 'Main Window')
'F.B'⎕WC'Button'('Caption' 'Open child window')('Event' 'Select' 'OpenChildWindow')
∇
:EndNamespace
下面是最小化窗口的截图。

我在Windows 11上,在Dyalog APL的 16版和19版中得到的行为一致。有没有办法让(前半部分的)窗口标题在最小化时显示?
编辑2026-04-14
来自Josh D的回复显示,问题在于默认算法为最小化窗口使用了不充分的窗口宽度。只有Dyalog知道这个宽度是如何计算的。在Windows 10中,最小化的窗口看起来大致是这样的:
解决方案
你可以做的一件事是钩入StateChanged事件,并用你自己的逻辑覆盖默认行为。比如:
OpenChildWindow
'F.F1'⎕WC'Form'('Caption' 'Child Window')
F.F1.onStateChange ← 'HandleStateChange'
HandleStateChange←{
f s ← ⍵[1 3]
s≠1: ⍵ ⍝ Not minimized -- don't care
f.Size ← 0 20 ⍝ Could make X more dynamic based on caption size
f.Posn ← 90 0 ⍝ ditto ↑ but for # of child forms present
0 ⍝ Override default behavior
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
