首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

ATL中为啥不能使用MAKEINTRESOURCE函数

2011-12-15 
ATL中为什么不能使用MAKEINTRESOURCE函数各位高手们,请教你们一个问题。希望大家能不吝赐教。我使用VS2008开

ATL中为什么不能使用MAKEINTRESOURCE函数
各位高手们,请教你们一个问题。希望大家能不吝赐教。
  我使用VS2008开发一个ATL程序。我事先加载了一个bmp资源在里面。其ID号为IDB_BITMAP,我想通过使用MAKEINTRESOURCE函数来加载这个bmp资源。编译时没有任何问题,但进入调试状态后,在监视窗口查看MAKEINTRESOURCE(IDB_BITMAP)时,显示说“CXX0017:错误:没有找到符号IDB_BITMAP”。在监视窗口查看MAKEINTRESOURCE(201)时,显示说“CXX0017:错误:没有找到符号“MAKEINTRESOURCE””。其中,201是IDB_BITMAP对应的值。
  请问各位,这是什么原因啊?

[解决办法]
一,include <windows.h>
二,include "resouse.h"
[解决办法]
不要去监视 MAKEINTRESOURCE(IDB_BITMAP)

这样的

LPTSTR str = MAKEINTRESOURCE(IDB_BITMAP);

监视 str的值试试

另外“我想通过使用MAKEINTRESOURCE函数来加载这个bmp资源”

这个怎么说?bmp资源是用LoadBitmap来加载的

The MAKEINTRESOURCE macro converts an integer value to a resource type compatible with the resource-management functions. This macro is used in place of a string containing the name of the resource.
[解决办法]
#define MAKEINTRESOURCE(i) (LPTSTR) ((DWORD) ((WORD) (i)))


[解决办法]

探讨
#define MAKEINTRESOURCE(i)  (LPTSTR) ((DWORD) ((WORD) (i)))



[解决办法]
探讨
    我使用MAKEINTRESOURCE只是为了得到bmp资源的路径名而已。这样做是为了发布ATL生成的文件时,不用提供这个bmp图片。
    LPTSTR str =  MAKEINTRESOURCE(IDB_BITMAP);
    使用上面这句,监视str时,会显示错误的指针。

[解决办法]
应该来说,你只要尝试一下 显示这个位图成功,表面这个资源被成功载入了。

MAKEINTRESOURCE(IDB_BITMAP);就上上面说的,做了一个强制转换。

http://www.diybl.com/course/3_program/vc/vc_js/200896/139278.html 这里有分析。

CString 通过高位和地位来判断,是一个字符串还是一个资源。
[解决办法]


HBITMAP hbmBk = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
BITMAP bwh;
::GetObject(hbmBk,sizeof(BITMAP),&bwh);
printf("%d",bwh.bmWidth);
printf("%d",bwh.bmHeight);

vs2005中测试通过
[解决办法]
http://www.winehq.org/pipermail/wine-patches/2006-May/026377.html

上面这个网站有解释,大概是说
DDB的图必须为空,而DIB得图才返回正确的地址。

热点排行