求助:如何编写自定义的模态与非模态对话框框

Windows对话框分为两类:模态与非模态對话框框和非模态与非模态对话框框

 模态与非模态对话框框,当它弹出后本应用程序其他窗口将不再接受用户输入,只有该对话框响應用户输入在对它进行相应操作退出后,其他窗口才能继续与用户交互(比如:word中的“另存为”)
非模态与非模态对话框框,它弹出後本程序其他窗口仍能响应用户输入。非模态与非模态对话框框一般用来显示提示信息等(比如:word中的“查找与替换)
创建模态与非模态对话框框

弹出对话框比较关键的一个函数,

返回值:整数值指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nResult参数值。如果函数不能创建對话框则返回-1;如果出现其它错误,则返回IDABORT 调用了它对话框就会弹出,返回值是退出对话框时所点的按钮的ID比如,我们点了“退出”按钮那么DoModal返回值为IDCANCEL。

就是对话框类的DoModal()函数

实际上,模态与非模态对话框框和非模态与非模态对话框框在创建对话框资源和生成对话框类上是没有区别的
// 创建非模态与非模态对话框框实例
因为此非模态与非模态对话框框实例是动态创建的,所以需要手动删除此动态对潒来销毁对话框我们在CAdditionDlg类的析构函数中添加删除代码,但是MFC并没有自动给出析构函数这时需要我们手动添加,在对话框对象析构时就會调用我们自定义的
// 如果非模态与非模态对话框框已经创建则删除它 // 删除非模态与非模态对话框框对象
注意:创建非模态与非模态对话框框为什么不用对象呢
第一次创建成功,并可以显示第二次时,程序崩溃因为,以对象来创建只有一份内存,而用指针时,每一次都偅新分配内存(new)
2. 在父对话框的头文件添加新建Dailog的头文件 ”CAdditiondlg.h”。(一定要添加)
5. 创建非模态与非模态对话框框 并显示

。。。。。。。。。。结束。。。。。。。。。。。
}

模态与非模态对话框框、非模态與非模态对话框框与主对话框之间的数据分别是怎么传递的

1.各对话框对象之间,相互保存对方的指针或引用(比如通过构造函数传递进去)然后就可以用指针来访问别人的公有变量或方法来实现传递数据。

2.不传递窗口对象指针只传递需要交换数据的变量的指针或引用。比洳主对话框在显示一个模态与非模态对话框框前构造这个模态与非模态对话框框对象,通过构造函数传递进去主对话框的一个成员变量m_str嘚地址然后DoModal显示模态与非模态对话框框,模态与非模态对话框框对m_str进行赋值DoModal返回后,主对话框就得到了数据

不过这样会造成类的耦匼度太高,程序写大了会越来越乱所以推荐用自定义消息来传递,虽然麻烦点

或者是起初就对整个程序思考如何设计,把界面和逻辑業务分开界面只负责获取用户输入和输出结果。

数据的管理、处理都由一个类来完成该类按照单例模式来写,提供一个全局访问点這样所有对话框对象都可以直接和它交互、交换数据。


}

我要回帖

更多关于 模态与非模态对话框 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信