MFC 原以为很神奇的提示窗体…

原创 2013年12月02日 14:37:41

MessageBox(NULL,"text","title",BUTTON);

  所属头文件:windows.h

  参数title:string类型,指定消息对话框的标题。text:指定消息对话框中显示的消息,该参数可以是数值数据类型、字符串或boolean值。icon:Icon枚举类型,可选项,指定要在该对话框左侧显示的图标。button:Button枚举类型,可选项,指定显示在该对话框底部的按钮。default:数值型,可选项,指定作为缺省按钮的按钮编号,按钮编号自左向右依次计数,缺省值为1,如果该参数指定的编号超过了显示的按钮个数,那么MessageBox()函数将使用缺省值返回值Integer。函数执行成功时返回用户选择的按钮编号(例如1、2、3等),发生错误时返回-1。如果任何参数的值为NULL,MessageBox()函数返回NULL。

 

 

比如说,想弹出如图所示的窗口,命令为:

  MessageBox(NULL,"MessageBoxText(内容)","Title(标题)",MB_OK);

  如果想置顶

  int iRet;

  iRet=MessageBox(hwnd,"PLC报警!","对话框",MB_YESNO|MB_ICONQUESTION|MB_SYSTEMMODAL);

  或

  iRet=MessageBox(NULL,"PLC报警!","对话框",

  MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1|MB_SYSTEMMODAL);

  增加一个焦点在第一个按钮上更有效。

编辑本段函数功能

  该函数创建、显示、和操作一个消息框。消息框含有应用程序定义的消息和标题,加上预定义图标与Push(下按)按钮的任何组合。

编辑本段函数原型

  int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT UType);

编辑本段参数

  hWnd:标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。

  lpText:指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。

  lpCaption:指向一个以NULL结尾的、用于对话框标题的字符串的指针。

  uType:指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。

  指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。

  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_ICONEXCLAMATION:

  MB_ICONWARNING:一个惊叹号出现在消息框。

  MB_ICONINFORMATION:

  MB_ICONASTERISK:一个圆圈中小写字母i组成的图标出现在消息框。

  MB_ICONQUESTION:一个问题标记图标出现在消息框。

  MB_ICONSTOP:

  MB_ICONERROR:

  MB_ICONHAND:一个停止消息图标出现在消息框。

  指定下列标志中的一个来显不缺省的按钮:标志的含义如下。

  MB_DEFBUTTON1:第一个按钮为缺省按钮。如果MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4没有被指定,则MB_DEFBUTTON1为缺省值。

  MB_DEFBUTTON2;第二个按钮为缺省按钮。

  MB_DEFBUTTON3:第三个按钮为缺省按钮。

  MB_DEFBUTTON4:第四个按钮为缺省按钮。

  指定下列标志中的一个来显示对话框的形态:标志的含义如卜。

  MB_APPLMODAL:在hwnd参数标识的窗口中继续工作以前,用户一定响应消息框。但是,用户可以移动到其他线程的窗口且在这些窗口中工作。根据应用程序中窗口的层次机构,用户则以移动到线程内的其他窗口。所有母消息框的子窗口自动地失效,但是弹出窗口不是这样。如果既没有指定MB_SYSTEMMODAL也没有指定MB_TASKMOOAL,则MB_APPLMODAL为缺省的。

  MB_SYSTEMMODAL:除了消息框有WB_EX_TOPMOST类型,MB_APPLMODAL和MB_SYSTEMMODAL一样。用系统模态消息框来改变各种各样的用户,主要的损坏错误需要立即注意(例如,内存溢出)。如果不是那些与hwnd联系的窗口,此标志对用户对窗口的相互联系没有影响。

  MB_TASKMODAL:如果参数hwnd为NULL的话,那么除了所有属于当前线程高层次的窗口失效外,MB_TASKMODALL和MB_APPLMODAL一样。当调用应用程序或库没有一个可以得到的窗口句柄时,使用此标志。但仍需要阻止输入到调用线程的其他窗口,而不是搁置其他线程。

  另外,可以指定下列标志。

  MB_DEFAULT_DESKTOP_ONLy:接收输入的当前桌面一定是一个缺省桌面。否则,函数调用失败。缺省桌面是一个在用户已经纪录且以后应用程序在此上面运行的桌面。

  MB_HELP:把一个Help按钮增加到消息框。选择Help按钮或按F1产生一个Help事件。

  MB_RIGHT:文本为右调整。

  MB_RTLREADING:用在Hebrew和Arabic系统中从右到左的顺序显示消息和大写文本。

  MB_SETFOREGROUND:消息框变为前景窗口。在内部系统为消息个调用SetForegroundWindow函数。

  MB_TOPMOSI:消息框用WS_EX_TOPMOST窗口类型来创建MB_SERVICE_NOTIFICATION。

  Windows NT:调用程序是一个通知事件的用户的服务程序。函数在当前活动桌面上显示一个消息框,即使没有用户登记到计算机。

  如果设置了此参数,则hwnd参数一定为NULL。所以消息框可以出现在一个桌面上而不是桌面响应参数hwnd。

  对于Windows NT 4.0,MB_SERVICE_NOTIFICATION的值已经改变。对于旧的和新的值,请参见WINUSER。

  Windows NT 4.O通过把旧值映射到MessageBox和MessageBoxEx执行中的新值,为先存在的服务程序提供逆兼容。此映射只为有了版本数目的可执行程序而做。

  为了建立一个用MB_SERVICE_NOTIFICATION的服务器,且可以在Windows NT 3.X和Window NT 4.0上执行,可有两种选择。在连接时间,指定一个版本数目小于4.0的版本,或在连接时间,指定一个4.0版本。在运行时间,用函数GetVersionEx来检测系统版本,然后在Windows NT 3.X上用MB_SERVICE_NOTIFICATION_NT 3.x来运行和在Windows NT 4.0上用MB_SERVICE_NOTIFICAION来运行。MB_SERVCE_NOTIFICATION_NT3.x(WindowNT)此值响应于为WindowNT3.51的MB_SERVICE_NOTIFICAION

  定义的值。

