MessageBox函数在VC6与VS2010中的调用
来源:互联网 发布:java se深入浅出 编辑:程序博客网 时间:2024/05/29 15:31
MessageBox这个函数可以在VC里面显示一个标准对话框,是比较常用的一个信息对话框,其不仅能够定义显示的信息内容、信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框。
函数原型及参数
int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT, uType);
参数含义:
HWND hWnd —— 父窗口的句柄。(在使用的时候发现在CView类里面不要填这一项,但是如果是再其他的类中,就要填写)
LPCTSTR lpText —— 对话框的内容
LPCTSTR lpCaption —— 对话框的标题
UINT uType ——对话框类型常量(窗口的风格)
该函数的返回值为整数,用于对话框按钮的识别。
对于Messagebox("hello");,它在vc6.0中运行是没有问题的,但在vs2005里编译却遇到了以下的错误:
d:\my documents\visual studio 2005\projects\mfccc\mfc\dlg.cpp(48) : error C2664: 'CWnd::MessageBoxW' : cannot convert parameter 1 from 'const char [6]' to 'LPCTSTR'
原因是这样的:在VS2005中默认的类型是Unicode,而"hello"是ASCII,而非Unicode,因此会出错。
解决方式:Messagebox(_T("hello"));或者Messagebox(TEXT("hello"));或MessageBox(L"hello");
注:_T("hello")在宽字符集的工程里等于L"hello";_T("hello")在ASCII的工程里等于"hello"。
在宽字符集的工程里,表达的意思一样,在ascii的工程里,不同。
_T("hello, world")在宽字符集的工程里等于L"hello, world"
_T("hello, world")在ascii的工程里等于"hello, world"
是通过条件编译实现的。
#ifdef unicode
#define _T(x) Lx
因为你的程序在UNICODE(宽字节)字符集下运行,如果调用了 MessageBox ,实际上调用的是 MessageBoxW 函数; 如果你的程序在 ANSI 字符集运行,调用 MessageBox ,就相当于调用 MessageBoxA; 其中 MessageBoxW 支持 UNICODE; MessageBoxA 支持ANSI;
UNICODE与ANSI 有什么区别呢?简单的说,UNICODE版的字符比ANSI 的内存占用大,比如:
Win32程式中出现的标准定义 char 占一个字节,而 char 的UNICODE版被定义成这样:typedef unsigned short wchar_t ;占2个字节。
所以有字符做参数的函数相应也用两个版本了。
宽字节版函数中带有字符参数的都应该用宽字节版的字符参数,将字符串转换成宽字节很容易:
比如将 "Application Error" 转换成UNICODE版,只需在它前面使用一个定义了的宏,如下:
L"Application Error" ,或者TEXT("Application Error" )都可以
所以你应将 MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP);
改为:
- MessageBox函数在VC6与VS2010中的调用
- VC6中调用.dll文件中的函数
- 关于在MFC中调用AfxMessageBox、CWnd::MessageBox与::MessageBox的区别
- tesseract OCR库在vs2010中的调用
- tesseract OCR库在vs2010中的调用
- VS2010 MFC MessageBox 消息函数出错
- 在VS2008,VS2010,VC6.0MFC中嵌入MATLAB的command window,调用MATLAB引擎
- 关于javascript中||与&&在函数调用中的使用
- VC++中的MessageBox()与AfxMessageBox()
- VC++中的MessageBox()与AfxMessageBox()
- VC2008和VC6.0的一点差别,如MessageBox函数
- C++模板函数——VC6下通过,在VS2010下报错 error C2668
- VC6不支持模板函数在cpp文件中的实现
- VC6不支持模板函数在cpp文件中的实现
- vue编写messageBox,使用函数调用
- JNI------Java调用C语言中的MessageBox
- 在VS2010中调用MATLAB内建函数
- 在vc6里调用WebService
- Leetcode Oj Reverse Integer
- 2014年打字67月份开始,本博客账号被人非法盗用,发大量博文,本人在此慎重承诺
- shell命令find删除修改后带尾巴的重复的文件
- gcc的依赖安装顺序
- Android进阶篇之ListView、GridView以及ScrollView实现按钮控制滚动
- MessageBox函数在VC6与VS2010中的调用
- android notify() notifyAll()的区别
- Android联系人Contacts详解
- SRTP with SIP
- 获取view的高和宽
- POJ 2632 Crashing Robots(模拟)
- 数据结构---单链表
- 马云凭啥在达沃斯大出风头 ?
- Python编辑器 Sublime text2 +JEDI(python自动补全插件)