在网上找了好多例子  都是说用GDI+  可是都是从外部文件读进来的   我想像BMP一样直接加载到资源里面   通过ID来操作  麻烦高手指教~~

解决方案 »

  1.   

    给一段自己写的代码,GDI+从资源里面读取图像
    自我感觉写得还不错
    Bitmap* BitmapFromResource(HMODULE hModule, UINT nResourceID, LPCTSTR szResourceType)
    {
    Bitmap* pImage = NULL;

    HRSRC hRes = FindResource(hModule, MAKEINTRESOURCE(nResourceID), szResourceType);
    if(hRes != NULL)
    {
    DWORD dwResSize = SizeofResource(hModule, hRes);
    if(dwResSize > 0)
    {
    HGLOBAL hResData = LoadResource(hModule, hRes);
    if(hResData != NULL)
    {
    LPVOID lpResourceData = LockResource(hResData);
    if(lpResourceData != NULL)
    {
    HGLOBAL hResourceBuffer = GlobalAlloc(GMEM_MOVEABLE, dwResSize);
    if(hResourceBuffer != NULL)
    {
    LPVOID lpResourceBuffer = GlobalLock(hResourceBuffer); 
    if(lpResourceBuffer != NULL)
    {
    CopyMemory(lpResourceBuffer, lpResourceData, dwResSize);

    IStream* piStream = NULL; 
    if(CreateStreamOnHGlobal(hResourceBuffer, FALSE, &piStream) == S_OK)
    {
    pImage = Bitmap::FromStream(piStream);
    piStream->Release();
    }

    GlobalUnlock(hResourceBuffer);
    }

    GlobalFree(hResourceBuffer);
    }
    }

    FreeResource(hResData);
    }
    }
    }

    if(pImage != NULL)
    {
    if(Ok != pImage->GetLastStatus())
    {
    delete pImage;
    pImage = NULL;
    }
    }

    return pImage;
    }
      

  2.   

    导入资源吗?Resource View标签,右键点击工程.rc文件,弹出Add Resource对话框,选择Import...导入
      

  3.   

    最后自定义一个“PNG”的类型是吧   这样子不行呢~~
      

  4.   

    在打开的工程中,先自定义一个新的资源类型,比如里面填的是PNG,然后工程的资源中就会多出这个选项。
    然后找到.rc文件,用记事本打开,然后找到刚刚的添加的新类型PNG,然后在里面添加项就可以了,比如添加一项
    IDR_PNG_OK  PNG  "res\\Ok.png"
    这样再重新打开工程,就会发现资源中的PNG这部分多了刚刚添加的文件,不过是多出双引号的,这是因为还没有给它分配ID。这时再把这个文件中的双引号去掉,IDE就会自动为它分配资源ID了。然后就可以通过IDR_PNG_OK这个宏来对它引用了
      

  5.   

    用2008 或者 2010 加好了, bitmap 里面文件格式有png
      

  6.   

    各位,不是做广告,我和我大学同学(现在都已工作快一年了)组了个C++的群,希望各路朋友能一起加入来讨论C++相关的知识,一起进步相互交流,一起广交朋友,但不能在群里发广告,以及讨论太多关于C++无关的东西
      

  7.   

    各位,不是做广告,我和我大学同学(现在都已工作快一年了)组了个C++的群104368517,希望各路朋友能一起加入来讨论C++相关的知识,一起进步相互交流,一起广交朋友,但不能在群里发广告,以及讨论太多关于C++无关的东西
      

  8.   

    在打开的工程中,先自定义一个新的资源类型,比如里面填的是PNG,然后工程的资源中就会多出这个选项。
    然后找到.rc文件,用记事本打开,然后找到刚刚的添加的新类型PNG,然后在里面添加项就可以了,比如添加一项
    IDR_PNG_OK PNG "res\\Ok.png"
    这样再重新打开工程,就会发现资源中的PNG这部分多了刚刚添加的文件,不过是多出双引号的,这是因为还没有给它分配ID。这时再把这个文件中的双引号去掉,IDE就会自动为它分配资源ID了。然后就可以通过IDR_PNG_OK这个宏来对它引用了
      

  9.   

    使用下面的代码,让资源中的png图片变成GDI+中的Image对象即可进行绘画
    inline BOOL ImageFromIDResource(UINT resourceID, LPCTSTR resourceType, Image*& image)
    {
    HINSTANCE hInst = AfxGetResourceHandle();
    HRSRC hRsrc = ::FindResource(hInst,MAKEINTRESOURCE(resourceID),resourceType);
    if (hRsrc == NULL)
    return FALSE; // load resource into memory
    DWORD len = SizeofResource(hInst, hRsrc);
    BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
    if (lpRsrc == NULL)
    return FALSE; // Allocate global memory on which to create stream
    HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
    BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
    memcpy(pmem,lpRsrc,len);
    IStream* pstm;
    CreateStreamOnHGlobal(m_hMem,FALSE,&pstm); // load from stream
    image = Gdiplus::Image::FromStream(pstm); // free/release stuff
    GlobalUnlock(m_hMem);
    GlobalFree(m_hMem);
    pstm->Release();
    FreeResource(lpRsrc); return TRUE;
    }