当前位置:网站首页>AfxMessageBox和MessageBox的用法
AfxMessageBox和MessageBox的用法
2022-07-01 03:19:00 【三贝勒文子】
目录
三、 AfxMessageBox和MessageBox的区别
一、AfxMessageBox
AfxMessageBox是一种函数原型,特点是应用程序的可执行文件,功能是消息框内部显示的文本,AfxMessageBox和CWnd类成员函数类似,使用起来很方便,因为是Afx 基于框架的函数。
对于AfxMessageBox有两种定义:
1. 函数定义原型
定义一:
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. 参数介绍
[1] 参数1
在第一种形式中,lpszText表示弹窗内容,弹窗标题为应用程序EXE可执行文件名(如Hello)。
在第二种形式中,nIDPrompt为文本字符串ID。函数调用时会自动从字符串表中根据ID载入字符串显示。
[2] nType
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按钮 |
例子1:MB_ABORTRETRYIGNORE
int result = AfxMessageBox(L"三贝勒文子", MB_ABORTRETRYIGNORE); // 中止,重试,忽略
Show(result); /* 点击中止 返回3, 点击重试 返回4 点击忽略 返回5 */运行结果:

例子2:MB_OK
int result = AfxMessageBox(L"三贝勒文子", MB_OK);
Show(result); /* 点击确定 返回1 */运行结果:

例子3:MB_OKCANCEL
int result = AfxMessageBox(L"三贝勒文子", MB_OKCANCEL);
Show(result); /* 点击确定 返回1, 点击取消 返回2 */运行结果:

例子4:MB_RETRYCANCEL
int result = AfxMessageBox(L"三贝勒文子", MB_RETRYCANCEL);
Show(result); /* 点击重试 返回4, 点击否 返回7 点击取消 返回2 */运行结果:

例子5:MB_YESNO
int result = AfxMessageBox(L"三贝勒文子", MB_YESNO);
Show(result); /* 点击是 返回6, 点击否 返回7 */运行结果:

例子6:MB_YESNOCANCEL
int result = AfxMessageBox(L"三贝勒文子", MB_YESNOCANCEL);
Show(result); /* 点击是 返回6, 点击否 返回7 点击取消 返回2 */运行结果:

[3] nIDHelp
图标风格
| MB_ICONINFORMATION | 显示一个i图标,表示提示 |
| MB_ICONEXCLAMATION | 显示一个惊叹号,表示警告 |
| MB_ICONSTOP | 显示手形图标,表示警告或严重错误 |
| MB_ICONQUESTION | 显示问号图标,表示疑问 |
例子1:MB_ICONINFORMATION
AfxMessageBox(L"三贝勒文子", MB_ICONINFORMATION);运行结果:

例子2:MB_ICONEXCLAMATION
AfxMessageBox(L"三贝勒文子", MB_ICONEXCLAMATION);运行结果:

例子3:MB_ICONSTOP
AfxMessageBox(L"三贝勒文子", MB_ICONSTOP);运行结果:

例子4:MB_ICONQUESTION
AfxMessageBox(L"三贝勒文子", MB_ICONQUESTION);运行结果:

