如何关闭模态对话框

lqleiqiong 2006-12-13 11:35:00

CBaseDlg dlg;
dlg.DoModal();
上面的方法产生下面的CMyDlg对话框
CMyDlg ::OnButton1()
{
int ret = AfxMessageBox(_T("真的要关闭吗?",MB_YESNO);
if(ret == 1)
{
-----------我想点yes就关闭CMyDlg和CBaseDlg,怎么做?
}
}
...全文
3092 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsb_8224 2006-12-18
  • 打赏
  • 举报
回复
你打开这个帖子后
主  题: 如何关闭模态对话框
作  者: lqleiqiong () Blog
等  级:
信 誉 值: 100
所属社区: VC/MFC 界面
问题点数: 20
回复次数: 14
发表时间: 2006-12-13 11:35:01


在这个上面有
回复 | 收藏此页 | 专题 | 公告 | 管理 | 保存 | 关闭窗口
点击"管理"进去就可以给分了
lqleiqiong 2006-12-18
  • 打赏
  • 举报
回复
还有,那个分数怎么给你们呢
lqleiqiong 2006-12-18
  • 打赏
  • 举报
回复
结贴时直接这样写的吧,我结贴
lqleiqiong 2006-12-18
  • 打赏
  • 举报
回复
谢谢各位的解释,子对话框由于是模态的,所以关闭子对话框后,才能对子对话框进行操作,那么在子对话框中定义一个 全局的bool变量,传递给主对话框,让主对话框受到这个变量,就可以关闭了
lqleiqiong 2006-12-13
  • 打赏
  • 举报
回复
在vc下都不行,你试过没有,我搞了一个上午都没有出来,郁闷啊,帮帮忙,我是新手,没有积分,只能给这么点,你试下,建一个对话框的工程,在对话框上搞一个按钮,插入新对话框,并在新对话框上建一个按钮,CTestDlg::OnButton1()
{
CMyDlg dlg;
dlg.DoModal();
}
CMyDlg::OnButton1()
{
int ret = AfxMessageBox("Really?",MB_YESNO);
if(ret得到yes)
那么我要关闭CMyDlg,还要关闭CTestDlg;
else
return;
}
wsb_8224 2006-12-13
  • 打赏
  • 举报
回复
我的程序在vc下肯定是行的,只是你没有运用好!evc没有用过
lqleiqiong 2006-12-13
  • 打赏
  • 举报
回复

wsb_8224() 你的办法一点都不行,在vc下都不行,更不用说在evc下了,我是要用在evc下的
wsb_8224 2006-12-13
  • 打赏
  • 举报
回复
通过按钮也一样,把代码放在按钮响应消息中即可
yzcurry 2006-12-13
  • 打赏
  • 举报
回复
CDialog::onok();
wsb_8224 2006-12-13
  • 打赏
  • 举报
回复
void CYourDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default

if(AfxMessageBox("确定退出吗?",MB_YESNOCANCEL)==IDYES)
{
CDialog::OnClose();
}
else
{
return ;
}
}
wsb_8224 2006-12-13
  • 打赏
  • 举报
回复
我的是在一个按钮函数中创建的局部变量,和你的一样,代码基本上是一样的.现在你这样,应该能够实现将两个对话框关闭了.
arronbnm 2006-12-13
  • 打赏
  • 举报
回复
想问一下 ,你的CBaseDlg dlg;是局部变量,还是成员变量,如果是局部变量,那你的对话框是在一个父对话框的函数中定义的,那么在这个函数中你的 代码肯定是这样的:

void CMyDlg::SomeFunction()
{
CBaseDlg dlg;

if(IDOK == dlg.DoModal()) //这时你的CBaseDlg(也就是子对话框已经关闭了)
{
SendMessage(WM_CLOSE,0,0); //关闭 主对话框CMyDlg
}
}


在CMyDlg ::OnButton1()函数中只要退出就行了

CMyDlg ::OnButton1()
{
int ret = AfxMessageBox(_T("真的要关闭吗?",MB_YESNO);
if(ret == 1)
{
OnOK(); //关闭子对话框,并使DoModal()返回 IDOK
}
}



wsb_8224 2006-12-13
  • 打赏
  • 举报
回复
关闭模态对话框应该用其成员函数EndDialog,这个是没有错误,通过这个函数在程序任何地方都可以关闭模式对话框,但是对话框不是有自带的"确定""取消"以及右上角的"X"按钮吗,"X"按钮响应的就是OnClose这个消息函数了.MB_YESNOCANCEL这个整型值为什么非要得到它具体对应的值呢,直接通过AfxMessageBox("确定退出吗?",MB_YESNOCANCEL)==IDYES)判断就能实现代码了吗
davyaxl 2006-12-13
  • 打赏
  • 举报
回复
首先你的判断条件好象有问题,YES的返回是6.关闭模态对话框应该用其成员函数EndDialog.
int ret=-1;
ret=AfxMessageBox("Really?",MB_YESNO);
if(ret == 6)
{
int result=0;
this->EndDialog(result);
((CDialog*)GetParent())->EndDialog(result);
}
wsb_8224 2006-12-13
  • 打赏
  • 举报
回复
void MyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
if(AfxMessageBox("确定退出吗?",MB_YESNOCANCEL)==IDYES)
{
CDialog::EndDialog(TRUE);
}
else
{
return ;
}
//此时只能退出CMyDlg,还要退出CTestDlg的话,发送一个关闭的消息
//上午的代码是正确的,只是你没有写OnClose这个函数的代码而已
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