MFC 中如何关闭当前打开的所有的非模式的对话框。

打开了多个非模态的对话框,每个对话框上都保存有一些数据。如何全部关闭当前的非模态对话框,并保证再次打开的时候不会保留前一次关闭时的数据。

描述有些模糊。最关键的窗口关系没有描绘。
首先要确认“所有打开的非模态对话框”和主窗口的关系,如果这些对话框没有指明父窗口甚至存在其它多个父窗口,并且对话框的声明都是临时的,那么这个事情没法做。
如果所有对话框的父窗口都是同一个主窗口,那么通过EnumChildWindows获取所有对话框并关闭是没有问题的,但这个方法相对复杂,需要使用回调函数。
简单的办法:非模态对话框的指针,做成主窗口的成员变量,创建的时候如果存在,则只ShowWindow,这样可以保证不重复;而关闭就简单了,将这个(或这些)成员变量指针逐一判断,如果窗口存在,就SW_HIDE隐藏窗口、销毁指针即可。
温馨提示:内容为网友见解,仅供参考
无其他回答

MFC 中如何关闭当前打开的所有的非模式的对话框。
首先要确认“所有打开的非模态对话框”和主窗口的关系,如果这些对话框没有指明父窗口甚至存在其它多个父窗口,并且对话框的声明都是临时的,那么这个事情没法做。如果所有对话框的父窗口都是同一个主窗口,那么通过EnumChildWindows获取所有对话框并关闭是没有问题的,但这个方法相对复杂,需要使用回调函数。...

mfc中button按钮打开新对话框,关闭原对话框,怎么办?
1)起两个进程 2)用你的老方法 ,但是你在dlg->DestroyWindow()的时候只是将你的新对话框destroy了,并没有将旧对话框destroy掉,所以应该响应新对话框的WM_DESTROY同时应该向旧对话框也要发送WM_DESTROY消息 这样进程就退出了.

MFC调出子对话框后如何操作主对话框(不关闭子对话框)
对话框有两种:1 模式对话框 2 非模式对话框 模式对话框弹出后,需关闭才能执行主窗体的程序 非模式对话框弹出后,可以一直保留在屏幕中,两窗体可交叉工作。弹出非模式对话框的方法 1 在头文件中加入 include "Dlg.h"public:CDlg *Dlg;2 在代码中加入 Dlg=new CDlg(this);Dlg->Create(IDD_...

MFC\/VC高手来如何串行化保存视类里的非模态对话框
在保存数据时,打开文件并以二进制模式写入。然后,将类成员变量保存到文件中。数据的格式应与加载时相同,以确保文件的兼容性。在加载数据时,打开文件并以二进制模式读取。从文件中读取类成员变量,并在程序中根据这些数据重建对话框。这样,用户在下次打开程序时,对话框将恢复到之前的状态。需要注意的...

MFC 如何判别非模态对话框已创建 ,如何防止生成同样的对话框?
全局变量 CXXDlg *g_pdlg 初始赋值为null,如果对话框打开给g_pdlg赋值,在打开对话框之前判断g_pdlg是否为null就行了,不为null就不再打开,关闭对话框的时候给g_pdlg赋值为空

MFC中模态对话框和非模态对话框的区别?
非模态对话框使用CDialog::Create实现。由于Create函数不会启动新的消息循环,对话框与应用程序共用一个消息循环,就不会独占用户输入,Create函数在对话框显示后就立即返回。DoModal是在对话框关闭后才返回。对话框关闭后说明对话框窗口的对象已经销毁,只剩下C++对象还没有释放,所以必须调用CWnd::Destory...

MFC模式对话框如何变成非模式状态?
等等模式对话框关闭 \/\/你想做的事...dlg.DoFreeModal(); \/\/隐藏和销毁模式对话框 } 备注:CDialog::DoModal()源代码默认在C:\\Program Files\\Microsoft Visual Studio 8\\VC\\atlmfc\\src\\mfc\\dlgcore.cpp中的526行。如果对MFC的把握不是很大,最好还是不要这样做,出了问题很麻烦的噢。

什么是模态对话框,什么是非模态对话框
回答:非模态对话框,既可以执行当前弹出的对话框,也可以执行其他对话框。首先利用MFC向导建立一个基于对话框的工程:TestDlg, 然后分别插入两个不同对话框:IDD_DIALOGONE和 IDD_DIALOGTWO,并利用类向导关联起不同的类:CTestOne和CTestTwo,接着就在主对话框添加两个不同的按钮,才能实现点击按钮弹出...

如何查找没有标题栏的非模式对话框
EnumWindow ,然后在Callback函数中GetWindowText,如果是空的,就是你要找的。

MFC隐藏一个对话框的小问题
用非模式对话框,比如 dlg1.Create(IDD_SetDlg,this);dlg1.ShowWindow(SW_HIDE);

相似回答