モードレスダイアログの作り方
MSDNより
- 必ず OnCancel メンバ関数をオーバーライドし、その中から DestroyWindow を呼び出す。
- 基本クラスの CDialog::OnCancel を呼び出さない。
- この関数はEndDialogを呼び出すため、ダイアログボックスは破棄されず、非表示になるだけです。モードレス ダイアログ ボックスは通常 new を使って割り当てられるため、this を消去するようにモードレスダイアログのPostNcDestroyもオーバーライドする。
CDialogから派生したモードレスダイアログ用のクラスを作成します。 OnCancelをオーバーライドし、DestroyWindowを呼び出すよう追加します。
void C***Dlg::OnCancel()
{
DestroyWindow();
//CDialog::OnCancel();
}
PostNcDestroyをオーバーライドし、delete thisを追加する。
void C***Dlg::PostNcDestroy()
{
delete this; //BBB追加 ダイアログの破棄
}
その他の方法
ダイアログクラスをメンバ変数として追加する。
C***Dlg m_dlg;
ダイアログボックスを構築、起動する。
m_dlg.Create(IDD_XXX, this);
ダイアログボックスを表示させる。
//必要に応じてダイアログデータの値を設定する処理
m_dlg.ShowWindow(SW_SHOW);
ダイアログボックスを非表示にする(必要なければ省略可)。
m_dlg.ShowWindow(SW_HIDE);
ダイアログボックスを破棄する。
m_dlg.DestroyWindow();