在资源视图里添加资源
 
 导入PNG资源 会自动新建一个PNG的文件夹
 
 这时候 PNG就已经在资源里了 但是CImage只能通过路径或者流的方式来加载 不能根据ID值
 我们就自己写个方法
声明
bool LoadImageFromResource(IN CImage * pImage, IN UINT nResID, IN LPCSTR lpTyp);
实现
bool CMyToolbarDlg::LoadImageFromResource(IN CImage* pImage,
                           IN UINT nResID, 
                           IN LPCSTR lpTyp)
{
    if ( pImage == NULL) return false;
    pImage->Destroy();
    // 查找资源
    HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
    if (hRsrc == NULL) return false;
    // 加载资源
    HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
    if (hImgData == NULL)
    {
        ::FreeResource(hImgData);
        return false;
    }
    // 锁定内存中的指定资源
    LPVOID lpVoid    = ::LockResource(hImgData);
    LPSTREAM pStream = NULL;
    DWORD dwSize    = ::SizeofResource(AfxGetResourceHandle(), hRsrc);
    HGLOBAL hNew    = ::GlobalAlloc(GHND, dwSize);
    LPBYTE lpByte    = (LPBYTE)::GlobalLock(hNew);
    ::memcpy(lpByte, lpVoid, dwSize);
    // 解除内存中的指定资源
    ::GlobalUnlock(hNew);
    // 从指定内存创建流对象
    HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);
    if ( ht != S_OK )
    {
        GlobalFree(hNew);
    }
    else
    {
        // 加载图片
        pImage->Load(pStream);
        GlobalFree(hNew);
    }
    // 释放资源
    ::FreeResource(hImgData);
    return true;
}
使用
Image image;
LoadImageFromResource(&image, IDB_PNG1, _T("PNG") );
结束



















