MFC创建有模式对话框和无模式对话框

VC下创建一个新的窗口主要有两种模式,一种是创建后主窗口失去鼠标焦点,只有子窗口能获取到用户输入和用户操作,这种方式比如网页弹出警告框,我们必须先处理弹框内的操作才能再去控制浏览器,称之为有模式对话框;另外一种是创建新窗口后主窗口与子窗口都能获取到用户焦点,这种对话框为无模式对话框。


两者的创建方法都很简单,有一些不同的地方。我们打开VC6.0,用MFC Wizard创建一个简单的窗体程序。并创建两个窗体Dialog1(无模式对话框),Dialog2(有模式对话框)

主窗体如下图


点击无模式对话框,编辑代码如下:

void CTDlg::OnClickOne() 
{
	// TODO: Add your control notification handler code here
	CTDlg *newwindow = new CTDlg();
	newwindow->Create(IDD_DIALOG1);
	newwindow->ShowWindow(true);
}
代码很简单,可是我们要注意不能在这个函数里面进行资源的回收,否则程序会报错,因为毕竟newwindow已经在内存中运行了,而且在创建完毕后必须调用ShowWindow函数设置对话框显示才行,不然不会在屏幕中显示出来。

资源的销毁回收需要在子对话框的关闭操作中去处理

void CDialog1::OnClose() 
{
	// TODO: Add extra validation here
	CDialog::OnOK();
	DestroyWindow();
}
调用DestroyWindow函数实现资源回收,防止内存泄露

创建有模式对话框更简单了,我们点击右侧的按钮输入下面代码

void CTDlg::OnClickTwo() 
{
	// TODO: Add your control notification handler code here
	CDialog2 dlg; 
	int iRet=dlg.DoModal();
}

其中iRet可以获取对话框的返回状态,这钟有模式对话框不存在资源回收的问题,关闭对话框不用添加DestroyWindow的操作。但是有模式对话框用起来还是不方便,大多数应用程序应该还是偏爱无模式对话框。


无模式对话框的资源回收也可以由主窗体来做,子窗体在适合的时候发送消息给主窗体,主窗体类注册一个消息处理函数,在函数中delete掉子窗体的对象。我没有写过这种方式销毁窗体对象的代码,网上也有很多这种例子,大家可以百度百度。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值