怎样在两个对话框之间正确切换?

guguqiaqia 2009-07-26 11:51:28
我想在两个对话框中正确的切换显示。

从主对话框中打开另一个对话框。
但是在主对话框中的初始化函数中要初始化一些数据。

在主对话框中打开另一个对话框框代码如下:

OnOK();
CSeconddlg dlg;
dlg.DoModal();

然后在打开的对话框中设置了数据,在返回主对话框的代码:

OnOK();
CMaindlg dlg;
dlg.DoModal();


因为每次在打开主对话框的时候需要执行主对话框的初始化函数。

所以以上的操作有时候程序会无缘无故的退出。。

请问有没有好的方法解决两个对话框切换的问题?
...全文
588 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
guguqiaqia 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jiangsheng 的回复:]
模态对话框一次只能显示一个。如果显示另一个,需要禁用掉以前的一个。如果禁用顺序和启用顺去不同,可能造成程序崩溃。在显示之前要设置当前的活动的模态对话框为父窗口。

[/Quote]

那么模式对话框是如何做到控制顺序的和如何防治系统崩溃的 ?
如何设置父窗口?

谢谢。
xyg_faster 2009-07-28
  • 打赏
  • 举报
回复
[qifa] 说的对,初始化的可以放在OnInitDialog的外面的啊。
还有
CMaindlg dlg;
dlg.DoModal();
这样 dlg就是局部变量,函数退出的时候dlg本来就会销毁。是不?
guguqiaqia 2009-07-28
  • 打赏
  • 举报
回复
多谢各位。呵呵 。

最好有代码看看 。非模式的 模式的都可以。
蒋晟 2009-07-28
  • 打赏
  • 举报
回复
模态对话框一次只能显示一个。如果显示另一个,需要禁用掉以前的一个。如果禁用顺序和启用顺去不同,可能造成程序崩溃。在显示之前要设置当前的活动的模态对话框为父窗口。
feng0hua0 2009-07-28
  • 打赏
  • 举报
回复
把主窗口的自身指针当做参数传递到子窗口的初始化函数中
主窗口中就是:
CChild c;
c.DoModal();
c.Init(this);

子窗口中的Init(CChild* c)
{
//这里就获取父窗口的指针,然后再添加你自己的函数
}
bragi523 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 guguqiaqia 的回复:]
我需要在主对话跨和次对话框(通过主对话框按钮打开)之间互相打开关闭切换。

数据是可以放在OnInitDialog外面,但是当对话框打开的时候,怎么执行呀?
[/Quote]

CMaindlg dlg;
dlg.Create(...);
按钮中
CSeconddlg dlg;
this->ShowWindow(false);
if(dlg.DoModal()==IDOK)
{
this->init();//自定义函数
this->ShowWindow(true);
}


guguqiaqia 2009-07-28
  • 打赏
  • 举报
回复
我需要在主对话跨和次对话框(通过主对话框按钮打开)之间互相打开关闭切换。

数据是可以放在OnInitDialog外面,但是当对话框打开的时候,怎么执行呀?
guguqiaqia 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 schlafenhamster 的回复:]
参考我的“MultiDialog.zip”
[/Quote]

从哪里参考 ?
guguqiaqia 2009-07-26
  • 打赏
  • 举报
回复
谢谢 各位 关键是 我切换弹出的时候 要执行各对话框的初始化函数,如果不执行初始化函数,我可以做到。

关键是要执行各个对话框中的OnInitDialog函数。

bragi523 2009-07-26
  • 打赏
  • 举报
回复
主对话框一定要模态吗?
要不可以create出来隐藏下
qifa 2009-07-26
  • 打赏
  • 举报
回复
比较好的办法是存在另外一个实例管理这两个对话框, 比如你的主窗口类实例, CAppDlg
执行
CMaindlg dlg;
dlg.DoModal();

CAppDlg等待CMaindlg返回, 如果需要在CMaindlg增加一个类成员 m_nRetCode(返回代码)
CAppDlg根据m_nRetCode的数值决定进行下一步的操作, 可以什么都不做, 或者切换对话框:
CSeconddlg dlg;
dlg.DoModal();
CSeconddlg 的操作也类似~
-------
如果你的主窗口就是CMaindlg, 不要销毁它, 采用Create方式创建CSeconddlg 实例, 相互隐藏/显示就可以达到切换的目的了
healer_kx 2009-07-26
  • 打赏
  • 举报
回复
什么叫切换啊?
oyljerry 2009-07-26
  • 打赏
  • 举报
回复
你应该在主对话框中搞一个按钮等,然后按钮中CSeconddlg dlg;
dlg.DoModal();
对话框返回后,你再处理主对话框....
codecola 2009-07-26
  • 打赏
  • 举报
回复
楼主试一下:
class CDlgA
{
CDlgB* pDlgB;
};

class CDlgB
{
CDlgA* pDlgA;
}

OnOK();
pDlgA->DoModal();

OnOK();
pDlgB->DoModal();
周成风 2009-07-26
  • 打赏
  • 举报
回复
执行初始化函数为什么就会退出??

是程序问题还两个对话框切换的问题?
schlafenhamster 2009-07-26
  • 打赏
  • 举报
回复
参考我的“MultiDialog.zip”
qifa 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guguqiaqia 的回复:]
谢谢 各位 关键是 我切换弹出的时候 要执行各对话框的初始化函数,如果不执行初始化函数,我可以做到。

关键是要执行各个对话框中的OnInitDialog函数。


[/Quote]

OnInitDialog里面也是你自己的代码, 可以考虑放到外面, 即使对话框已经创建了, 仍然可以重新加载数据, 通过外部调用, 设置对话框的外观和行为等等
wu_qing_yun 2009-07-26
  • 打赏
  • 举报
回复
不要用模态对话框啊,用非摸得!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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