如何实现关闭所有非模态对话框后主窗口自动关闭?

wencai8792 2010-04-09 12:44:56
MFC基于对话框做了一个窗口作为主窗口,再新建了一个对话框CTestDlg,然后这个对话框以非模态创建,创建了多个。
然后主窗口隐藏了。。。当关闭所有的CTestDlg后,主窗口还没有关闭。
现在想要的效果是,当所有的CTestDlg对话框关闭后,隐藏了的主窗口也自动关闭,请问怎样实现?
...全文
571 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
amoylel 2012-11-09
  • 打赏
  • 举报
回复
感谢楼主,折腾了好久
star060829 2011-11-05
  • 打赏
  • 举报
回复
谢谢,解决了我的问题。支持楼主解决问题 贴答案的方法!
baili35 2010-04-09
  • 打赏
  • 举报
回复
处理CTestDlg的关闭事件,给主窗体发送消息让他关闭就ok
wencai8792 2010-04-09
  • 打赏
  • 举报
回复
谢谢各位。。问题解决了。。。。


新对话:CMainForm 主窗口:C***Dlg
为了让对话框的数据能反馈回主窗口,需要通过对话框向主窗口发送一个自定义消息,触发主窗口的一个函数,把对话

框的数据传回主窗。为了能向主窗口发送消息,需要取得主窗口指针,因此重载对话框的构造函数,生产对话框的时候

把主窗的指针传给对话框。

在CMainForm.h增加以下:
public:
CMainForm(CWnd* pParent); // 标准构造函数
CWnd *pView; //定义一个存储主窗的指针

protected:
virtual void OnDestroy(); //重载OnDestroy函数声明,为了关闭对话框时间向主窗提供数据


MainForm.cpp : 实现文件
#define WM_DLGCLOSE (WM_USER +3)//当对话框关闭的自定义消息

CMainForm::CMainForm(CWnd* pParent /*=NULL*/)
: CDialog(CMainForm::IDD, pParent)
{
pView=pParent;//把DLG类的指针保存
}

//程序退出要做的事
void CMainForm::OnDestroy()
{
UpdateData(TRUE);//显式调用实现数据交换
pView->SendMessage(WM_DLGCLOSE);//向主窗发送消息
CDialog::OnDestroy();
DeleteTray();//删除托盘图标函数
delete this;

}

对话框把消息发送回主窗后,主窗需要响应该相应的消息,调用函数接受数据的变化。
在**Dlg.h中,修改以下:


protected:
afx_msg LRESULT OnDialogClose(WPARAM wParam, LPARAM lParma); //声明对话框关闭消息处理函数

public:
static int DlgCount;//定义一个记数,记录对话框数
在**Dlg.cpp中,修改如下:

int C***Dlg::DlgCount=0;//已打开的对话框数量


BEGIN_MESSAGE_MAP(C***Dlg, CDialog)
...
ON_MESSAGE(WM_DLGCLOSE,OnDialogClose) //自定义消息处理函数,对话框发回的消息这里吵醒主窗,然后它

执行OnDialogOk
END_MESSAGE_MAP()


LRESULT C***Dlg::OnDialogClose(WPARAM wParam, LPARAM lParma)
{
AfxMessageBox("处理消息");
C***Dlg::DlgCount--;
if(C***Dlg::DlgCount==0)
{
OnOK();
}
return 0;
}


新建并弹出非模式对话框
CMainForm *dlg=new CMainForm(this);
dlg->Create(IDD_MAINFORM,NULL);
dlg->ShowWindow(SW_SHOW);
this->ShowWindow(SW_HIDE);
C***Dlg::DlgCount++;
Eleven 2010-04-09
  • 打赏
  • 举报
回复
ls的方法可行。。。
SullenSun 2010-04-09
  • 打赏
  • 举报
回复
加个变量计算开了多少个DIALOG,每关闭一次减1,为0时给主窗口发消息关闭。
wencai8792 2010-04-09
  • 打赏
  • 举报
回复
能不能具体点?想要的效果,好像主窗口一关闭就所有对话框都关闭了的,处理CTestDlg的关闭事件
怕关一个对话框导致所有的窗口都关闭了`~

15,979

社区成员

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

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