MessageBox这个函数可以在VC里面显示一个标准对话框,是比较常用的一个信息对话框,其不仅能够定义显示的信息内容、信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框。
函数原型及参数
int MessageBox(HWND hWnd, LPCTSTRlpText, LPCTSTR lpCaption, UINT, uType);
参数含义:
HWND hWnd ——父窗口的句柄。(在使用的时候发现在CView类里面不要填这一项,但是如果是再其他的类中,就要填写)
LPCTSTR lpText —— 对话框的内容
LPCTSTR lpCaption —— 对话框的标题
UINT uType ——对话框类型常量(窗口的风格)
该函数的返回值为整数,用于对话框按钮的识别。
对于Messagebox("hello");,它在vc6.0中运行是没有问题的,但在vs2005里编译却遇到了以下的错误:
d:my documentsvisual studio2005projectsmfcccmfcdlg.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 unsignedshort wchar_t ;占2个字节。
所以有字符做参数的函数相应也用两个版本了。
宽字节版函数中带有字符参数的都应该用宽字节版的字符参数,将字符串转换成宽字节很容易:
比如将 "Application Error"转换成UNICODE版,只需在它前面使用一个定义了的宏,如下:
L"Application Error" ,或者TEXT("Application Error")都可以
所以你应将 MessageBox(NULL,Temp,"ApplicationError",MB_ICONSTOP);
改为:MessageBox(NULL,Temp,L"Application Error",MB_ICONSTOP);
文章摘自:http://hi.baidu.com/ȫ����/blog/calendar/201005