我在屏幕上显示位图时遇到问题。当我编译并运行不显示任何内容时,尝试逐步调试,发现下面的代码是问题所在。
HBITMAP hbm = (HBITMAP)LoadImage(hInstance,
"C:\\Users\\Jemma\\Desktop\\Maze Game\\Assets\\TILE_01.bmp",
IMAGE_BITMAP,
SWidth, SHeight,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hbm == NULL || m_Surface == NULL)
{
DWORD lastError = GetLastError();
return 1;
}
当我首先在autos下进入此功能时,它会说hbm = 0xcccccccc {unused = ???}(我假设这是由于未初始化,因为我上线时出现了此信息,所以我没有介入其中在这一点上-只是以为我会以防万一,如果我进入这一行,它说hbm = NULL,并且GetLastError函数返回0,我已经读过它意味着函数成功了。我尝试传递NULL而不是hInstance,尝试将文件名作为LPCSTR szFileName传递给我-我将其声明为LPCSTR szFileName(“C:\ Users \ Jemma \ Desktop \ Maze Game \ Assets \ TILE_01.bmp”) 。
绝对不知道下一步该怎么做。任何帮助,将不胜感激。
最佳答案
首先,请确保您的图片是真实的bmp文件,并且可以使用图片查看器打开。然后尝试使用LoadImage加载该HBITMAP:
const char* filename = "C:\\Users\\Jemma\\Desktop\\Maze Game\\Assets\\TILE_01.bmp";
HBITMAP bmp = (HBITMAP)LoadImage(NULL, filename,
IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
if (hbm == NULL)
{
DWORD lastError = GetLastError();
return 1;
}
注意,当使用
LR_DEFAULTSIZE
时,您需要使用0,0作为大小,从文件加载时,您也需要使用LR_LOADFROMFILE
。所有这些都在documentation of LoadImage function中提到。使用调试器逐步调试时,如果遇到意外情况,则需要检查GetLastError。如果您要逐步使用VS调试器,则只需在监视窗口中添加
@err
,您将始终看到最后一个错误,而无需更改代码。您也可以将其添加为@err,hr
,它将为您显示所发生错误的可读描述。关于c++ - HBITMAP hbm = LoadImage函数返回NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43507270/