モードレスダイアログを消去できません。
以下、処理内容を説明します。
(1)メインフレームのメニューを選択すると↓メソッドが呼ばれます。
void CDialogTestView::OnShowModoless()
{
GetDocument()->ShowModoressTestDialog();
}
(2)↑メソッドに↓メソッドがよばれ、ダイアログが表示されます。
void CDialogTestDoc::ShowModoressTestDialog(void)
{
m_pDlg = new CModolessTestDialog();
m_pDlg->Create(CModolessTestDialog::IDD, NULL);
m_pDlg->ShowWindow(SW_SHOW);
}
(3)ダイアログのキャンセルボタンをクリックすると↓メソッドがよばれます。
DestroyWindowを呼んでいるので、ダイアログが消去されるはずですが、表示されたままです。
void CModolessTestDialog::OnCancel()
{
DestroyWindow();
}
(4)↑メソッド内のDestroyWindowを呼ぶ事で、↓のメソッドが呼ばれるはずですが
よばれません。ブレークポイントをdelete thisの行に置きましたが、来ませんでした。
void CModolessTestDialog::PostNcDestroy()
{
delete this;
CDialog::PostNcDestroy();
}
ダイアログ消去するメッセージが届いてないのでしょうか?
良い解決方法を教えてください。
お願いします。
今手元に資料がないので確かなことは言えませんが、このモーダレスダイアログはメイ
ンフレームで作成されているので呼び出せないのでは? OnCancel関数内でデフォルト
のままCModolessTestDialog::OnCancel()で渡してはいけないのでしょうか? m_pDlgの
初期化や後処理も必要となると思いますが。かなり昔にハマった記憶があります。
また、メインフレーム終了時には当然OnDestroy関数を呼ぶことになるので、その分岐も
必要となります。