MFC之MessageBox、AfxMessageBox用法
在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框.
在Win32 API程序中只有MessageBox这一种用法.
而在MFC中就有三各方法:
1.调用API中的MessageBox;
2.调用CWnd的成员函数MessageBox;
3.调用全局函数AfxMessageBox;
一 函数原型及参数
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,"消息框标题",消息框类型);
Win32 API 中MessageBox
举个简单例子
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPre,PSTR szCmdLine, int iCmdShow){
MessageBox(NULL,TEXT("hello world."),TEXT("Title"),0);//TEXT跟在MFC中常用的_T()一样,表示unicode字符
return 0;
}
消息对话框函数定义如下
MessageBox( HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType);
参数hWnd窗口句柄,一般用的较少.这例子中也没有涉及窗口就直接写NULL.
参数lpText是消息对话框中显示的内容
参数lpCaption是对话框的标题
参数uType,指定对话框按钮,图标.
按钮类型如下
这都是些在WinUser.h中定义的宏.MB是MessageBox Button的简称,后面的文字就表示有几个按钮,按钮上显示啥字.
比如MB_YESNOCANCEL 就是显示3个按钮,分别是yes, no , cancel
MB_OK
MB_OKCANCEL
MB_ABORTRETRYIGNORE
MB_YESNOCANCEL
MB_YESNO
MB_RETRYCANCEL
MB_CANCELTRYCONTINUE
图标显示
另外我还会常在对话框上面看到一个问号和警告的一些图标,可以通过如下宏指定
MB_ICONWARNING
MB_ICONERROR
MB_ICONINFORMATION
MB_ICONSTOP
默认焦点
现在按钮图标都有了你可能还会想到如果有几个按钮那默认的焦点是在哪个按钮.可以通过如下宏
MB_DEFBUTTON1
MB_DEFBUTTON2
MB_DEFBUTTON3
MB_DEFBUTTON4
数字代表从左到右按钮的位置
上面讲了按钮,图标,默认焦点的三个宏,但怎么一起用呢 ?通过|这个符号把它们组合起来就是.举例
MessageBox(NULL,TEXT("hello world."),TEXT("Title"),MB_OKCANCEL|MB_ICONINFORMATION|MB_DEFBUTTON1);
对话框函数返回值
最后你可能还会想如果用户点不同的按钮,我们怎么得到用户的选择信息呢? 很简单,就是通过函数MessageBox的返回值就判断.函数会有如下返回值
IDOK
IDCANCEL
IDABORT
IDRETRY
IDIGNORE
IDYES
IDNO
所以可以这样来判断
if( MessageBox(NULL,TEXT("hello world."),TEXT("Title"),MB_OKCANCEL) == IDOK)
{
}
AfxMessageBox用法
AfxMessageBox是MFC对MessageBox的封装.它有两个不同的重载函数.
1) int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT)-1)
其中nIDPrompt是字符串资源ID,也就是你在String Table中定义的字符串.
nType跟前面MessageBox中的完全一样.
hIDHelp是跟帮助信息相关的.它这里来个(UINT)-1,把一个-1转成无符号类型.我实在没搞懂啥意思,我都怀疑是不是它们写错了.应该直接写个0.
反正在这里默认值0也就表示使用默认的帮助文档信息.
使用举例AfxMessageBox(IDS_MSG)
2) int AFXAPI AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK,UINT nIDHelp = 0);
其中的lpszText是指定对话框要显示的内容.我们发现封装好处就是使用更简单,这里之所以简单是因为用到了默认参数,用户使用时不用老指定一堆参数.
不过我们发现有点扯蛋的事封装到最后竟然连指定对话框标题的参数都给能没了.你没法再去指定了,只能默认显示应用程序名字了.我估计当初那些写代码来封装的人肯定也纠结了番,这title名字嘛给默认指定一个啥才好啊?
估计肯定不会有满意的名字,最后干脆把这参数弄没了,去动态获取程序名字做标题了.
CWnd的MessageBox
只能继承自CWnd的类才能使用该函数:
int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK)
我们发现它也只是稍微封装了下API的MessageBox,只是少了个HWnd的参数,然后后面有两个参数有默认值.其他完全一样.
当然如果你想使用消息对话框更漂亮点,添加些额外的消息.那就直接整成个Dialog就行了.
MFC之MessageBox、AfxMessageBox用法的更多相关文章
- 转载:MFC之MessageBox、AfxMessageBox用法
在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框. 在Win32 API程序中只有MessageBox这一种用法. 而在MFC中就有三各方法: .调用API中的MessageBox: ...
- 【转】VC中MessageBox与AfxMessageBox用法与区别
原文网址:http://blog.csdn.net/holybin/article/details/28403109 一.MessageBox()用法 1.函数原型 Messagebox函数在Win3 ...
- VC中MessageBox与AfxMessageBox用法与区别
一.MessageBox()用法 1.函数原型 Messagebox函数在Win32 API和MFC里的定义有区别. Win32 API的定义如下: int WINAPI MessageBox( ...
- MFC总结之CListCtrl用法及技巧(二)
续第一篇:MFC总结之CListCtrl用法及技巧(一) http://blog.csdn.net/zwgdft/article/details/7560592 本篇重点介绍:禁止拖动表头.让第一列居 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- delphi中Application.MessageBox函数用法详解
delphi中Application.MessageBox函数用法详解 Application.MessageBox是TApplication的成员函数,声明如下:functionTApplicati ...
- MFC MessageBox AfxMessageBox
MessageBox 一.消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.1.MessageBox("这是一个最简单的消息框!");2.M ...
- MFC之MessageBox用法
一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口 ...
- MFC多线程各种线程用法 .
http://blog.csdn.net/qq61394323/article/details/9328301 一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleTh ...
随机推荐
- 【Winform-自定义控件】可以使用2种半透明的颜色来填充Button
制作一个自定义按钮,使用2种半透明的颜色来填充Button 1.添加一个自定义控件类,并改变基类,继承自Button public partial class CustomControl1 : But ...
- 在java下面配置xml导致idea编译失败
1.今天遇到一个问题在java配置dao.xml的时候导致,idea编译失败 然后把pom.xml上面的 <build> <resources> <resource> ...
- P2015 二叉苹果树,树形dp
P2015 二叉苹果树 题目大意:有一棵二叉树性质的苹果树,每一根树枝上都有着一些苹果,现在要去掉一些树枝,只留下q根树枝,要求保留最多的苹果数(去掉树枝后不一定是二叉树) 思路:一开始就很直接的想到 ...
- 洛谷 P1135 奇怪的电梯 (dfs)
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...
- mysql gis基本使用
# 插入空间数据 INSERT INTO `t_pot` VALUES ('1', '北京', POINT(116.401394,39.916042)); INSERT INTO `t_pot` VA ...
- TypeScript----函数与类
TypeScript中的类 传统的JavaScript程序使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员来讲就有些棘手,因为他们用的是基于类的继承并且对象是由类构建出来 ...
- 0.JQuery学习
jQuery 教程 jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. jQuery 简介 jQuery 库可以通过一行简单的标记被添加到网页中 ...
- 震惊!文科生如何三个月转行成为Java工程师?
点击上方“程序员江湖”,选择“置顶或者星标” 你关注的就是我关心的! 作者:以大橘为重链接:https://www.nowcoder.com/discuss/156087 楼主是19届应届生,去年在牛 ...
- Mybatis内置的日志工厂提供日志功能
Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具: SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging 具体选择哪个日志 ...
- Ubuntu——配置JDK
在Ubuntu下配置JDK环境 检查是否已经安装了JDK,执行以下命令: java -v 如果出现以下内容则说明没有安装: 程序 'java' 已包含在下列软件包中: * default-jre * ...