ウィンドウ終了処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
さが

ウィンドウ終了処理

#1

投稿記事 by さが » 16年前

ウィンドウモードで右上のバッテンを押した後に、タスクマネージャのプロセスを見ると実行していたものが残っているんですが
これはちゃんと終了されてないんですよね?

これを解決するためにはバッテンを無効かバッテンを押した時の処理を書く必要があると思うんですが
具体的にどのようにすればよいか教えてください。

Justy

Re:ウィンドウ終了処理

#2

投稿記事 by Justy » 16年前

 環境が書いてありませんが、普通の Windows + Win32 APIの話でしょうか?

 プロセスが残っているということは、きっと WinMain関数の終端まで
到達していないのでしょう。

 ソースもないので、簡単なアドバイスしかできませんが、
GetMessage() or PeekMessage()のループの終了条件や WM_CLOSE/WM_DESTROYメッセージを
受け取って、適切に処理しているか確認してみてください。

さが

Re:ウィンドウ終了処理

#3

投稿記事 by さが » 16年前

スイマセン。専門板では無いんですよね。

Visual C++ 2005 Express Edition で Dxライブラリを使用しています。
龍神録のプログラムをちょこちょこ変えて、別のゲームを作ってる感じです。

Justy

Re:ウィンドウ終了処理

#4

投稿記事 by Justy » 16年前

 DXライブラリなら、ProcessMessage()の戻り値に応じてループから抜けるように
書いていますでしょうか?

 通常であれば×をクリックしたとき、ProcessMessage()の戻り値は -1が返りますので
その場合ループから抜けて WinMainを終わらせればいいはずです。

 龍神録の館のプログラムなら×を押したときに main.cppで while(ProcessLoop()==0) と書いてある
ループを抜けているかどうか確認してください。

 もし、戻り値に応じて処理してループを抜けているにも関わらず、プロセスが終了しない場合は
ブレイクポイントやステップ実行でどこまで実行されているのか確認して見てください。

さが

Re:ウィンドウ終了処理

#5

投稿記事 by さが » 16年前

Justyさんありがとうございます。無事解決しました。

ProcessLoop()の通常時の返り値を1に設定し
while(ProcessLoop())としてメインをループしていました。

そして×が押された時にProcessLoopは-1を返しループを抜けるだろうと思い込んでいたのが原因でした。
while(ProcessLoop()==1)としたところ恐らく正常に終了することが出来ました。


ゲームの方はもう終盤なのに基本構造が分かってないとは、ダメな開発者ですね。。

閉鎖

“C言語何でも質問掲示板” へ戻る