LoadBitmap(const char FAR *)与LoadBitmap(UINT)的区别

lumg 2000-09-13 11:46:00
本人欲设置一对话框的背景图案,采用如下方式:
CBitmap cBitmap;
CBrush m_brush;
cBitmap.LoadBitmap(lpString);
m_brush.CreatePatternBrush(&cBitmap);
...
结果是对话框除各个控件外是透明的,我又尝试cBitmap.LoadBitmap(UINT)形式,结果运行成功可以显示。 难道这两个重载函数对CBitmap会产生不同效果吗?但是采用前一种又如何显示背景呢?
...全文
477 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wingsun 2000-09-13
  • 打赏
  • 举报
回复
LoadBimap(UNIT)是从资源中加载位图。LoadBitmap(const char Far * )是从一个位图文件中加载。使用LoadBitmap(Unit)你必须在你的资源中加入一个位图,参数是该位图资源的ID
lumg_2000 2000-09-13
  • 打赏
  • 举报
回复
areslee,你误解了LoadBitmap(),有2种形式,一种可以装载bmp文件,一种可以装载资源中的位图。但它们之间的区别呢,为何一个能显示一个不能?
Areslee 2000-09-13
  • 打赏
  • 举报
回复
LoadBitmap(lpString);应该是用来读BMP文件,而不是资源中的位图。
lumg 2000-09-13
  • 打赏
  • 举报
回复
谢谢Holly,谢谢各位,我终于成功了。
Holly 2000-09-13
  • 打赏
  • 举报
回复
cBitmap.LoadBitmap(cBitmap.Attach((HBITMAP)LoadImage(...))) ???!!!
不用这样调用,你用
cBitmap.Attach((HBITMAP)LoadImage(...));
就已经把位图放到cBitmap中了,为何你还用LoadBitmap来处理Attach的返回值!?
lumg_2000 2000-09-13
  • 打赏
  • 举报
回复
楼上的各位网兄的热切关注,lumg表示万分的感谢。还得向各位指导一下,lumg按照上述要点上机操作了一下,果真可以实现Load Image in the dialog,但运行时仍有报错,系统提示Attach
有错。现将代码呈上:
CBitmap cBitmap;
char lpString[256];
cBitmap.LoadBitmap(cBitmap.Attach((HBITMAP)LoadImage(NULL,lpString,IMAGE_BITMAP,0,0,LR_LOADFROMFILE )));
不知哪个参数有误,请指示。
Holly 2000-09-13
  • 打赏
  • 举报
回复
总之只要是LoadBitmap函数就不可以读文件,不管类成员还是全局!
Holly 2000-09-13
  • 打赏
  • 举报
回复
to ad:
你怎么还没开窍!
::LoadBitmap()也是一样的!
::LoadImage()要读文件的话,需要将参数fuLoad设置LR_LOADFROMFILE标记!
programCat 2000-09-13
  • 打赏
  • 举报
回复
Holly说的对极了

LoadBitmap只能装资源,而不能读文件的。
要读文件话,要用LoadImage这个API函数。
得到HBITMAP句柄后,用Cbitmap类的Attach.
ad 2000-09-13
  • 打赏
  • 举报
回复
真实的情况是这样的,CBitmap的LoadBitmap函数的两种形式都是针对资源的,一个资源可以用字符串名字标志,也可以用整数ID表示,比如你可以定义位图的ID为IDB_BITMAP1,也可以定义位图的名称为"BITMAP1", 效果一样,只是对于不同的定义法要用LoadBitmap的不同形式。全局函数LoadBitmap的参数才是指文件名.
Holly 2000-09-13
  • 打赏
  • 举报
回复
大错特错!
LoadBitmap的参数不论那种类型都是针对资源而言,CBitmap是不提供直接从文件中读取位图的功能的!
使用的形式无非是:
cBitmap.LoadBitmap(IDB_MYBMP);
cBitmap.LoadBitmap(MAKEINTRESOURCE(IDB_MYBMP));
两种的效果一样,都是对资源而言!
所谓的LPCTSTR和UINT类型参数,只是类型强制转换达到的!请看:
#define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))
#define MAKEINTRESOURCEW(i) (LPWSTR)((DWORD)((WORD)(i)))

#ifdef UNICODE
#define MAKEINTRESOURCE MAKEINTRESOURCEW
#else
#define MAKEINTRESOURCE MAKEINTRESOURCEA
#endif // !UNICODE
也许MS为了以后的资源可以变为32位,才提供的LPCTSTR类型的转换!
onion 2000-09-13
  • 打赏
  • 举报
回复
效果是一样的,一定是该函数根据文件名却找不到该文件。路径对否?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