終了コードが0以外になる場合について

[戻る]
ヘンダソン 2002/09/22(日) 02:39:07
毎度お世話になっております、ヘンダソンです。
現在作成中のアプリで、終了コード0以外になるのですが、意味がわかりません。
環境はWin2000のVC++6.0のMFCです。

簡単に状況を説明しますと……
・ダイアログに終了ボタンと右上の「X」ボタン(システムコマンドの終了)
・OnClose()関数でメッセージをハンドル
・OnClose()内で終了確認のダイアログを出して戻り値を判定、終了とキャンセルを分岐

結果は……
・ダイアログ上の終了ボタンで終了した場合は、終了コード「0」で終了
・「x」ボタンで終了した場合、「3」
※なお、終了のキャンセル後に再度終了した場合も同様に「0」ないし「3」で終了し
ます。

デバッグしたところ、OnClose()も両者ともに呼び出され正常終了していますし、他で特
にプログラム上おかしな動きをしている箇所も発見できませんでした。

ヘルプやネットで探してみたのですが、終了コードの意味がわかるところが見つかりま
せん。一覧のようなものがある場所をご存知の方、どうか教えてください。

dairygoods 2002/09/24(火) 11:32:07
そういう時は、ソースを追いかけるといいです。

AfxWinMain()を見ると、CWinThread::Initinstance()がFALSEを返した場合の
終了コードは、CWinThread::ExitInstance()の戻り値になっています。

そして、CWinThread::ExitInstance()は、
直前のメッセージのwParamを返しています。
ソースを見ると直前のメッセージがWM_QUITであることを期待しているようです。

しかし、ダイアログの場合を調べてみると、[×]ボタンの場合はWM_COMMAND、
ボタンを押した場合は、WM_LBUTTONUPだったりと、
ばらばらで終了コードには全く意味がないことが分かります。

ヘンダソン 2002/09/25(水) 14:08:43
[[解決]]
dailygoods様、ご回答ありがとうございました。

まだ確認してはいないのですが、取り急ぎ御礼まで。
MFCだとAfxWinMain()は今までずっとブラックボックスになっていると思ってい
ました。以前に続けて、またまた無知をひけらかしてしまいました(笑)

終了コードというのはそのまま、直前のメッセージの値だったのですね。
ということで、わざわざ一覧もなにもないわけですね。
ダイアログ単独だと親ウィンドウがシステムウィンドウ(というのかどうかわか
りませんが)になるため、終了コードがこれらの値になる、ということなのでし
ょうか。←正確な表現ではないでしょうが、言いたいことは伝わるかしらん?

早速確認してみます。ありがとうございました。

古いスレッドには追加発言できません。