关于非模态对话框打开的有关问题
关于非模态对话框打开的问题?
在一单文档程序中加入一非模态对话框
1,在视图类头文件中加入 CModelessDlg *dlg
2, 在视图类头文件中初始化 dlg=NULL
3, 在视图类源文件中添加如下代码:
dlg=new CModelessDlg ;
dlg.create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
4, 在非模态对话框的源文件中添加 #include "CMyView.h "和#include“CMyDoc.h”
CModelessDlg ::OnOK()
{
DestroyWindow();
((CTESTView*)GetParent())-> dlg=NULL;
}
CModelessDlg ::OnCancel()
{
DestroyWindow();
}
CModelessDlg ::PostNcDestroy()
{
delete this;
}
我遇到的问题是
1。 在CModelessDlg ::OnOK()
{
DestroyWindow();
((CTESTView*)GetParent())-> dlg=NULL;
}
中加入((CTESTView*)GetParent())-> dlg=NULL;后程序出错,这是为什么,是我引用的有问题吗?
2。我想在程序中加上判断,以防止多次打开非模态对话框,形式如下:
if(!dlg)
{ dlg=new CModelessDlg ;
dlg.create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
}
else
dlg.SetActiveWindow();
为什么当打开一个对话框并关闭它后,再次打开时程序崩溃了?问题很菜,但诚心请教。
------解决方案--------------------
DestroyWindow后Window就没有Parent了,所以把那两句换个位置试试
在一单文档程序中加入一非模态对话框
1,在视图类头文件中加入 CModelessDlg *dlg
2, 在视图类头文件中初始化 dlg=NULL
3, 在视图类源文件中添加如下代码:
dlg=new CModelessDlg ;
dlg.create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
4, 在非模态对话框的源文件中添加 #include "CMyView.h "和#include“CMyDoc.h”
CModelessDlg ::OnOK()
{
DestroyWindow();
((CTESTView*)GetParent())-> dlg=NULL;
}
CModelessDlg ::OnCancel()
{
DestroyWindow();
}
CModelessDlg ::PostNcDestroy()
{
delete this;
}
我遇到的问题是
1。 在CModelessDlg ::OnOK()
{
DestroyWindow();
((CTESTView*)GetParent())-> dlg=NULL;
}
中加入((CTESTView*)GetParent())-> dlg=NULL;后程序出错,这是为什么,是我引用的有问题吗?
2。我想在程序中加上判断,以防止多次打开非模态对话框,形式如下:
if(!dlg)
{ dlg=new CModelessDlg ;
dlg.create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
}
else
dlg.SetActiveWindow();
为什么当打开一个对话框并关闭它后,再次打开时程序崩溃了?问题很菜,但诚心请教。
------解决方案--------------------
DestroyWindow后Window就没有Parent了,所以把那两句换个位置试试