菜鸟MFC编程小问题?

来源:百度知道 编辑:UC知道 时间:2024/05/22 13:05:45
我利用MFC生成了个对话框,想在点关闭时候弹出一个对话框,为YESNO型的,点YES退出,点NO不退出。我是这样操作的:利用OnDestroy消息生成的函数;然后if(IDYES==MessageBox(句柄,标题什么的),结果是当我点YES或者NO都退出了程序。请问怎么回事???高手帮我写下这块的代码是怎样的???

加上else return;返回,别让他执行到底

对话框对象的默认OnOK()和OnCancel()函数会调用父类CDialog::OnOK()和CDialog::OnCancel()函数。
这两个函数会调用CDialog::DestroyWindow()函数开始销毁窗口。
在CWnd::DestroyWindow()中,会发送WM_DESTROY,WM_NCDESTROY消息给窗口进行窗口销毁。

由上述分析可见你在WM_DESTROY消息的处理函数OnDestroy()中加入提示对话框不是最合适的位置。
关键的是如果MessageBox返回值不是IDOK时,应立即返回FALSE,而不能继续执行CWnd::DestroyWindow()销毁窗口。

应该重载你的对话框类(假设为CMyDlg)的DestroyWindow()函数。
BOOL CMyDlg::DestroyWindow()
{
if(IDYES==MessageBox(_T("是否退出?"),_T("关闭提示"),MB_YESNO)
return CDialog::DestroyWindow();
else
return FALSE;
}

重载 OnCancel, 在这个函数中试试:

void CYourDlg::OnCancel(void)
{
if (IDYES == MessageBox(...))
CDialog::OnCancel();
}

void CXXDlg::OnBnClickedCancel()
{
// TODO: Add your control notification handler code here
CString message(确定退出吗?);
if (AfxMessageBox(message,1)==IDOK){
OnCancel();
}
}

捕捉WM_CLOSE消息