HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1121
FNonexitの挙動について4解決


FN

リンク

2007/11/21(Wed) 14:24:25|NO.12541

はじめまして、FNと申します。
以下のスクリプトは画面に1つのlistviewを配置し、WM_NOTIFYメッセージを待つだけのプログラムなのですが、
ここでonexitを使うと奇妙な現象が発生します。実行すると、ウィンドウを閉じて終了してもタスクマネージャ
で見るとhsp.exeのプロセスが残ったままになってしまうのです。
onexit の goto を gosub にした場合、oncmd の行を消した場合は正常に終了されるようです。
何故このような動作になってしまうのでしょうか?


#uselib "COMCTL32.DLL" #func global InitCommonControls "InitCommonControls" #uselib "USER32.DLL" #cfunc global CreateWindowEx "CreateWindowExA" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr style = $10000000|$40000000|$00800000/*WS_VISIBLE|WS_CHILD|WS_BORDER*/ hListView = CreateWindowEx(0, "SysListView32", "", style, 0, 0, ginfo_winx, ginfo_winy, hwnd, 0, hinstance, 0) oncmd gosub *OnNotify, $0000004E/*WM_NOTIFY*/ onexit goto *OnExt stop *OnNotify return *OnExt end



この記事に返信する


HSPail

リンク

2007/11/21(Wed) 15:22:34|NO.12542

CreateWindowEx等で作成したオブジェは自分で削除しないといけないようです。


#uselib "COMCTL32.DLL" #func global InitCommonControls "InitCommonControls" #uselib "USER32.DLL" #cfunc global CreateWindowEx "CreateWindowExA" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr #func global DestroyWindow "DestroyWindow" int style = $10000000|$40000000|$00800000/*WS_VISIBLE|WS_CHILD|WS_BORDER*/ hListView = CreateWindowEx(0, "SysListView32", "", style, 0, 0, ginfo_winx, ginfo_winy, hwnd, 0, hinstance, 0) oncmd gosub *OnNotify, $0000004E/*WM_NOTIFY*/ onexit goto *OnExt stop *OnNotify return *OnExt DestroyWindow hListView end
....どうでしょうか?



FN

リンク

2007/11/21(Wed) 16:03:21|NO.12543

回答ありがとうございます。
確かにそれでも終了されるようです。
子ウィンドウは親ウィンドウと同時に破棄されると思っていたのですが・・・。
しかし、なぜ gosub ではよくて goto ではダメなのか、なぜoncmd WMNOTIFY と併用するとダメなのか、が謎です。
引き続きよろしくお願いします。



pizza

リンク

2007/11/21(Wed) 19:59:17|NO.12545

終了ラベルに跳ぶ。

end

終了処理中にリストビューが削除される。

WM_NOTIFY(LVN_DELETEALLITEMS)でOnNotifyに跳ぶ。

returnでendの所に戻るが、endの次の行が実行される。

endの下には何も書いてないのでstopになる。


こんな感じ?

endを二つ書いておくとか、終了ラベルのendの前でoncmd 0にして置くと
大丈夫みたいです。



FN

リンク

2007/11/21(Wed) 20:53:49|NO.12547

なるほど、そういう理由だったのですね。
参考になります。
ありがとうございました!



ONION software Copyright 1997-2023(c) All rights reserved.