VC中模态与非模态对话框的显示与关闭 关闭非模态对话框

在windows中将对话框分为两类:模态对话框和非模态对话框。模态对话框打开后,始终占据着当前程序的焦点,如果不关掉对话框的话,当前程序将无法做其他工作。例如在Word里,选择“文件|打开”命令,弹出打开对话框,此时的对话框就是一个模态对话框。非模态对话框打开时,程序可以继续做其他工作。例如在Word里,选择“编辑|查找”命令,弹出“查找”对话框就是非模态的。

对于模态对话框的显示是利用对话框类的DoModal()函数实现的,调用了该函数时,就创建了一个对话框并显示。一旦模态对话框被创建并显示出来,它就进入一个消息循环。此时模态对话框会将接收到的消息分发给需要接收此类消息并进行处理。

而非模态对话框使用对话框类的ShowWindow(SW_SHOW)来显示对话框,而不是使用DoModal()函数,一般情况下,非模态对话框的对象需要利用new操作符进行动态的创建对话框对象。当然C++语言中,对于利用new操作符创建的内容需要使用delete操作符进行销毁。对于动态创建的对话框对象同样需要在关闭对话框时利用delete进行销毁。

说了这么多了,相信大家已经懂了模态和非模态对话框的基本情况,那么在VC中是如何实现的呢,下面就来细细说明

(1)、模态对话框的实现

新建一个基于对话框的应用程序Test,在资源视图中右键点击Dialog,在弹出菜单中选择“InertDialog”,然后根据类向导新建一个对话框相关的类dlg1

添加主对话框上与确定键相对应的消息响应函数,实现模态对话框的显示,代码如下:

voidCTestDlg::OnOK()

{

//TODO:Addextravalidationhere

dlg1dlg;

intresult=dlg.DoModal();//调用对话框类的成员函数

if(result==IDOK)

AfxMessageBox("单击确定按钮");

else

AfxMessageBox("单击取消按钮");

CDialog::OnOK();

}

编译运行便可实现模态对话框的显示了

(2)、非模态对话框的实现

新建一个基于对话框的应用程序Test,在资源视图中右键点击Dialog,在弹出菜单中选择“InertDialog”,然后根据类向导新建一个对话框相关的类dlg1,

在CTestDlg类前面添加dg1的声明语句,如下所示:

classdlg1;

classCTestDlg:publicCDialog

{

..........

然后在CTestDlg中添加一个变量:dlg1*pdlg;并且在CTestDlg的构造函数中初始化为NULL,而且要在TestDlg.CPP的前面加上头文件#include"dlg1.h"

然后添加主对话框确定按钮的消息映射,代码如下

voidCGeliangDlg::OnOK()

{
VC中模态与非模态对话框的显示与关闭 关闭非模态对话框

//TODO:Addextravalidationhere

if((pdlg!=NULL)&&::IsWindow(pdlg->m_hWnd))//判断对话框是否已被创建

{

AfxMessageBox("对话框已经被创建");

pdlg->ShowWindow(SW_SHOW);//已被创建,直接显示

}

else

{

pdlg=newdlg1();//没有被创建,则创建对象

}

if(!::IsWindow(pdlg->m_hWnd))

{

pdlg->Create(IDD_DIALOG1,this);//创建对话框

pdlg->ShowWindow(SW_SHOW);//显示对话框

}

//CDialog::OnOK();

}

在添加内存清理函数,

在类视图中右击dlg1,选中AddVirtualFunction,弹出NewVirtualOverrrideforclassdlg1对话框,选择PostNcDestroy,单击AddHandler按钮,单击EditExiting按钮,编写代码如下:

voiddlg1::PostNcDestroy()

{

//TODO:Addyourspecializedcodehereand/orcallthebaseclass

deletethis;

//CDialog::PostNcDestroy();

}

至此已经完成了非模态对话框的显示与销毁了。

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/101598.html

更多阅读

中国是世界上历史最悠久最文明的农业古国 世界四大文明古国

中国是世界上历史最悠久最文明的农业古国尹兴义纵观中国之伟大,有一个最基本的表现:平凡筑伟大,勤劳育真情。中华民族在构建农业社会文明中,以“自食其力,自给自足”为主导思想,艰苦奋斗,自强不息。所以,中国农谚代代传承:“金山银山难充

中元节与盂兰盆节 盂兰盆节的来历

维基百科,自由的百科全书(重定向自中元节)跳转到: 导航、 搜索中元节、盂兰盆节香港的一个盂兰节组织中文名称繁体中元節、盂蘭盆節、鬼節、七月半简体中元节、盂兰盆节、鬼节、七月半日文名称日文汉字盂蘭盆 · お盆假名うらぼん · お

在VC中如何使用VARIANT变量转自CSDN vc variant是什么类型

用MapX写程序时,有些方法的输入参数和返回值都是VARIANT类型,在VB中用dim pvas variant就可以了,而在Vc中稍微麻烦一点,不过稍微尝试一二,就会发现不过如此了。在vc中主要用COleVariant对象定义variant变量,以下面的例子为说明:例如:要取得

声明:《VC中模态与非模态对话框的显示与关闭 关闭非模态对话框》为网友爱却说不出口分享!如侵犯到您的合法权益请联系我们删除