「onclick」は、クライアントエリア上で検知しますので
メニュー(例えば、ボタン等も)を押しても反応しないかと思います。
メニューを押した時は、WM_COMMAND(0x0111)メッセージが発生します。
その時の「oncmd」の処理で、
PostMessage hwnd, WM_CLOSE, 0, 0
がある時(今回の場合「終了」?)
WM_CLOSE(0x0010)メッセージが発生し終了します。
しかし、「onexit」が有効である時は、
終了せずに「onexit」のラベルに処理が移ります。
「onexit」で終了処理(例えば、「end」)を
しなかった場合ウィンドウは終了されません。
以下に、メッセージのテストを書いてみました。
#uselib "user32.dll"
#func Post "PostMessageA" int,int,int,int
screen 0 , 300 , 40
title "左クリックと終了メッセージテスト"
objsize 260 , 20 : pos 20 , 10
button "PostMessage hwnd, WM_CLOSE,0,0",*test
oncmd gosub *WM_LBUTTONDOWN , 0x0201
onclick gosub *on_click
oncmd gosub *WM_CLOSE , 0x0010
onexit goto *on_exit
stop
*test
dialog "WM_CLOSEをポスト"
Post hwnd,0x0010,0,0
stop
*WM_LBUTTONDOWN
dialog "WM_LBUTTONDOWN"
return
*on_click
dialog "onclick"
return
*WM_CLOSE
dialog "WM_CLOSE"
return
*on_exit
dialog "onexit"
end