各位高手们,请教你们一个问题。希望大家能不吝赐教。
我使用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)))
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
应该来说,你只要尝试一下 显示这个位图成功,表面这个资源被成功载入了。
MAKEINTRESOURCE(IDB_BITMAP);就上上面说的,做了一个强制转换。
http://www.diybl.com/course/3_program/vc/vc_js/200896/139278 这里有分析。
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
上面这个网站有解释,大概是说
DDB的图必须为空,而DIB得图才返回正确的地址。