EndDialogの素朴な疑問

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
西野孝雄

EndDialogの素朴な疑問

#1 投稿記事 by 西野孝雄 »

質問は、DialogBoxで表示したモーダルタイプダイアログを、EndDialogを使わずに破棄したらどうなるのか、です。

Win32プログラミング講座 ~ Step28. メモリ監視ツールを作る②では
ダイアログの×ボタンが押された時の処理は書かれていません。

その場合でもウインドウは消えますし、エラーも出ませんが、自動でEndDialogを呼んでるとは思えないし、
自分の環境だけ、たまたま問題がないのかもしれません。

MSDNでは、「DialogBox、~省略~ の各関数を使って作成したダイアログボックスは、
EndDialog 関数を使って破棄しなければなりません。」と書いてあります。

コードは、以下のようにすれば良い(と思ってます)ので、そういうことが聞きたいのではなく、
どうなるのか、問題は無いのか、を知りたいのです。

コード: 全て選択


Sub OptionDlg_QueryClose(ByRef cancel As Integer)
	cancel=TRUE
	EndDialog(hOptionDlg,0)
End Sub

cancel=TRUEを入れないと、ダイアログを呼んだメインウインドウも終了してしまいます。QueryCloseだけで終了するのにさらに、EndDialogも呼んでる、つまり、二回終了してるからだと推測します。
Ver4.13.00  WinXP HOME SP2
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: EndDialogの素朴な疑問

#2 投稿記事 by 7 »

> ダイアログの×ボタンが押された時の処理は書かれていません。
プロジェクト内のCallback.wbpを見てみて下さい。SubWndというモーダルダイアログを作ってある、とすると、Function EventCall_SubWnd(hWnd,message,wParam,lParam) As LRESULTという関数が定義されていて、その関数を見ると、WM_CLOSEがモーダルダイアログに送られてくるとEndDialog()関数が実行されていることが分かります。

つまり、モーダルダイアログの×ボタンが押された時、EndDialog()関数が実行されています。問題はないと思います。
西野孝雄

Re: EndDialogの素朴な疑問

#3 投稿記事 by 西野孝雄 »

返信ありがとうございます。

ぜ、全然知りませんでした・・・(がっくし)。

Callback.wbpは、見た事はありましたが、
良く分からなくて、全然チェックしておりませんでした。
自動でやってくれるてるんですね。

勉強になりました。ありがとうございました。
返信する