社区
图形处理/算法
帖子详情
(MFC)一个函数使用的问题
galaxy_42
2008-09-23 05:26:00
我想导入图片begin.tmp
我用的bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//bitmap的定义是CBitmap bitmap;
报错是:error C2664: “LoadImageW”: 不能将参数 2 从“char [10]”转换为“LPCWSTR”
...全文
256
11
打赏
收藏
(MFC)一个函数使用的问题
我想导入图片begin.tmp 我用的bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//bitmap的定义是CBitmap bitmap; 报错是:error C2664: “LoadImageW”: 不能将参数 2 从“char [10]”转换为“LPCWSTR”
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
djtop10
2009-04-02
打赏
举报
回复
好!在这学习了
galaxy_42
2008-09-24
打赏
举报
回复
按照你说的改成了 TCHAR test[]=_T("begin.bmp");
bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
第一个错误没有了,但是第二个错误还存在呢。
error C2679: 二进制“=”: 没有找到接受“HBITMAP”类型的右操作数的运算符(或没有可接受的转换)
galaxy_42
2008-09-24
打赏
举报
回复
非常感谢你细心的讲解
wanglei_wy
2008-09-24
打赏
举报
回复
//char test[] = "begin.tmp ";
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
大家帮忙给出点注意,多谢
Occam's_Razor
2008-09-24
打赏
举报
回复
TCHAR test[]=_T("begin.bmp");
galaxy_42
2008-09-24
打赏
举报
回复
我改成这样了: TCHAR test[]="begin.bmp";
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 个 ==========
galaxy_42
2008-09-24
打赏
举报
回复
我改成这样了: TCHAR test[]="begin.bmp";
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 个 ==========
wanglei_wy
2008-09-24
打赏
举报
回复
-_-! lz应该养成查MSDN的习惯
VC++的东西也是C++,强转都是通用的
TCHAR test[]=_T("begin.bmp");
HBITMAP bitmap=(HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
LoadImage返回类型是HANDLE, 和HBITMAP 本质上是一个东西,lz可以直接跳到该类型的定义处看看
greatws
2008-09-23
打赏
举报
回复
unicode的问题
binsir543
2008-09-23
打赏
举报
回复
同意楼上
cnzdgs
2008-09-23
打赏
举报
回复
把test该成TCHAR test[10]这样定义。
MFC
如何解决多个按钮响应
一个
函数
的
问题
本文介绍了在
MFC
中如何
使用
ON_COMMAND_RANGE宏来解决多个按钮响应同
一个
函数
的
问题
,避免了为每
一个
按钮单独绑定
函数
的繁琐操作。通过示例代码,展示了如何设置消息映射和实现
函数
,使得当任意
一个
指定ID范围内的按钮被点击时,都会调用同
一个
OnButton3
函数
,从而弹出对应按钮的文本信息。
MFC
中OnInitDialog
函数
初始化
问题
本文档介绍了在
MFC
应用程序中遇到的
一个
问题
:在TabCtrl控件内的子窗体A(
使用
IDD_DIALOG_SINGLE_PROCESS创建)中,ListCtrl控件样式无法正确初始化。经过调试发现,子窗体A的OnInitDialog()
函数
中的ListCtrl相关设置不起作用,原因是Create后窗体参数未刷新,导致GetWindowRect获取到的是随机值。解决方案是在OnInitDialog()中添加UpdateData(FALSE)来刷新数据,从而成功初始化ListCtrl。
VS2013
MFC
中回调
函数
的
使用
&出现的
问题
本文介绍了如何在
MFC
类的成员
函数
中实现回调
函数
,并详细解释了回调
函数
的基本概念。作者分享了在实际应用过程中遇到的
问题
及解决方案,包括确保回调
函数
定义与库
函数
一致的重要性、在
MFC
类中
使用
静态或全局
函数
作为回调
函数
的限制,以及如何在子窗口中
使用
主窗口定义的回调
函数
。
MFC
中定时器消息
函数
未被调用
问题
本文记录了一位开发者在
使用
MFC
开发激光扫描仪测试程序时遇到的
问题
:试图通过SetTimer实现界面每秒刷新,但OnTimer
函数
未被调用。
问题
源于在视图类构造
函数
中创建定时器时,窗口句柄尚未生成,导致定时器无法正常工作。解决方案是将SetTimer的调用移至WM_CREATE消息处理
函数
中,确保在窗口创建后设置定时器。作者反思应更深入理解
MFC
基础知识。
关于
MFC
中CComBox控件
使用
AddString等
函数
,编译报错的
问题
1种解决办法
在
MFC
中
使用
CComBox控件时,通过AddString或InsertString
函数
添加初始值可能导致编译错误。
问题
源于 OnInitDialog()
函数
未正确继承父类初始化。解决方法是在OnInitDialog()开头添加CDialog::OnInitDialog();。
图形处理/算法
19,464
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章