我一直试图让LoadBitmap()
工作一段时间。它返回错误1814,ERROR_RESOURCE_NAME_NOT_FOUND
。代码如下,但到目前为止我已尝试过:
(HBITMAP)LoadImage()
代替LoadBitmap()
MAKEINTRESOURCE('ICON.BMP')
代替资源idenfitier GetModuleHandle(NULL)
而不是将实例句柄传递给函数MAKEINTRESOURCE
分开并将其置于自己的错误检查之后,以确保问题不存在(不是)我也经历过我能找到的每一个问题,其他网站,MSDN文档,并尝试应用我在那里找到的东西,但无济于事。我错过了什么?
在Eclipse上使用MinGW
RESOURCE.RC
#include "resource.h"
IDBMP_TREEICON BITMAP "icon.bmp"
RESOURCE.H
#ifndef __RESOURCE_H_INCLUDED__
#define __RESOURCE_H_INCLUDED__
#define IDBMP_TREEICON 101
#endif
的main.cpp
#include <windows.h>
#include <stdio.h>
#include <commctrl.h>
#include <string>
#include "resource.h"
BOOL InitTreeViewImage(HINSTANCE hInstance, HWND hWnd){
HBITMAP hbmp = NULL;
HIMAGELIST hImgList;
if((hImgList = ImageList_Create(10, 10, FALSE, 1, 0)) == NULL){
MessageBox(NULL, "Failed to create ImageList!", "Eror", MB_OK);
return false;
}
LPCSTR theBitmap = NULL;
theBitmap = MAKEINTRESOURCE(IDBMP_TREEICON);
if(theBitmap == NULL){
//GetLastError(), output to console, messagebox - removed for brevity in this example
return false;
}
hbmp = LoadBitmap(hInstance, theBitmap);
if(hbmp == NULL){
//GetLastError(), output to console, messagebox - removed for brevity in this example
return false;
}
treeIcon = ImageList_Add(hImgList, hbmp, NULL);
if(treeIcon == 1){
MessageBox(NULL, "Failed to add icon to image list!", "Eror", MB_OK);
return false;
}
DeleteObject(hbmp);
TreeView_SetImageList(hWnd, hImgList, TVSIL_NORMAL);
return true;
}
答案 0 :(得分:4)
当LoadBitmap
与ERROR_RESOURCE_NAME_NOT_FOUND
失败时,这意味着您指定的模块没有类型RT_BITMAP
的资源,其中包含您提供的资源ID。这绝对是那么简单。
有许多可能的失败模式:
您提供了错误的模块。检查hInstance
是否确实识别出您将资源链接到的正确模块。
您链接的资源包含错误的类型或错误的ID。鉴于你在问题中提出的内容,这似乎不太可能。
您未能将已编译的资源文件传递给链接器,并且实际上没有资源链接到可执行文件。
另外,MAKEINTRESOURCE
是一个简单的宏,期望GetLastError()
返回与MAKEINTRESOURCE
相关的任何内容都是错误的。作为一项严格的规则,只有在文档明确说明这样做有意义时才使用GetLastError()
。