各位大神,我在创建非模态对话框的时候,为什么第二次打开会出现错误。void CWHView::OnDialog()
{
// TODO: Add your command handler code here Dlg.Create(IDD_DIALOG1,this);
Dlg.ShowWindow(SW_SHOW);
}CTestDlg Dlg; 定义成全局变量;
CWHView::~CWHView()
{
Dlg.DestroyWindow(); 析构函数销毁对话框
}
然后运行之后,第一次点开可以,但是第二次点开对话窗,就出现这个现象。Debug Assertion Failed!
Program:D:\MFC\WH\Debug\WH.exe
File: wicore.cpp
Line: 639For information on how your program can cause an assertin
failure,see the Visual C++ documentation on asserts.(Press Retry to debug the application)但是我用new就不会出现这种情况。CTestDlg *pDlg=new CTestDlg();
pDlg->Create(IDD_DIALOG1,this);
PDlg->ShowWindow(SW_SHOW);
{
// TODO: Add your command handler code here Dlg.Create(IDD_DIALOG1,this);
Dlg.ShowWindow(SW_SHOW);
}CTestDlg Dlg; 定义成全局变量;
CWHView::~CWHView()
{
Dlg.DestroyWindow(); 析构函数销毁对话框
}
然后运行之后,第一次点开可以,但是第二次点开对话窗,就出现这个现象。Debug Assertion Failed!
Program:D:\MFC\WH\Debug\WH.exe
File: wicore.cpp
Line: 639For information on how your program can cause an assertin
failure,see the Visual C++ documentation on asserts.(Press Retry to debug the application)但是我用new就不会出现这种情况。CTestDlg *pDlg=new CTestDlg();
pDlg->Create(IDD_DIALOG1,this);
PDlg->ShowWindow(SW_SHOW);
解决方案 »
- 奇怪的连接问题?
- 如何在灰化一个CEDIT后,但要把CEDIT内字符的颜色设置成其它颜色(我希望字的颜色有所改变)?
- 昨天去了新东方.(天网)
- 离散数据波形显示问题(涉及数值算法在csdn上找很久都没有好的方法!!!(在线等待!!!搞不定这!!csdn我再也不上啦!!!)
- 一个参加项目实践的机会,值不值得去请教一下各位的意见
- 急求《visual c++程序设计技巧与实例》
- CombineRgn会出错!为什么?
- 双缓冲绘图问题!!!
- *****高分求教弹出新的对话框的问题*********
- 请问:如何取得当前对话框的位置信息作为SetWindowPos的参数?请写一下具体代码。
- 枚举服务时通过什么来知道该服务允许和桌面交互
- VC+Automation 如何实现对Excel一次读取多行?
并添加代码一行代码销毁对话框资源DestroyWindow();比如这样写:
void CDlgTest::OnOK()
{
DestroyWindow(); }
出现错误的原因是非模态对话框关闭时其实对话框并没有被销毁,而是隐藏了起来,所以你点第二次时就会出错。
解决的方法是两个:第一个是我上面说的,在关闭时销毁它,你可以处理一个OnClose之类的函数,在里面用DestroyWindow();销毁窗口。
第二个方法是不销毁,判断一下窗口是否存在,存在的话,显示它就行了。
比如将创建代码写成这样:
if(::IsWindow(m_dlg.m_hWnd))
{
dlg.ShowWindow(SW_SHOW);
}
else
{
dlg.Create(IDD_DIALOG1);
dlg.ShowWindow(SW_SHOW);
}
调用CDialog::OnClose();
然后再delete this;