HBITMAP hbm = LoadImage函数返回NULL

我在屏幕上显示位图时遇到问题 . 当我压缩并运行它没有显示任何东西,所以我尝试一步一步调试,发现下面的代码是问题 .

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 (我假设它是由于没有被初始化,因为当我到达线时这会出现所以我没有进入它在这一点上 - 只是想我已经把它放进去了)在我走进这一行之后它说hbm = NULL,并且GetLastError函数返回0,我读过这意味着函数成功了 . 我已经尝试传递NULL而不是hInstance,我已经尝试将文件名传递为LPCSTR szFileName - 我将其声明为LPCSTR szFileName(“C:\ Users \ Jemma \ Desktop \ Maze Game \ Assets \ TILE_01.bmp”) . 绝对不知道下一步该尝试什么 . 任何有关这方面的帮助将不胜感激 .

回答(1)

2 years ago

首先,确保您的图像是真正的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 ,它将显示您发生的错误的可读描述 .