消息对话框(MessageBox)
来源:互联网 发布:淘宝同行恶意差评 编辑:程序博客网 时间:2024/05/22 06:31
在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框.
在Win32 API程序中只有MessageBox这一种用法.
而在MFC中就有三各方法:
1.调用API中的MessageBox 2.调用CWnd的成员函数MessageBox 3.调用全局函数AfxMessageBox
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
所以可以这样来判断
int m_msgResult;m_msgResult = MessageBox(_T("相机初始化错误!\n无法正常连接相机,请检查相机连接及驱动!"),_T("相机初始化"),MB_ABORTRETRYIGNORE|MB_ICONWARNING|MB_DEFBUTTON1);if (m_msgResult == IDIGNORE){return FALSE;}else if (m_msgResult == IDABORT){EndDialog(-1);return FALSE;}else if (m_msgResult == IDRETRY){InitCamera();}else{EndDialog(1);return FALSE;}
</pre><h2></h2><h5>AfxMessageBox用法</h5><h5><p>AfxMessageBox是MFC对MessageBox的封装.它有两个不同的重载函数.</p></h5><pre>
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就行了.
- C#.消息对话框MessageBox
- C# MessageBox 消息对话框
- 消息对话框(MessageBox)
- C# MessageBox 消息对话框
- C#中的MessageBox消息对话框
- C#中的MessageBox消息对话框
- 消息对话框(MessageBox)用法介绍
- C#中的MessageBox消息对话框
- C#中的MessageBox消息对话框
- C#中的MessageBox消息对话框
- C#中的MessageBox消息对话框
- C#中的MessageBox消息对话框
- C#中的MessageBox消息对话框
- MessageBox对话框
- ExtJs4 笔记(6) Ext.MessageBox 消息对话框
- ExtJs4 笔记(6) Ext.MessageBox 消息对话框
- VC中MessageBox消息对话框的使用方法总结
- ExtJs4 笔记(6) Ext.MessageBox 消息对话框
- android 如何修改系统语言
- linux下logrotate 配置和理解
- Grep命令详解-9个经典使用场景
- iOS dismiss后 原控制器界面上移解决
- 十四、CentOS下J2EE运行环境部署说明
- 消息对话框(MessageBox)
- ios验证常用正则表达式的使用
- 在webView上添加视图
- eclipse发布web项目到tomcat
- solr 的客户端调用solrj 建索引+分页查询
- ThreadLocal与Synchronized的使用场景
- HTML和iOS的交互,点击html中按钮,ios进行原生方法调用,及ios传值到HTML
- hibernate缓存机制详细分析
- 安装Oracle客户端后,eclipse启动不了;启动之后,Override报错