首页 > 编程知识 正文

ultraedit使用教程视频(VS中MessageBox与AfxMessageBox用法与区别)

时间:2023-05-06 05:26:32 阅读:123963 作者:1950

另一方面,MessageBox ) )用法1、函数原型MessageBox函数在Win32 API和MFC上的定义存在差异。

Win32 API的定义如下:

intwinapimessagebox(hwndhwnd,//handleofownerwindowlpctstrlptext,//addressoftextinmessageboxlpctstrlpcaption,//addred

int cwnd :3360消息箱(lpctstrlpsztext,LPCTSTR lpszCaption=NULL,UINT nType=MB_OK ); 所以,在MFC中,第一个参数只是减少了,第三个参数和第四个参数都有默认值。

2、其中各项参数: hWnd为消息框的所有窗口。 如果此参数为NULL,则消息框中没有窗口。

lpText和lpszText是消息框的内容。

lpCaption和lpszCaption是消息框的标题。

uType和nType指定一组位标志,确定对话框的内容和行为(按钮、图标、形态和其他)。 此参数可以是以下标志组中的标志的组合:

(1)按钮

MB_OK :默认值。 有确认按钮qfdjw。

MB _ yesno :有是和qfdjw。

MB _ abortretryignore :有abort、retry和ignore

MB_YESNOCANCEL :消息框中有三个按钮: Yes、No和Cancel

MB _ retry cancel :有retry“重试”和cancel“取消”

MB_OKCANCEL :消息框中有两个按钮: OK和Cancel

)2)图标

MB_ICONEXCLAMATION :在消息框中显示感叹号

MB_ICONWARNING :消息框中显示了感叹号

MB_ICONINFORMATION :在消息框中显示一个由小写字母I组成的图标

MB_ICONASTERISK :在消息框中显示一个由小写字母I组成的图标

MB_ICONQUESTION :在消息框中显示问题标记图标

MB_ICONSTOP :在消息框中显示停止消息图标

MB_ICONERROR :在消息框中显示停止消息图标

MB_ICONHAND :在消息框中显示停止消息图标

)3)形态

MB _ appl modal :在hwnd参数指定的窗口中继续操作之前,请始终响应消息框。 但是,用户可以导航到其他线程的窗口进行工作。 根据APP应用程序中窗口的层次结构,用户会移动到线程中的另一个窗口。 所有父消息框的子窗口都将自动禁用,但弹出窗口则不然。 如果同时未指定MB_SYSTEMMODAL和MB_TASKMOOAL,则MB_APPLMODAL为缺省值。

MB_SYSTEMMODAL :除了消息框中有WB_EX_TOPMOST类型外,MB_APPLMODAL和MB_SYSTEMMODAL相同。 使用系统模态消息框修改各种用户。 必须立即注意主要的损坏错误。 例如,内存溢出)。 如果不是联系hwnd的联系人,则此标志不影响与用户联系人的交互联系。

MB_TASKMODAL :如果参数hwnd为NULL,则MB_TASKMODALL与MB_APPLMODAL相同,属于当前线程高级别的所有窗口都将被禁用。 如果没有可用于调用的APP应用程序或库的窗口句柄,请使用此标志。 但是,必须阻止在其他窗口中输入调用线程,而不是保留其他线程。

(四)其他

MB_DEFAULT_DESKTOP_ONLY :接收输入的当前桌面必须是默认桌面。 否则,函数调用将失败。 预设桌面是使用者记录的桌面,稍后由APP应用程式执行。

MB_HELP :在消息框中添加Help按钮。 选择Help按钮或按F1键生成Help事件。

MB_RIGHT :文本向右调整

MB _ RTL reading :按从右到左的顺序显示Hebrew和Arabic系统中使用的消息和大写文本。

MB_SETFOREGROUND :消息框将更改为前景窗口。 在内部系统上对消息调用SetForegroundWindow函数。

MB_TOPMOSI :消息框在WS_EX_TOPMOST窗口类型中创建MB_SERVICE_NOTIFICATION。

3、返回值(返回值-用户选择按钮) :

idOK(1) :确定

idCANCEL(2):cancel

idABORT(3):Abort

id恢复(4) :恢复

idIGNORE(5):ignore

id是(6) :是

idNO(7)否

4、使用方法有很多种。 例如:

(1)应用于CWnd类或子类(MFC原型) ) ) ) ) )。

1.Messa

geBox(“这是一个最简单的消息框!”);
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;
(2)不在CWnd类或者子类中的应用(Win32原型)

::MessageBox(NULL, “msg”, “caption”, MB_OK);
::MessageBox(hWnd, “msg”, “caption”, MB_OK);
其中hWnd为某窗口的句柄,或者直接用AfxMessageBox()函数。

二、AfxMessageBox()的用法

1、它是MFC中的全局函数,函数原型有两种:

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

2、其中各个参数:

第一种中lpszText表示在消息框内部显示的文本,消息框的标题为应用程序的可执行文件名(如Hello);第二种中,nIDPrompt为要显示的文本字符串在字符串表中的ID。函数调用时会自动从字符串表中载入字符串并显示在消息框中。nType为消息框中显示的按钮风格和图标风格的组合,可以采用|(或)操作符组合各种风格。

(1)按钮风格

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按钮

(2)图标风格

MB_ICONINFORMATION 显示一个i图标,表示提示

MB_ICONEXCLAMATION 显示一个惊叹号,表示警告

MB_ICONSTOP 显示手形图标,表示警告或严重错误

MB_ICONQUESTION 显示问号图标,表示疑问

3、返回值:

返回值有8种,如果内存不够,则返回0,否则返回以下值中的一种,分别对应相应的按钮被点击:
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.

注意:如果消息框有cancel按钮,那么按下ESC按键或者点击cancel按钮后将返回IDCANCEL;如果消息框没有cancel按钮,那么按下ESC键将不起作用。

4、使用:

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

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

也可以通过nType指定风格。

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

区别一:

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这个全局函数最安全,也最简单方便,因为它是一个全局函数所以不需要对应的一个窗口类。

区别二:

MessageBox比较正式,常用在要提交的应用程序版本中,可以控制标题内容,而不必采用含义不明的可执行文件名为标题(从这点上说,MessageBox比 AfxMessageBox 灵活,它可以任意设置标题,而AfxMessageBox不能)。

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

区别三:

MessageBox在Win 32中的原型,如果第一个参数hWnd设置为NULL,则生成的非模态对话框;AfxMessageBox生成的是模态对话框,你不进行确认时程序不往下运行,它会阻塞你当前的线程,除非你程序是多线程的程序,否则只有等待模态对话框被确认。

附:VC中可调用的函数大致可分三类

1、类自己的函数,只对类自己的数据成员有作用。例如MFC中 MessageBox的原型,它是属于 CWnd 类的成员函数,只能在 CWnd 和CWnd的派生类的对象中调用;

2、AFX小组在设计Application Framworks 时设计的全局函数,多冠在Afx前缀,在包含了MFC库/框架的工程中可用。例如AfxMessageBox可在任何地方调用。

3、Windows API的全局函数。对所有Windows平台下的程序设计都可以调用,如Vb,Vc,Dephi等等。例如Win32中MessageBox的原型::MessageBox(),它是Win32 API的全局函数。

这里注意1和3中MessageBox的不同原型:就是1中MessageBox的原型要比3的少一个参数,即窗口句柄hWnd,这个句柄是通过 this 指针曲折转换得到的,不需要我们关心。

转自:原文链接:https://blog.csdn.net/holybin/article/details/28403109

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。