C++ MFC / VS2013 之十四 (对话框:消息对话框)

                                                                                            消息对话框

      前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框。本节讲解Windows系统中最常用最简单的一类对话框--消息对话框。

     我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等。因为在软件开发中经常用到消息对话框,所以MFC提供了两个函数可以直接生成指定风格的消息对话框,而不需要我们在每次使用的时候都要去创建对话框资源和生成对话框类等。这两个函数就是CWnd类的成员函数MessageBox()和全局函数AfxMessageBox()

 一.CWnd::MessageBox()函数和AfxMessageBox()函数的用法

     下面就分别讲解两个函数的用法

     1.CWnd::MessageBox()函数

     CWnd::MessageBox()的函数原型如下:

       int MessageBox(
           LPCTSTR lpszText,
           LPCTSTR lpszCaption = NULL,
           UINT nType = MB_OK 
       );
     参数说明:
     lpszText:需要显示的消息字符串。

     lpszCaption:消息对话框的标题字符串。默认值为NULL。取值为NULL时使用默认标题。

     nType:消息对话框的风格和属性。默认为MB_OK风格,即只有“确定”按钮。

     nType的取值可以是下面两个表中任取一个值,也可以是各取一个值的任意组合。即可以指定一个对话框类型,也可以指定一个对话框图标,还可以两者都设定。

nType 取值参数说明
MB_ABORTRETRY有“终止”、“重试”和“忽略”按钮
MB_OK有“确定”按钮
MB_OKCANCEL有“确定”和“取消”按钮
MB_RETRYCANCEL有“重试”和“取消”按钮
MB_YESNO有“是”和“否”按钮
MB_YESNOCANCEL有“是”、“否”和“取消”按钮
                                                                                                                       对话框类型表

                                                               

nType 取值显示图标
MB_ICONEXCLAMTION
MB_ICONWARNING
VS2010/MFC编程入门之十六(对话框:消息对话框)
MB_ICONASTERISK
MB_ICONINFORMATION
VS2010/MFC编程入门之十六(对话框:消息对话框)
MB_ICONQUESTIONVS2010/MFC编程入门之十六(对话框:消息对话框)
MB_ICONHAND
MB_ICONSTOP
MB_ICONERROR
VS2010/MFC编程入门之十六(对话框:消息对话框)

                                                                                                对话框图标表          

        如果想要设置nType的值为类型和图标的组合,可以像这样取值:MB_OKCANCEL | MB_ICONQUESTION。按位取或就可以了。

    2.AfxMessageBox()函数

       AfxMessageBox()的函数原型为:
       int AfxMessageBox(
           LPCTSTR lpszText,
           UINT nType = MB_OK,
           UINT nIDHelp = 0 
       );
    参数说明:
     lpszText :需要显示的消息字符串。同CWnd::MessageBox()函数

    nType同CWnd::MessageBox()函数

    nIDHelp:此消息的帮助的上下文ID。默认值为0,取0时表示要使用应用程序的默认帮助上下文。

二.CWnd::MessageBox()和AfxMessageBox()的返回值

     我们在调用了上面两个函数后,都可以弹出模态消息对话框。消息对话框关闭后,我们也都可以得到它们的返回值。两者的返回值就是用户在消息对话框上单击的按钮的ID,可以是以下值:

      IDABORT:单击“终止”按钮。
      IDCANCEL:单击“取消”按钮。
      IDIGNORE:单击“忽略”按钮。
      IDNO:单击“否”按钮。
      IDOK:单击“确定”按钮。
      IDRETRY:单击“重试”按钮。
      IDYES:单击“是”按钮。

 三.应用举例

     我们还是拿前面加法计算器的程序做例子。

     大家是否记得,在模态对话框及其弹出过程中我们修改了CAdditionDlg::OnBnClickedAddButton()函数,在点了“计算”按钮以后先弹出了一个模态对话框,询问用户是否确定要进行加法计算,并通过模态对话框DoModal函数的返回值判断用户选择了“确定”还是“取消”。这些功能很明显消息对话框完全能够实现,就使用消息对话框来替代原来的模态对话框。

     在非模态对话框的创建及显示中,注释了模态对话框的相关代码,加入了非模态对话框的创建和显示代码,我们在加入消息对话框之前将非模态对话框的代码也注释或删除掉,确保此函数中不再生成原来的模态对话框或非模态对话框。

    修改后的CAdditionDlg::OnBnClickedAddButton()函数如下:

void CAdditionDlg::OnBnClickedAddButton()   
{   
    // TODO: Add your control notification handler code here   
  
    INT_PTR nRes;   
   
    // 显示消息对话框   
    nRes = MessageBox(_T("您确定要进行加法计算吗?"), _T("加法计算器"), MB_OKCANCEL | MB_ICONQUESTION);   
    // 判断消息对话框返回值。如果为IDCANCEL就return,否则继续向下执行   
    if (IDCANCEL == nRes)   
        return;   
   
    // 将各控件中的数据保存到相应的变量   
    UpdateData(TRUE);   
   
    // 将被加数和加数的加和赋值给m_editSum   
    m_editSum = m_editSummand + m_editAddend;   
   
    // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值   
    UpdateData(FALSE);   
    // 设置属性对话框为向导对话框   
    //sheet.SetWizardMode();   
}
     编译运行,在运行结果对话框上点“计算”按钮弹出以下消息对话框:
                                               

     将MessageBox函数换为AfxMessageBox()函数,同时参数进行相应修改,运行下看看效果:

void CAdditionDlg::OnClickedAddButton()
{
	/*INT_PTR nRes;     //用于保存DoModel函数的返回值

	CTipDlg tipDlg;
	nRes = tipDlg.DoModal(); 
	if (IDCANCEL == nRes)
		return;*/
	
	// TODO:  在此添加控件通知处理程序代码
	/*if (NULL == m_pTipDlg)
	{
		m_pTipDlg = new CTipDlg();
		m_pTipDlg->Create(IDD_TIP_DIALOG, this);
	}
	m_pTipDlg->ShowWindow(SW_SHOW);*/

	INT_PTR nRes;
	nRes = AfxMessageBox(_T("您确定要进行加法计算吗?"),  MB_OKCANCEL | MB_ICONQUESTION,0);
	if (IDCANCEL == nRes)
		return;

	UpdateData(TRUE);
	m_editSum = m_editSummand + m_editAddend;
	UpdateData(FALSE);
}
                                          

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值