AfxMessageBox()和MessageBox()

一 函数原型及参数
 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
 hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
 Text:欲显示的信息字符串。
 Caption:对话框标题字符串。
 Type:对话框类型常量。
 该函数的返回值为整数,用于对话框按钮的识别。
 2、类型常量
 对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。
 (1)按钮组合常量
 MB_OK = $00000000;         //一个确定按钮
 MB_OKCANCEL = $00000001;      //一个确定按钮,一个取消按钮
 MB_ABORTRETRYIGNORE = $00000002;  //一个异常终止按钮,一个重试按钮,一个忽略按钮
 MB_YESNOCANCEL = $00000003;     //一个是按钮,一个否按钮,一个取消按钮
 MB_YESNO = $00000004;        //一个是按钮,一个否按钮
 MB_RETRYCANCEL = $00000005;     //一个重试按钮,一个取消按钮
 (2)缺省按钮常量
 MB_DEFBUTTON1 = $00000000;     //第一个按钮为缺省按钮
 MB_DEFBUTTON2 = $00000100;     //第二个按钮为缺省按钮
 MB_DEFBUTTON3 = $00000200;     //第三个按钮为缺省按钮
 MB_DEFBUTTON4 = $00000300;     //第四个按钮为缺省按钮
 (3)图标常量
 MB_ICONHAND = $00000010;        //“×”号图标
 MB_ICONQUESTION = $00000020;      //“?”号图标
 MB_ICONEXCLAMATION = $00000030;    //“!”号图标
 MB_ICONASTERISK = $00000040;      //“i”图标
 MB_USERICON = $00000080;        //用户图标
 MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标
 MB_ICONERROR = MB_ICONHAND;      //“×”号图标
 MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
 MB_ICONSTOP = MB_ICONHAND;       //“×”号图标
 (4)运行模式常量
 MB_APPLMODAL = $00000000;    //应用程序模式,在未结束对话框前也能切换到另一应用程序
 MB_SYSTEMMODAL = $00001000;   //系统模式,必须结束对话框后,才能做其他操作
 MB_TASKMODAL = $00002000;    //任务模式,在未结束对话框前也能切换到另一应用程序
 MB_HELP = $00004000;       //Help Button
 3、函数返回值
 0            //对话框建立失败
 IDOK = 1        //按确定按钮
 IDCANCEL = 2      //按取消按钮
 IDABOUT = 3       //按异常终止按钮
 IDRETRY = 4       //按重试按钮
 IDIGNORE = 5      //按忽略按钮
 IDYES = 6        //按是按钮
 IDNO = 7        //按否按钮 
二 用法