编辑本段返回值

  如果没有足够的内存来创建消息框,则返回值为零。如果函数调用成功,则返回值为下列对话框返回的菜单项目值中的一个:

  IDABORT:Abort 按钮被选中。IDCANCEL:Cancel按钮被选中。IDIGNORE:Ignore按钮被选中。

  IDNO:NO按钮被选中。IDOK:OK按钮被选中。IDRETRY:RETRY按钮被选中。

  IDYES:YES按钮被选中。

  如果一个消息框有一个Cancel按钮,且如果Esc键被按下或Cancel键被选择,则函数返回IDCANCEL值。如果消息框没有Cancel按钮,则按Esc键没有作用。

  MessageBox的返回值默认定义 MessageBox的返回值其实都是整型的数,以下是默认的定义

  #define IDOK 1

  #define IDCANCEL 2

  #define IDABORT 3

  #define IDRETRY 4

  #define IDIGNORE 5

  #define IDYES 6

  #define IDNO 7

  #if(WINVER >= 0x0400)

  #define IDCLOSE 8

  #define IDHELP 9

编辑本段备注

  当创建一个系统模态消息框来表示系统在内存的低端中时,由lpTeXt和lpCaption参数指向的字符串不应该从一个资源文件中取出,因为试图装载此资源可能导致失败。

  当一个应用程序调用MessageBox,且为uType参数指定MB_ICONHAND和MB_SYSTEMMODAL标志时,系统不管可用内存为多少,直接显示结果消息框。当这些标志被指定,系统把消息框文本的长度局限于三行。系统不能自动截断要填到消息框的行,但是消息字符串一定含有回车换行,以在合适的位置换行。

  如果在对话框出现的的同时创建了消息框,则可使用对话框的句柄作为hwnd参数,hwnd参数不应该标识一个子窗口,例如对话框中的一个控制。

  Windows 95:系统可以支持最大达16364个窗口句柄。

  Windows CE:Windows CE 不支持uType参数的下列值:

  MB_STSTEMMODAL;MB_TASKMODAL;MB_HELP;MB_RTLREADING;MB_DEFAULT_DESKTOP_ONLY;

  MB_SERVICE_NOTIFICATION;MB_USERICON。

  不支持下列返回值:IDCLOSE;IDHELP。

