调用DestroyWindow( )结束一个无模式对话框,报错。
错误出在BOOL CWnd::DestroyWindow()中的
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);
即pMap为NULL了。
这是什么意思,afxMapHWND是什么?如何解决????

解决方案 »

  1.   

    你不用直接DestroyWindow的,这个好象是mfc自己负责的。要调另外的一个函数,叫什么,我忘记了。你可以看看vc技术内幕
      

  2.   

    在DestroyWindow()前要加上
    CDialog::OnOK();
    或者CDialog::OnCancel();
      

  3.   

    OnOk,OnCancel必须在有模对话框下才能使用
    DestoryWindow是正确的使用方法,你看看是否别的地方有错
    特别是不能多次调用DestoryWindow
    还有要适时的delete 对话框
      

  4.   

    函数调用错误
    ::DestroyWindow(hYourDialog)
    试试:)
      

  5.   

    DestroyWindow()没问题,也不用加上CDialog::OnOK();或者CDialog::OnCancel();,无模式对话框在对话框外就是用DestroyWindow()来关闭的。
    你的问题出在,可能在调用DestroyWindow()时,该dialog已经被关闭了。一般,总是这样做的:
    调用这个dialog的窗口类中有成员变量:CDialog *m_pdlg;
    然后m_pdlg初始化成NULL,在创建对话框时:
    m_pdlg = new CDialog();
    m_pdlg->Create(IDD_YOURDIALOG, this);
    m_pdlg->ShowWindow(SW_SHOW);
    Destroy时,要做必要的检查:
    if(m_pdlg != NULL)
    {
    HWND hWnd = m_pdlg->GetSafeHwnd();
    if((hWnd != NULL) && (::IsWindow(hWnd)))
    {
    m_pdlg->DestroyWindow();
    delete m_pdlg;
    m_pdlg = NULL;
    }
    }
      

  6.   

    各位:
    都不行!
    我的创建代码为:
    m_pDlgOpenedFile = new CDlgOpenedFile();
    m_pDlgOpenedFile->Create();
      

  7.   

    you can try this method,in your dialog class ,add
    void CCompleteDlg::PostNcDestroy() 
    {
    // TODO: Add your specialized code here and/or call the base class
    delete this;//delete new point 
    CDialog::PostNcDestroy();
    }
      

  8.   

    不行!
    提示:
    对话框在主线程产生,而DestroyWindow( )在辅助线程调用的。
      

  9.   

    试试下面语句:
    m_pdlg->ShowWindow(SW_HIDE);
    delect m_pdlg;