zoukankan      html  css  js  c++  java
  • AfxMessageBox和MessageBox差别

    假设用MFC的话,请尽量使用afxmessagebox,由于这个全局的对话框最安全,也最方便。   
    可是在WIN32 SDK的情况下仅仅能使用MESSAGEBOX。

    MessageBox()是Win32API函数.后者是mfc中的全局函数.在MFC中能用MessageBox()的地方都能用AfxMessageBox().

    afxmessagebox很多其它的时候是用于调试
    AfxMessageBox 比 MessageBox 方便!
       MessageBox 比 AfxMessageBox 灵活(如指定对话框标题等)!
       MessageBox 是 Win32 API ,能够直接使用;AfxMessageBox是MFC的API,须要MFC支持。

    假设用MFC的话,请尽量使用afxmessagebox,由于这个全局的对话框最安全,也最方便。可是在WIN32 SDK的情况下仅仅能使用MESSAGEBOX。

    Afx开头的都是全局函数,也就是说AfxMessageBox能够用于不论什么程序;而MessageBox仅仅能用在CWnd及其派生类中。

    MessageBox能够随意设置标题,而AfxMessageBox不能。

    两个函数的差别:

    AfxMessageBox是MFC库提供的全局函数,提供了多种重载形式,而MessageBox是标准的windows Api函数.

    AfxMessageBox()函数在不论什么类里边都能够使用,而MessageBox()函数仅仅能在CWnd类的继承类中使用。另外,AfxMessageBox()函数的參数没有MessageBox()函数的參数丰富,所以后者较前者灵活。
    AfxMessageBox不能控制消息框标题,经常使用于调试程序
    时的内部数据输出或警告;MessageBox比較正式,经常使用在要提交的应用程序版本号中,能够控制标题内容而不必採用含义不明的可运行文件名称为标题。


    下面分别介绍两者:

    AfxMessageBox的函数原型


    int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );
    int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) –1 );


    在第一种形式中,lpszText表示在消息框内部显示的文本,消息框的标题为应用程序的可运行文件名称(如Hello)。

    在另外一种形式中, nIDPrompt为要显示的文本字符串在字符串表中的ID。函数调用时会自己主动从字符串表中加载字符串并显示在消息框中。nType为消息框中显示的button风格和图标风格的组合,能够採用|(或)操作符组合各种风格。

    button风格
    MB_ABORTRETRYIGNORE 消息框中显示Abort、Retry、Ignorebutton
    MB_OK 显示OKbutton
    MB_OKCANCEL 显示OK、Cancelbutton
    MB_RETRYCANCEL 显示Retry、Cancelbutton
    MB_YESNO 显示Yes、Nobutton
    MB_YESNOCANCEL 示Yes、No、Cancelbutton
    图标风格
    MB_ICONINFORMATION 显示一个i图标,表示提示
    MB_ICONEXCLAMATION 显示一个惊叹号,表示警告
    MB_ICONSTOP 显示手形图标,表示警告或严重错误
    MB_ICONQUESTION 显示问号图标,表示疑问

    与AfxMessageBox相似的函数MessageBox,它是CWnd的类成员函数:


    MessageBox的使用:

    int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL,UINT nType =MB_OK );

    參数:

    lpszText: 消息正文
    lpszCaption:消息框标题(默认没有)
    nType:消息框的风格

     

    举例:

    AfxMessageBox("Are you sure?",MB_YESNO|MB_ICONQUESTION);
    int a = MessageBox( "是否确认删除?" , "Warning!!",MB_YESNO|MB_ICONWARNING);
    if (a == IDYES)
    AfxMessageBox("Yes");
    else
    AfxMessageBox("No");


     

    Messagebox函数在API和MFC里的差别:

    API的定义例如以下
    int MessageBox(
      HWND hWnd,          // handle of owner window
      LPCTSTR lpText,     // address of text in message box
      LPCTSTR lpCaption, // address of title of message box
      UINT uType          // style of message box
    );

    MFC里的定义例如以下
    CWnd::MessageBox
    int MessageBox(

      LPCTSTR lpszText,

      LPCTSTR lpszCaption = NULL,

      UINT nType = MB_OK

    );

    所以说,MFC里仅仅是少了第一个參数,同一时候第三和第四都有默认值了,这就是它们的差别,其它的同样

    同一时候在MFC的窗口类里要调用API的那个,在写成例如以下:
    ::MessageBox(NULL, "msg", "caption", MB_OK);

  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4313084.html
Copyright © 2011-2022 走看看