1. MessageBox("这是一个最简单的消息框!");
2. MessageBox("这是一个有标题的消息框!","标题"); 
3. MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL ); 
4. MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION ); 
5. MessageBox("这是一个两种属性的消息框!","标题", 
MB_ICONEXCLAMATION|MB_OKCANCEL );
6. if(MessageBox("一种常用的应用","标题
" ,MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
return;
注意:
以上消息框的用法是在CWnd的子类中的应用,如果不是,则要MessageBox(NULL,"ddd","ddd",MB_OK); 或MessageBox(hWnd,"ddd","ddd",MB_OK); hWnd为某窗口的句柄,或者直接用AfxMessageBox。

二、在MessageBox中显示变量的值

CString string;

string.format("%d%s",m_age, m_address); //将变量组装到字符串中

MessageBox(string,"消息框标题",消息框类型);
 
 

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为消息框中显示的按钮风格和图标风格的组合,可以采用|(或)操作符组合各种风格。
  按钮风格
  MB_ABORTRETRYIGNORE 消息框中显示Abort、Retry、Ignore按钮
  MB_OK 显示OK按钮
  MB_OKCANCEL 显示OK、Cancel按钮
  MB_RETRYCANCEL 显示Retry、Cancel按钮
  MB_YESNO 显示Yes、No按钮
  MB_YESNOCANCEL 示Yes、No、Cancel按钮
  图标风格
  MB_ICONINFORMATION 显示一个i图标,表示提示
  MB_ICONEXCLAMATION 显示一个惊叹号,表示警告
  MB_ICONSTOP 显示手形图标,表示警告或严重错误
  MB_ICONQUESTION 显示问号图标,表示疑问
  使用时,可以只调用AfxMessageBox(LPCTSTR lpszText);这样默认风格为AfxMessageBox(LPCTSTR lpszText,MB_OK|MB_ICONEXCLAMATION );

AfxMessageBox的返回值

  返回值有8种,如果内存不够,则返回0,否则返回以下值中的一种,分别对应相应的按钮被点击:
  IDABORT、IDCANCEL、IDIGNORE、IDNO、IDOK 、IDRETRY、IDYES。
  MSDN原文:
  Zero if there is not enough memory to display the message box; otherwise one of the following values is returned:
  IDABORT The Abort button was selected.
  IDCANCEL The Cancel button was selected.
  IDIGNORE The Ignore button was selected.
  IDNO The No button was selected.
  IDOK The OK button was selected.
  IDRETRY The Retry button was selected.
  IDYES The Yes button was selected.
  If a message box has a Cancel button, the IDCANCEL value will be returned if either the ESC key is pressed or the Cancel button is selected. If the message box has no Cancel button, pressing the ESC key has no effect.

AfxMessageBox()与MessageBox()的区别

  与AfxMessageBox类似的函数MessageBox,它是CWnd的类成员函数:
  int MessageBox( LPCTSTR lpszText,LPCTSTR lpszCaption = NULL,UINT nType = MB_OK );
  两个函数的区别:AfxMessageBox比MessageBox简单一些,因为它是一个全局函数所以不需要对应的一个窗口类,但是不能控制消息框标题,常用于调试程序时的内部数据输出或警告;MessageBox比较正式,常用在要提交的应用程序版本中,可以控制标题内容而不必采用含义不明的可执行文件名为标题。
  举例:
  AfxMessageBox("Are you sure?",MB_YESNO|MB_ICONQUESTION);
  int a = MessageBox(TEXT("是否确认删除?"),TEXT("Warning!!"),4);
  if(a==6)
  AfxMessageBox("Yes");
  else
  AfxMessageBox("No");
  (其中#define IDYES 6 #define IDNO 7)
  主要区别:
  1.MessageBox 如果在非CWnd类中使用则是API函数,使用起来非常不便,必须指定标题和样式
  否则使用CWnd类的函数,只需一个内容参数就可以了,AfxMessageBox和CWnd类成员函数类似,使用起来很方便,因为是Afx 基于框架的函数
  2.MessageBox是模态对话框,你不进行确认时程序不往下运行,它会阻塞你当前的线程为,除非你程序是多线程的程序,否则只有等待模态对话框被确认
  3、如果用MFC的话,请尽量使用afxmessagebox,因为这个全局的对话框最安全,也最方便。

  但是在WIN32 SDK的情况下只能使用MESSAGEBOX。

 

 

AfxMessageBox()和MessageBox用法

AfxMessageBox是MFC库提供的,提供了多种重载形式,AfxMessageBox是mfc的全局函数.

MessageBox是标准的windows   Api.

AfxMessageBox()函数在任何类里边都可以使用,而MessageBox()函数只能在CWnd类的继承类中使用。

AfxMessageBox()函数的参数没有MessageBox()函数的参数丰富,所以后者较前者灵活。

AfxMessageBox()不能控制消息框标题,常用于调试程序时的内部数据输出或警告;

MessageBox()比较正式,常用在要提交的应用程序版本中,可以控制标题内容而不必采用含义不明的可执行文件名为标题。

 

发布了7 篇原创文章 · 获赞 23 · 访问量 23万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章