我想导入图片begin.tmp
我用的bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//bitmap的定义是CBitmap bitmap;报错是:error C2664: “LoadImageW”: 不能将参数 2 从“char [10]”转换为“LPCWSTR”
我用的bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//bitmap的定义是CBitmap bitmap;报错是:error C2664: “LoadImageW”: 不能将参数 2 从“char [10]”转换为“LPCWSTR”
bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
但还是不行,错误还多了一个:
error C2440: “初始化”: 无法从“const char [10]”转换为“TCHAR []”,没有使该转换得以执行的上下文。
error C2679: 二进制“=”: 没有找到接受“HBITMAP”类型的右操作数的运算符(或没有可接受的转换)
c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(449): 可能是“CBitmap &CBitmap::operator =(const CBitmap &)”
试图匹配参数列表“(CBitmap, HBITMAP)”时FIR - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
但还是不行,错误还多了一个:
error C2440: “初始化”: 无法从“const char [10]”转换为“TCHAR []”,没有使该转换得以执行的上下文。
error C2679: 二进制“=”: 没有找到接受“HBITMAP”类型的右操作数的运算符(或没有可接受的转换)
c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(449): 可能是“CBitmap &CBitmap::operator =(const CBitmap &)”
试图匹配参数列表“(CBitmap, HBITMAP)”时 FIR - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
TCHAR test[] = _T("begin.tmp ");
我用的bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//bitmap的定义是CBitmap bitmap;
通常MFC带字符串参数的函数都提供两个版本的,一个是ANSI版本,一个是UNICODE版本
ANSI版本的函数参数是char*,每个英文字符占用1个字节,有很多字符串类型宏LPSTR,LPCSTR的基本类型都是这个
UNICODE版本函数参数是wchat_t*,每个英文字符占用2个字节,同样的派生了LPWSTR,LPCWSTR类型宏
实际上没有LoadImage这个函数,它是一个宏:
#ifdef UNICODE
#define LoadImageW //UNICODE版本
#else
#define LoadImageA //ANSI版本
#endif
通常VC工程默认是使用UNICODE编译的,即#ifdef UNICODE是成立的,所以使用的是LoadImageW函数
而lz的第二个参数应该是被定义成char test[] = "begin.tmp ";与LoadImageW函数的第二个参数类型LPCWSTR(实际上就是wchat_t*)不匹配,所以编译器才会报错
所以通常在VC中定义字符串使用TCHAR [],它也会根据工程是否是使用UNICODE编译自动翻译成相适应的类型,而_T()宏也是起到相同的作用
查看宏函数,宏等定义可以选中该符号按F12,VC会自动跳到其定义处
设置工程编译字符集方法:工程上点击邮件->属性->Configuration Properties->General->Project Defaults/Character Set,后面的默认选项是Use Unicode Character Set,lz也可以选择Use Multi-Byte Character Set,这样你当前的工程也可以编译通过
但VC推荐使用UNICODE字符集,这样可以使你的程序更容易国际化,而且在VC08中有些ANSI版本被废除(MSDN上是这么写的,不过貌似还能用)班门弄斧了,见笑
不介意的话贴个广告:http://topic.csdn.net/u/20080919/16/f840ef31-30b7-461e-81c2-4198b878b778.html
大家帮忙给出点注意,多谢
bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
第一个错误没有了,但是第二个错误还存在呢。
error C2679: 二进制“=”: 没有找到接受“HBITMAP”类型的右操作数的运算符(或没有可接受的转换)
VC++的东西也是C++,强转都是通用的
TCHAR test[]=_T("begin.bmp");
HBITMAP bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
LoadImage返回类型是HANDLE, 和HBITMAP 本质上是一个东西,lz可以直接跳到该类型的定义处看看