繁体   English   中英

如何从c ++(winapi)中的Resource加载GDI :: Image(GIF)?

[英]How to load GDI::Image (GIF) from Resource in c++(winapi)?

我正在用winapi(non-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;

有一个接受IStream *的Image 构造函数

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

在编译时将GIF文件添加到应用程序的资源中。 例如,通过将类似于下面的.rc文件编译为.res文件,然后可以将其链接到可执行文件中(某些编译器/ IDE具有使这一步骤自动化的工具):

Resources.rh

#define MY_GIF_ID 100

Resources.rc

#include "Resources.rh"
MY_GIF_ID RCDATA "gifs\\test.gif"

然后,您可以在运行时获取指向资源原始字节的指针。

#include "Resources.rh"

HMODULE hMod = GetModuleHandle(NULL);

HRSRC hRes = FindResource(hMod, MAKEINTRESOURCE(MY_GIF_ID), RT_RCDATA);
if (!hRes) { ... error handling ... } 

HGLOBAL hGlobal = LoadResource(hMod, hRes);
if (!hGlobal) { ... error handling ... } 

void *pResData = LockResource(hGlobal);
if (!pResData) { ... error handling ... } 

DWORD dwResData = SizeofResource(hMod, hRes);

有关更多详细信息,请参见MSDN:

资源介绍

查找和加载资源

最后,将资源字节传递给采用IStream*作为输入的Image构造函数:

#include <shlwapi.h>

IStream *pStream = SHCreateMemStream((BYTE*)pResData, dwResData);
if (!pStream) { ... error handling ... } 

pImg = new Image(pStream);
pStream->Release();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM