c++ - 如何从 C++(winapi) 中的资源加载 GDI::Image (GIF)?

标签 c++ winapi gdi animated-gif

我正在用 winapi(非 MFC)制作一个窗口 c++ 并显示 gif。为此,我使用 GDI++。我正在从路径中将 gif 加载到 GDI::Image,但我想从资源中加载它。我该怎么做?

    hMWDC = GetDC(hWnd);
    pGphcs = new Graphics(hMWDC);
    WCHAR path[MAX_PATH];
    GetModuleFileNameW(NULL, path, MAX_PATH);
    PathRemoveFileSpecW(path);
    PathAppendW(path, L"gifs\\test.gif");
    pImg = new Image(path);

    if (pImg) {
        nFrmCnt = pImg->GetFrameCount(&FrameDimensionTime);
        SetTimer(hWnd, DRAW_ANIM, 100, NULL);

    }
case WM_TIMER:
        if (wParam == DRAW_ANIM)
        {
            pImg->SelectActiveFrame(&FrameDimensionTime, nFrm);
            Rect DRC(0, 0, pImg->GetWidth(), pImg->GetHeight());
            pGphcs->Clear(Color(128, 128, 128));


            pGphcs->DrawImage(pImg, DRC);
            if (nFrm < (nFrmCnt - 1)) nFrm++; else nFrm = 0;
        }

        break;

最佳答案

有一张图片constructor接受 IStream*。

您可以通过调用 SHCreateMemStream 创建流在资源的原始缓冲区上,可以通过调用 FindResource 获得/LoadResource/LockResourceSizeOfResource .

关于c++ - 如何从 C++(winapi) 中的资源加载 GDI::Image (GIF)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126168/

相关文章:

c - 防止控制台窗口在 C 中调整大小/滚动 (Window.h)

c++ - 在 C++ 中获取当前实例(例如 pid)的唯一值的独立于平台的方法是什么

c++ - fatal error LNK1136 : invalid or corrupt file

无法使用互斥复选框实现 TreeView

c++ - Hook OutputDebugStringA 引发异常

c++ - OpenGL 闪烁?

windows - 我可以创建一个设备上下文,它只是另一个设备上下文的一部分吗?

c++ - Win32 C++ "Old Bitmap"可以重用吗?

c++ - 泰勒级数展开为 constexpr

c++ - 如何使用 C++ 文件流编辑(读取然后写入)文件?