oncmdのバグっぽいです。
「oncmd 1」を使用した場合
他のウインドウの受け取ったメッセージが、最後に「oncmd 1」を実行したウインドウにのみ反映されるようです。
「#module」「#global」で区切っても変わらないみたいです。
他のウインドウで受け取ったメッセージを一つのウインドウに反映を集中させることが容易になっているみたいですが
oncmdで特定ウインドウのみの処理を中断させるには
移動先のサブルーチンで判定するしかないみたいですね。
#const global WM_NCLBUTTONDBLCLK $000000A3
#const global WM_MOVE 0x0003
/*moduleA*/
#module a
#deffunc AA_
screen 0
mes "screen A : タイトルバーをダブルクリックしてみて下さい"
input a
oncmd gosub *wm_command,$111
oncmd gosub *WM_NCLBUTTONDBLCLK__ , WM_NCLBUTTONDBLCLK ;タイトルバーダブルクリック
return
#deffunc oncmd_0_AA_
gsel 0
oncmd 0
return
*wm_command
mes "wm_command"
return
*WM_NCLBUTTONDBLCLK__
mes "ダブルクリックされました : カウント"+str(i)
i++
return
#global
/*moduleB*/
#module b
#deffunc BB_
screen 1
mes "screenB"
mes "このwindowを移動してみて下さい、スクリーンDのタイトルが変わります"
oncmd gosub *WM_MOVE__ , WM_MOVE
return
*WM_MOVE__
title "スクリーン1を移動しました : カウント"+str(i)
i++
return
#global
/*moduleC*/
#module c
#deffunc CC_
screen 2
mes "screenC"
input b
oncmd 1 ;oncmd 1の定義
return
#global
/*moduleC*/
#module d
#deffunc DD_
screen 3
gsel 3 , 2
mes "screenD"
oncmd gosub *WM_NCLBUTTONDBLCLK__ , WM_NCLBUTTONDBLCLK
oncmd 1 ;oncmd 1の定義
return
#deffunc oncmd_1_DD
oncmd 1
return
*WM_NCLBUTTONDBLCLK__
mes "ダブルクリック"
return
#global
#const time_ 1000
AA_ : BB_ : CC_ : DD_
wait time_ : gsel 3 : cls : color 255,0,0 : mes "[wait "+str(1000)+" が経過しました\noncmd 0 が実行されます]" : color 0,0,0
oncmd_0_AA_
wait time_ : gsel 3 : cls : color 255,0,0 : mes "[oncmd 1 が実行されます\nwait "+str(1000)+" が経過しました]" : color 0,0,0
oncmd_1_DD