::LoadBitmap的第一个参数的问题

yoogle 2007-07-18 05:01:26
我在程序中这样用的:
HBITMAP hBitmap;
hBitmap = ::LoadBitmap(NULL,MAKEINTRESOURCE(IDB_SHINE));
但是这样hBitmap始终为空,结果搜索了半天,才找到如下方式就好了,我想知道是为什么?
hBitmap = ::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_SHINE));
...全文
406 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangk 2007-07-19
  • 打赏
  • 举报
回复
LoadBitmap必须传入资源所在的instance。
下面分MFC和SDK两种方式讨论你的问题。
1、如果采用MFC方式,可以使用 AfxGetResourceHandle保存当前的资源文件句柄,即你说的hInst。也可以使用AfxSetResourceHandle设置资源DLL的句柄,如:
hDll=LoadLibrary("ResourceDLL.dll");
if(hDll==NULL)
AfxMessageBox("Can't Load the library");
else AfxMessageBox("success");
AfxSetResourceHandle(hDLL);
...
}
这样以后你再使用LoadBitmap时,图片将来自你的资源DLL,而不是.exe文件。如果你在程序中还要使用.exe中的资源,你需要在 AfxSetResourceHandle之前,先使用 AfxGetResourceHandle保存当前的资源文件句柄。

2、SDK方式。在WinMain或DllMain中,第一个参数都是HINSTANCE。你也可以用LoadLibrary或者GetModuleHandle获取句柄。
yxz_lp 2007-07-19
  • 打赏
  • 举报
回复
An application can use the LoadBitmap function to access predefined bitmaps. To do so, the application must set the hInstance parameter to NULL and the lpBitmapName parameter to one of the following values.

Bitmap name Bitmap name
OBM_BTNCORNERS OBM_OLD_RESTORE
OBM_BTSIZE OBM_OLD_RGARROW
OBM_CHECK OBM_OLD_UPARROW
OBM_CHECKBOXES OBM_OLD_ZOOM
OBM_CLOSE OBM_REDUCE
OBM_COMBO OBM_REDUCED
OBM_DNARROW OBM_RESTORE
OBM_DNARROWD OBM_RESTORED
OBM_DNARROWI OBM_RGARROW
OBM_LFARROW OBM_RGARROWD
OBM_LFARROWD OBM_RGARROWI
OBM_LFARROWI OBM_SIZE
OBM_MNARROW OBM_UPARROW
OBM_OLD_CLOSE OBM_UPARROWD
OBM_OLD_DNARROW OBM_UPARROWI
OBM_OLD_LFARROW OBM_ZOOM
OBM_OLD_REDUCE OBM_ZOOMD
yoogle 2007-07-19
  • 打赏
  • 举报
回复
求解
yxz_lp 2007-07-19
  • 打赏
  • 举报
回复
预存位图//是系统预存的,
怎么才能预存位图?//不能
yoogle 2007-07-19
  • 打赏
  • 举报
回复
谢谢耐心啊,那什么是预存位图呢?怎么才能预存位图?另外,OBM_BTNCORNERS 、OBM_OLD_RESTORE这些都是什么,看起来像是自己定义的位图的ID啊。

p.s.俺提高了分值了,呵呵。
yxz_lp 2007-07-19
  • 打赏
  • 举报
回复
我看网上多次有人引用这个函数的时候都是用null做参数
////////////////////////////////////////////////////
must set the hInstance parameter to NULL不正是你想要的,但是有前提条件 to access predefined bitmaps,载入预存的位图,而且后面一个参数lpBitmapName必须是以下值:OBM_BTNCORNERS 、OBM_OLD_RESTORE 等等(见上)。


想要你的分真难,我上面的贴子不就是说:什么情况下可以用null吗,也不知道你有没有好好看,这些MSDN上说的清清楚楚。
晕~~
yoogle 2007-07-19
  • 打赏
  • 举报
回复
to yxz_lp(),
must set the hInstance parameter to NULL 这不就和我做的刚好相反了嘛??

to wangk(倒之)
什么情况下可以用null呢?我看网上多次有人引用这个函数的时候都是用null做参数
yoogle 2007-07-18
  • 打赏
  • 举报
回复
可是即使我不用::还是不能成功,如hBitmap = LoadBitmap(NULL, MAKEINTRESOURCE(IDB_SHINE));
向立天 2007-07-18
  • 打赏
  • 举报
回复
他们用的应该是默认的资源句柄,
而你是通过::附全局调用,所以要自己指定资源句柄
yoogle 2007-07-18
  • 打赏
  • 举报
回复
可是我去网上搜这个函数的时候,大家伙都把第一个参数设置为NULL,他们怎么好像都没啥问题呢?
yxz_lp 2007-07-18
  • 打赏
  • 举报
回复
你不告诉它在哪找,它才懒得去呢!

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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