[古怪古怪真古怪,关于非模态对话框]代码入内:
void CMyView::OnModalessDlg()
{
if (FindWindow(NULL,"Dialog") != NULL) return;
CMyModalessDlg *p = new CMyModalessDlg;
p->Create(ID_DLG1,NULL);
p->ShowWindow(SW_SHOW);
}
我的第一句是为了控制非模态对话框只出现1次,如果存在则不能再出现同样的一个对话框。
为什么第一次运行是没有问题的,但是一旦关闭了那个对话框以后,再运行这段代码的时候就没有反应了呢?
也就是FindWindow(NULL,"Dialog")返回的不是NULL,可是我明明已经关闭了那个窗体啊!!
---------------------
还有一个问题,我这里的p指针,什么时候应该释放掉delete呢????
请教了。
问题点数:10、回复次数:2Top
1 楼stevecrisewu(月亮骑士)回复于 2005-07-01 08:48:02 得分 0
你关闭的时候要手动删除调p
而且你这里紧紧是一个局部变量,你需要将其保存到全局里面
你为什么要用modaless呢
如果是全局的,你直接判断p是否为空就可以了
Top
2 楼xiaoqiqixiao(七七)回复于 2005-07-01 09:05:37 得分 10
必须调用CWnd::DestroyWindow而不是CDialog:: EndDialog来关闭非模态对话框。调用CWnd::DestroyWindow是直接删除窗口的一般方法。由于缺省的CDialog::OnOK和 CDialog::OnCancel函数均调用EndDialog,故程序员必须编写自己的OnOK和OnCancel函数并且在函数中调用 DestroyWindow来关闭对话框。Top




