モードレスダイアログの消去

[戻る]
ぷっくん 2002/09/21(土) 16:30:57
モードレスダイアログを消去できません。
以下、処理内容を説明します。

(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();
}

ダイアログ消去するメッセージが届いてないのでしょうか?
良い解決方法を教えてください。
お願いします。

真夜中のまたんご 2002/09/22(日) 03:23:13
今手元に資料がないので確かなことは言えませんが、このモーダレスダイアログはメイ
ンフレームで作成されているので呼び出せないのでは? OnCancel関数内でデフォルト
のままCModolessTestDialog::OnCancel()で渡してはいけないのでしょうか? m_pDlgの
初期化や後処理も必要となると思いますが。かなり昔にハマった記憶があります。

また、メインフレーム終了時には当然OnDestroy関数を呼ぶことになるので、その分岐も
必要となります。

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