mfc入门基础(六)创建模态对话框与非模态对话框

参考博客:

VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)-软件开发-鸡啄米

一、创建模态对话框

1、接着上节中的test02的例子来讲,找到test02.cpp文件,找到函数InitInstance()

然后,因为上节我们实现了个计算的例子,所以这边就看这个计算例子里自动生成的代码,

如下:

Ctest02Dlg dlg; // 定义对话框类Ctest02Dlg的对象dlg  
	m_pMainWnd = &dlg;  // 将dlg设为主窗口  
	INT_PTR nResponse = dlg.DoModal();   // 弹出对话框dlg,并将DoModal函数的返回值(退出时点击按钮的ID)赋值给nResponse  
	if (nResponse == IDOK)  
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}

2、自定义创建个新的模态对话框界面,实现步骤如下:先进行资源视图找到Dialog,然后插入新的对话框,如下:

 3、修改对话框的名字和ID,如下:

 4、添加个静态文本,添加效果如下:,更改下Caption

5、选择对话框模板,右键点击,选择添加类,设置类名CTipDlg如下:在解决方案中可以看到,

生成了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp

 

 6、开始引入头文件,如下:

 7、在OnBnClickedAddButton()函数中进行添加,里面给加数和被加数进行赋值的部位,我就直接跳过了,因为上节有讲,mfc入门基础(四)对话框添加控件、创建对话框类和为对话框控件添加变量_Littlehero_121的博客-CSDN博客

void Ctest02Dlg::OnBnClickedAddButton()
{
	// TODO: 在此添加控件通知处理程序代码 
	 INT_PTR nRes;             // 用于保存DoModal函数的返回值   
	 CTipDlg tipDlg;           // 构造对话框类CTipDlg的实例   
	 nRes = tipDlg.DoModal();  // 弹出对话框   
	 if (IDCANCEL == nRes)     // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行   
		 return;   

	 // 将各控件中的数据保存到相应的变量   
	 UpdateData(TRUE);   

	 // 将被加数和加数的加和赋值给m_editSum   
	 m_editSum = m_editSummand + m_editAddend;   

	 // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值   
	 UpdateData(FALSE);   
}

最终实现效果如下:

 二、非模态对话框,实现效果如下:

1、找到test02Dlg.h文件,然后进行创建个指针对象,构造函数中进行赋值,实现效果如下:

 

 2、删除掉原先:void Ctest02Dlg::OnBnClickedAddButton()中的值,重新输入代码如下:

// TODO: 在此添加控件通知处理程序代码 
	// 如果指针变量m_pTipDlg的值为NULL,则对话框还未创建,需要动态创建   
	if (NULL == m_pTipDlg)   
	{   
		// 创建非模态对话框实例   
		m_pTipDlg = new CTipDlg();   
		m_pTipDlg->Create(IDD_TIP_DIALOG, this);   
	}   
	// 显示非模态对话框   
	m_pTipDlg->ShowWindow(SW_SHOW);   

	// 将各控件中的数据保存到相应的变量   
	UpdateData(TRUE);  //此处的TRUE可加可不加,因为默认是TRUE 

	// 将被加数和加数的加和赋值给m_editSum   
	m_editSum = m_editSummand + m_editAddend;   

	// 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值   
	UpdateData(FALSE);   

3、因为非模态对话框实例是动态创建的,所以需要手动删除此动态对象来销毁对话框,MFC中不会自动添加析构函数,所以这边需要自己手动创建个,析构函数声明:~Ctest02Dlg();

Ctest02Dlg::~Ctest02Dlg()
{
	// 如果非模态对话框已经创建则删除它   
	if (NULL != m_pTipDlg)   
	{   
		// 删除非模态对话框对象   
		delete m_pTipDlg;   
	}   
}

4、最终实现效果如下:(标注的对话框可以进行拖动的)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值