调用DestroyWindow( )结束一个无模式对话框,报错。
错误出在BOOL CWnd::DestroyWindow()中的
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);
即pMap为NULL了。
这是什么意思,afxMapHWND是什么?如何解决????
错误出在BOOL CWnd::DestroyWindow()中的
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);
即pMap为NULL了。
这是什么意思,afxMapHWND是什么?如何解决????
CDialog::OnOK();
或者CDialog::OnCancel();
DestoryWindow是正确的使用方法,你看看是否别的地方有错
特别是不能多次调用DestoryWindow
还有要适时的delete 对话框
::DestroyWindow(hYourDialog)
试试:)
你的问题出在,可能在调用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;
}
}
都不行!
我的创建代码为:
m_pDlgOpenedFile = new CDlgOpenedFile();
m_pDlgOpenedFile->Create();
void CCompleteDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
delete this;//delete new point
CDialog::PostNcDestroy();
}
提示:
对话框在主线程产生,而DestroyWindow( )在辅助线程调用的。
m_pdlg->ShowWindow(SW_HIDE);
delect m_pdlg;