模式对话框关闭?该如何处理

模式对话框关闭???
在模式对话框中添加一按钮,在按钮中调用CDialog::OnClose(),为什么关闭不了对话框?

注:没有重载OnClose(),另外用CDialog::OnCancel()可以。

请教为什么?

------解决方案--------------------
探讨
在按钮中调用CDialog::OnClose(),为什么关闭不了对话框?

基类中没有OnClose()函数,只有OnCancel()函数,所以你用CDialog::OnCancel()可以实现对话框的关闭,而用OnClose()函数则不能实现关闭对话框

------解决方案--------------------
模态对话框最后要用EndDialog关闭的,而不是调用DestroyWindow来关闭。
------解决方案--------------------
(1)对象调用:

定义对话框全局对象的变量,
CTestDlg dlg;
dlg.Create(IDD_DIAALOG1,NULL/*this*/);//如果是NULL,则对话框属于应用程序所有,
//如果是this,属于当前调用的窗口所有;
dlg.ShowWindow(SW_SHOW);

注意:如果定义为局部变量,非模态对话框是显示不出来的,因为调用他的那个过程执行到}的时候
局部变量的所有属性都被销毁,所以显示不出来


(2)指针调用
CTestDlg *pDlg=new CTestDlg();
pDlg->Create(IDD_DIALOG1,this);
pDlg->ShowWindow(SW_SHOW); 

注意:如果定义为局部指针,当程序执行到}即生命周期结束的时候,他所保存的内存地址就丢失了,
我们就没法在对他的引用,所以,也要进行全局定义,在析构函数中 把整个指针删除。


当在非模态对话框中执行,CDialog::OnOK();时是对话框被隐藏了,并没有被销毁,而模态对话框是
销毁对话框,其实 在模态对话框中 调用 CDialog::OnOK();
其实是调用了基类的CDialog::EndDialog();这个函数只实用于模态对话框,所以在非模态对话框中不要调用基类的CDialog::OnOK(),CDialog::EndDialog();方法,必须重载这两个方法,并把基类的CDialog::OnOK(),CDialog::EndDialog();方法注释掉,如果确实要销毁一个非模态对话框就用:
DestroyWindow()方法,但是在这之前,如果有必要,必须调用UpdateData(TRUE)把数据保存到变量中,然后再调用DestroyWindow()方法。