注意事项:
如果我们只调用:
AfxMessageBox(LPCTSTR lpszText);系统就会默认为:
AfxMessageBox(LPCTSTR lpszText,MB_OK|MB_ICONEXCLAMATION );3. 返回值
返回值有8种,如果内存不够,则返回0,否则返回以下值中的一种,分别对应相应的按钮被点击:IDABORT、IDCANCEL、IDIGNORE、IDNO、IDOK 、IDRETRY、IDYES。各种返回值的数值如下表:
| ID | 选择结果 | 返回值 |
| IDOK | OK | 1 |
| IDCANCEL | CANCEL | 2 |
| IDABORT | ABORT | 3 |
| IDRETRY | RETRY | 4 |
| IDIGNORE | IGNORE | 5 |
| IDYES | YES | 6 |
| IDNO | NO | 7 |
二、MessageBox
MessageBox指的是显示一个模态对话框,其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息,如状态或错误的信息。消息框中返回一个整数值,该值指示用户单击了哪个按钮。
1. 定义
定义一:
WINUSERAPI int WINAPI MessageBoxA(
HWND hWnd,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType);定义二:
WINUSERAPI int WINAPI MessageBoxW(
HWND hWnd,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType);2. 参数介绍
[1] hWnd
此参数代表消息框拥有的窗口。如果为NULL,则消息框没有拥有窗口。
[2] lpText
消息框的内容。如果使用了Unicode库,则把文本变成:
TEXT(/*sometext*/)[3] lpCaption
消息框的标题。如果使用了Unicode库,则把文本变成:
TEXT(/*sometext*/)例子1: MessageBox
MessageBox(TEXT("三贝勒文子"), TEXT("Serven警告"), MB_TASKMODAL);运行结果:

可以自己设定标题
[4] uType
指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。指定下列标志中的一个来显示消息框中的按钮以及图标。
按钮参数 | 含义 |
MB_OK | 默认值。有一个确认按钮在里面。 |
MB_YESNO | 有是和否在里面。 |
MB_ABORTRETRYIGNORE | 有Abort(放弃),Retry(重试)和Ignore(跳过) |
MB_YESNOCANCEL | 消息框含有三个按钮:Yes,No和Cancel |
MB_RETRYCANCEL | 有Retry(重试)和Cancel(取消) |
MB_OKCANCEL | 消息框含有两个按钮:OK和Cancel |
图标:
参数 | 含义 |
MB_ICONEXCLAMATION | 一个惊叹号出现在消息框 |
MB_ICONWARNING | 一个惊叹号出现在消息框 |
MB_ICONINFORMATION | 一个圆圈中小写字母i组成的图标出现在消息框 |
MB_ICONASTERISK | 一个圆圈中小写字母i组成的图标出现在消息框 |
MB_ICONQUESTION | 一个问题标记图标出现在消息框 |
MB_ICONSTOP | 一个停止消息图标出现在消息框 |
MB_ICONERROR | 一个停止消息图标出现在消息框 |
MB_ICONHAND | 一个停止消息图标出现在消息框 |
形态:
参数 | 含义 |
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_TOPMOST | 消息框用WS_EX_TOPMOST窗口类型来创建MB_SERVICE_NOTIFICATION。 |
返回值:
| ID | 选择结果 | 返回值 |
| IDOK | OK | 1 |
| IDCANCEL | CANCEL | 2 |
| IDABORT | ABORT | 3 |
| IDRETRY | RETRY | 4 |
| IDIGNORE | IGNORE | 5 |
| IDYES | YES | 6 |
| IDNO | NO | 7 |
我们来看看源代码怎么定义上面这些的:
//按钮
#define MB_OK 0x00000000L
#define MB_OKCANCEL 0x00000001L
#define MB_ABORTRETRYIGNORE 0x00000002L
#define MB_YESNOCANCEL 0x00000003L
#define MB_YESNO 0x00000004L
#define MB_RETRYCANCEL 0x00000005L
//图标
#define MB_ICONHAND 0x00000010L
#define MB_ICONQUESTION 0x00000020L
#define MB_ICONEXCLAMATION 0x00000030L
#define MB_ICONASTERISK 0x00000040L
#define MB_USERICON 0x00000080L
//图标声明
#define MB_ICONWARNINGMB_ICONEXCLAMATION
#define MB_ICONERRORMB_ICONHAND
#define MB_ICONINFORMATIONMB_ICONASTERISK
#define MB_ICONSTOPMB_ICONHAND
//默认按钮声明
#define MB_DEFBUTTON1 0x00000000L
#define MB_DEFBUTTON2 0x00000100L
#define MB_DEFBUTTON3 0x00000200L
#if(WINVER>=0x0400)
#define MB_DEFBUTTON4 0x00000300L//如果支持第四个MessageBox按钮的话,定义DEFButton4
#endif
//对话框模型定义
#define MB_APPLMODAL 0x00000000L
#define MB_SYSTEMMODAL 0x00001000L
#define MB_TASKMODAL 0x00002000L
#define MB_HELP 0x00004000L//是否拥有帮助按钮
//特殊声明
#define MB_NOFOCUS 0x00008000L
#define MB_SETFOREGROUND 0x00010000L
#define MB_DEFAULT_DESKTOP_ONLY 0x00020000L
#define MB_TOPMOST 0x00040000L
#define MB_RIGHT 0x00080000L
#define MB_RTLREADING 0x00100000L三、 AfxMessageBox和MessageBox的区别
讲了这么多,那么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比较正式,常用在要提交的应用程序版本中,可以控制标题内容,而不必采用含义不明的可执行文件名为标题(从这点上说,MessageBox比 AfxMessageBox 灵活,它可以任意设置标题,而AfxMessageBox不能)。
AfxMessageBox不能控制消息框标题,常用于调试程序时的内部数据输出或警告(更多的时候是用于调试)。
3. 区别三
MessageBox在Win 32中的原型,如果第一个参数hWnd设置为NULL,则生成的非模态对话框;AfxMessageBox生成的是模态对话框,你不进行确认时程序不往下运行,它会阻塞你当前的线程,除非你程序是多线程的程序,否则只有等待模态对话框被确认。
边栏推荐
- pytorch中的双线性插值上采样(Bilinear Upsampling)、F.upsample_bilinear
- Redis tutorial
- pytorch训练深度学习网络设置cuda指定的GPU可见
- 还在浪费脑细胞自学吗,这份面试笔记绝对是C站天花板
- Leetcode 1482 guess, how about this question?
- Split(), split(), slice(), can't you tell?
- RSN:Learning to Exploit Long-term Relational Dependencies in Knowledge Graphs
- The shell script uses two bars to receive external parameters
- Detailed list of errors related to twincat3 ads of Beifu
- How to achieve 0 error (s) and 0 warning (s) in keil5
猜你喜欢

