MFC学习笔记(二):消息对话框的两个函数用法与区别

MFC提供了两个函数可以直接生成指定风格的消息对话框,这两个函数就是CWnd类的成员函数MessageBox()和全局函数AfxMessageBox()。

一、CWnd::MessageBox()函数

       1. 函数原型

       int MessageBox(
           LPCTSTR lpszText,             //lpszText:需要显示的消息字符串。
           LPCTSTR lpszCaption = NULL,        //lpszCaption:消息对话框的标题字符串。默认值为NULL。
           UINT nType = MB_OK          //nType:消息对话框的风格和属性。默认为MB_OK风格,即只有“确定”按钮
       );

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

          2.用法

          MessageBox("这是一个两种属性的消息框!","标题", MB_ICONEXCLAMATION|MB_OKCANCEL );

二、AfxMessageBox()函数

        1.  函数原型:

       int AfxMessageBox(
           LPCTSTR lpszText,        //lpszText:同CWnd::MessageBox()函数
           UINT nType = MB_OK,        //lpszText:同CWnd::MessageBox()函数
           UINT nIDHelp = 0          //此消息的帮助的上下文ID。默认值为0
       );

        2.  用法:

        使用时,可以直接调用AfxMessageBox(LPCTSTR lpszText);

        默认风格为AfxMessageBox(LPCTSTR lpszText,MB_OK|MB_ICONEXCLAMATION );

        也可以通过nType指定风格。

三、返回值

          两者的返回值就是用户在消息对话框上单击的按钮的ID,可以是以下值:
                IDABORT:单击“终止”按钮。
                IDCANCEL:单击“取消”按钮。
                IDIGNORE:单击“忽略”按钮。
                IDNO:单击“否”按钮。
                IDOK:单击“确定”按钮。
                IDRETRY:单击“重试”按钮。
                IDYES:单击“是”按钮。

四、AfxMessageBox()与MessageBox()的区别

        1、MessageBox()是标准的Win32 API函数,可以直接使用;AfxMessageBox是MFC库提供的全局函数,提供了多种重载形式,需要MFC框架支持(带有afx都是基于框架的函数)。
              所以在Win32 SDK的情况下,只能使用MessageBox(此时MessageBox采用Win 32中的原型,hWnd设为NULL);

             在MFC中,两个都能使用(此时MessageBox采用MFC中的原型,在CWnd类或者子类中使用),但是最好尽量使用AfxMessageBox,原因如下:
           (1)在MFC中能用MessageBox()的地方都能用AfxMessageBox(),也就是说完全可以使用后者代替前者;
           (2)AfxMessageBox这个全局函数最安全,也最简单方便,因为它是一个全局函数所以不需要对应的一个窗口类。

        2、MessageBox较正式,常用在要提交的应用程序版本中,可控制标题内容,而不必采用含义不明的可执行文件名为标题;
              AfxMessageBox不能控制消息框标题,常用于调试程序时的内部数据输出或警告(更多的时候是用于调试)。

        3、MessageBox在Win 32中的原型,如果第一个参数hWnd设置为NULL,则生成的非模态对话框;

              AfxMessageBox生成的是模态对话框,你不进行确认时程序不往下运行,它会阻塞你当前的线程,除非你程序是多线程的程序,否则只有等待模态对话框被确认。

五、举例

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


以上整理自

1、鸡啄米:http://www.jizhuomi.com/software/171.html——VS2010/MFC编程入门之十六(对话框:消息对话框)

2、http://blog.csdn.net/holybin/article/details/28403109

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值