我是靠谱客的博主 糟糕皮卡丘,最近开发中收集的这篇文章主要介绍vs2008之MessageBox函数的用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

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 documentsvisual studio 2005projectsmfcccmfcdlg.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(NULL,Temp,L"Application Error",MB_ICONSTOP);

最后

以上就是糟糕皮卡丘为你收集整理的vs2008之MessageBox函数的用法的全部内容,希望文章能够帮你解决vs2008之MessageBox函数的用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部