IPv4 and IPv6, LAN and WAN, gateway, public IP and private IP, IP address, subnet mask, network segment, network number, host number, network address, host address, and IP segment / number - what does

Appium自动化测试基础--补充:C/S架构和B/S架构说明

C#实现基于广度优先BFS求解无权图最短路径----完整程序展示

排序链表(归并排序)

Research on target recognition and tracking based on 3D laser point cloud

Ridge regression and lasso regression

TEC: Knowledge Graph Embedding with Triple Context

岭回归和lasso回归

Explain spark operation mode in detail (local+standalone+yarn)

深度学习中的随机种子torch.manual_seed(number)、torch.cuda.manual_seed(number)
随机推荐
C#实现图的深度优先遍历--非递归代码
The value of the second servo encoder is linked to the NC virtual axis of Beifu PLC for display
Leetcode 1482 guess, how about this question?
Leetcode:剑指 Offer 59 - I. 滑动窗口的最大值
文件上传下载
Edlines: a real time line segment detector with a false detection control
pytest-fixture
JUC learning
JS daily development tips (continuous update)
Explain spark operation mode in detail (local+standalone+yarn)
Server rendering technology JSP
5、【WebGIS实战】软件操作篇——服务发布及权限管理
gcc使用、Makefile总结
C语言的sem_t变量类型
数据库DDL(Data Definition Language,数据定义语言)知识点
Basic concepts of database
衡量两个向量相似度的方法:余弦相似度、pytorch 求余弦相似度:torch.nn.CosineSimilarity(dim=1, eps=1e-08)
[us match preparation] complete introduction to word editing formula
打包iso文件的话,怎样使用hybrid格式输出?isohybrid:command not found
Leetcode: offer 59 - I. maximum value of sliding window