初めまして。arielと申します。
以前からこちらのサイトは参考にさせていただいておりましたが、質問するのは初めてです。
早速質問です。
現在、DXライブラリとそのサンプルコードを利用して、サウンドノベル風文字列表示のプログラムを作っています。
文字表示などはだましだまし動くようにできたのですが、ウィンドウの『×』ボタンでプログラムを終了した際、
ウィンドウは閉じるのですが、プロセス上では終了していない状態になってしまいます。
(VC++.net上で実行→終了した場合、ウィンドウは閉じても『デバッグ中止』のボタンがついている状態)
ソースを何度も見直してみたのですが、どこに問題があるのか解らなかったので、質問させていただきました。
ソースの方も添付いたしますので、ヒントだけでもいただけると幸いです。
×ボタンで終了してもうまく終わりません
Re:×ボタンで終了してもうまく終わりません
>プロセス上では終了していない状態になってしまいます
ProcessMessage()がアプリケーションが終了した(或いはエラーが発生した)ことを伝えているのに
その指示に従ってアプリを終了しようとしていないのが原因でしょう。
×ボタンが押された場合アプリを終了する必要があるので ProcessMessage()は戻り値として
-1を戻します。
main関数側では ProcessMessage()が 0以外になれば whileループの実行を抜け、
そのまま main関数を終了しますが、StShori::shori()内の whileループは
ProcessMessage()が -1を返しても、それを無視してループを継続しようとしています。
その為いつまで経ってもアプリを終了することができないと思われます。
#根本的にこの規模のプログラムで ClearDrawScreen/ScreenFlip/ProcessMessageが
ソースの複数箇所に登場しなければならない作り方はかなり特殊な感じがします。
1カ所に纏めてみては?
ProcessMessage()がアプリケーションが終了した(或いはエラーが発生した)ことを伝えているのに
その指示に従ってアプリを終了しようとしていないのが原因でしょう。
×ボタンが押された場合アプリを終了する必要があるので ProcessMessage()は戻り値として
-1を戻します。
main関数側では ProcessMessage()が 0以外になれば whileループの実行を抜け、
そのまま main関数を終了しますが、StShori::shori()内の whileループは
ProcessMessage()が -1を返しても、それを無視してループを継続しようとしています。
その為いつまで経ってもアプリを終了することができないと思われます。
#根本的にこの規模のプログラムで ClearDrawScreen/ScreenFlip/ProcessMessageが
ソースの複数箇所に登場しなければならない作り方はかなり特殊な感じがします。
1カ所に纏めてみては?
Re:×ボタンで終了してもうまく終わりません
ありがとう御座いました。
なるほど、そこを見逃していたのですね…勉強不足でした。
While文の方は修正したので、次は
ClearDrawScreen/ScreenFlip/ProcessMessageを一箇所に纏めるような形に修正してみようと思います。
なるほど、そこを見逃していたのですね…勉強不足でした。
While文の方は修正したので、次は
ClearDrawScreen/ScreenFlip/ProcessMessageを一箇所に纏めるような形に修正してみようと思います。