Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从资源文件(.rc文件)加载位图?_C++_Visual Studio_Sdl 2 - Fatal编程技术网

C++ 如何从资源文件(.rc文件)加载位图?

C++ 如何从资源文件(.rc文件)加载位图?,c++,visual-studio,sdl-2,C++,Visual Studio,Sdl 2,我正在VisualStudio中编写一个简单的游戏,我已经设置了一个资源文件(.rc文件),我也在使用sdl2。我想知道是否有办法加载或绘制资源文件中的位图。提前谢谢 我目前正在使用这一行: HBITMAP hBtMpIMG = LoadBitmap((HINSTANCE)getModuleHandle(_T("Project 1.exe")), MAKEINTRESOURCE(IDB_BITMAP1)); 如何使用sdl2呈现hBtMpIMG?您可以使用API:LoadBitmap加载存储在

我正在VisualStudio中编写一个简单的游戏,我已经设置了一个资源文件(.rc文件),我也在使用sdl2。我想知道是否有办法加载或绘制资源文件中的位图。提前谢谢

我目前正在使用这一行:

HBITMAP hBtMpIMG = LoadBitmap((HINSTANCE)getModuleHandle(_T("Project 1.exe")), MAKEINTRESOURCE(IDB_BITMAP1));

如何使用sdl2呈现hBtMpIMG?

您可以使用API:
LoadBitmap
加载存储在可执行文件中的位图:

    case WM_CREATE:
    {
        HBITMAP hBtMpBall = LoadBitmap((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDB_BALL)); //Here we have to use the executable module to load our bitmap resource
        //this means that this resource "ball.bmp" is compiled and stored in the executable module"
        //however if you use loadimage you can ignore this module and makeit null because you are laoding from file

        if(!hBtMpBall)
            MessageBox(0,"ball.bmp not found!",0,0);
    }
    break;
  • 在资源文件中:
    .rc
    您可能会有这样的结果:

    #include "myres.h"
    
    IDB_BALL BITMAP DISCARDABLE "ball.bmp"
    

有Windows API函数可以将嵌入式资源文件中所有可能的资源加载到内存中,并返回句柄。在您的情况下,如果搜索一点,您应该找到一个函数,从资源加载位图并返回
HBITMAP
hhandle或类似内容。然后,如果您再搜索一点,我相信您会找到一些东西来将
HBITMAP
转换为SDL2可以使用的东西。您可能需要将
HBITMAP
转换为
BITMAP
,以便将其传递给SDL。此外,SDL是一种兼容性工具,可用于在Windows和其他操作系统中编程。如果您使用的是Windows特定的函数,那么您最好使用Windows函数打印位图。或者坚持使用SDL并从文件中加载位图。如果我使用SDL创建窗口等,这仍然有效吗?您最好在示例中添加
DeleteObject(hBtMpBall)
,这是避免资源泄漏的必要条件。@BarmakShemirani:是以避免资源耗尽。