2006/01/10(Tue)×ボタンで終了「させない」ヒント

はてブ数 2006/01/10 17:17 プログラミング::HSP3 つーさ

たとえば、複数ウィンドウを表示していて
それぞれを別のインスタンスとして扱いたいような場合に使えます。
・SDIタイプのエディタ
・メッセンジャ系ソフトのIM窓
・×ボタンを押されたらタスクトレイに入れる、
  → アイコンを表示してウィンドウを非表示にするだけですが。
などに利用できます。

×ボタンやウィンドウメニューの「閉じる」が選択されると、
ウィンドウにはWM_CLOSEメッセージが飛んできます。
とりあえず oncmd それを捕まえます。
捕まえたところでginfo_intidを参照すると、
閉じられた窓を特定できるので、それを非表示にします。
その後「値を返す」のが重要です。

HSPのoncmd gosubでジャンプしてきたルーチンで値を返すと
「何もしなかったときに行われる普通の処理」を抑制できます。
つまり、普段なら行われる「終了処理」を抑制して、
何も起こらないようにできる、というわけです。

#define WM_CLOSE $00000010
repeat 10,1
screen cnt,320,240:title "window"+cnt
oncmd gosub *onClose,WM_CLOSE
stop

*onClose
gsel ginfo_intid,-1
return 0