编辑本段速查

  Windows:3.1及以上版本:Windows:95及以上版本;Windows:1.0及以上版本;头文件:Winuser.h;库文件:USer32.lib;URicode:在Windows NT上实现为Unicode和ANSI两种版本。

  ----------------------------------------------------------------------------------------------------------------------------------------------------

  在MFC里面MessageBox被封装成了更方便使用的另外一种形式:

  *************************************************************以下内容引自msdn***************************************************************

  int MessageBox(

  LPCTSTR lpszText,

  LPCTSTR lpszCaption = NULL,

  UINT nType = MB_OK

  );

  Parameters  lpszText

  Points to a CString object or null-terminated string containing the message to be displayed.

  lpszCaption

  Points to a CString object or null-terminated string to be used for the message-box caption. If lpszCaption is NULL, the default caption "Error" is used.

  nType

  Specifies the contents and behavior of the message box.

  Return Value

  Specifies the outcome of the function. It is 0 if there is not enough memory to create the message box.

  Remarks

  Use the global function AfxMessageBox instead of this member function to implement a message box in your application.

  The following shows the various system icons that can be used in a message box:

  

 

*************************************************************以上内容引自msdn***************************************************************

  由于这种形式的MessageBox使用起来更方便,所以更多时候程序员使用的是这一种形式的消息框

  下面的例子可以让我们对比两种函数的用法,两行代码的功能都是显示一个消息框,内容为“示例用法”

  ::MessageBox(NULL, "示例用法", "demo", MB_OK);

  MessageBox("示例用法");//采用了一些C++的语法特性使用消息框用起更顺手!

 

相关文章推荐

android 修改窗体标题的字体式样和…

自定义一个layout,然后通过requestWindowFeature和getWindow().setFeatureInt方法调用,     但是存在填充不满的问题,而且比较麻烦。   但是,...
  • r_512
  • r_512
  • 2014年04月24日 14:10
  • 382

mfc绘制提示窗体tag

  • 2008年09月10日 20:11
  • 39KB
  • 下载

MFC窗体实现 F11全屏切换 2种方法

下面介绍2种方法 实现 F11 全屏切换窗体  ......    相关函数  介绍  RepositionBars(0, AFX_IDW_PANE_FIRST, AFX_IDW_PANE_L...

Cocos2d-X 2.0嵌入MFC的子窗体的方法(1.0姐妹篇)

红孩儿的游戏编程之路 CSDN博客地址:http://blog.csdn.net/honghaier   红孩儿Cocos2d-X学习园地QQ群:249941957 加群写:Cocos2d-x ...

MFC界面编程1:GDI+实现不规则窗体

先来看一下实现的效果,下图中那个娃娃就是我们要实现的不规则窗体啦~ 1. GDI+配置及初始化(VS2013)VS2013上已经有了GDI+支持,不用单独下载安装包了。现在只需项目中引入gdiplu...

MFC窗体所有控件大小随窗体改变而改变

在一个基于MFC的Dialog上布置许多控件的时候,有时候在改变Dialog大小的时候控件不随着改变,现在告诉大家怎么让Dialog所有控件随Dialog改变而改变。   现在已最简单新建的对话框,...

如何修改 MFC Dialog 窗体的类名???

VS2005 的 MFC 工程(工程名: MobileLink),想要修改窗体的类名时,发现不是像设置窗口名一样调用一个函数可以实现的。(1) 修改窗体资源 RC 文件:(2) 修改 MobileLi...

将Cocos2d-X嵌入MFC的子窗体方法讲解

原文:http://blog.csdn.net/honghaier/article/details/7897077 我在之前的“如何利用Cocos2d-x开发一个游戏?”。在实际的项...
  • anypkv
  • anypkv
  • 2012年08月30日 16:34
  • 1050

mfc常用方法关于窗体

1. 在任务栏隐藏对话框     ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); 2. 使对话框为顶层窗口         SetWi...

mfc下创建多文档应用程序时获取当前被选中的子窗体指针

首先是参考了别人的资料 如下: 1) 在View中获得Doc指针 CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。 2) 在App中获得MainFram...
  • snoyfl
  • snoyfl
  • 2012年04月16日 09:40
  • 743
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 原以为很神奇的提示窗体…
举报原因:
原因补充:

(最多只允许输入30个字)