STDMETHOD(OnGetImage)(BSTR * pbstrImageId, IPictureDisp * * ppdispImage)
{
// MessageBox(NULL,"OnGetImage","AA",MB_OK);
CComBSTR bImageName(*pbstrImageId);
HRESULT hr = S_OK;
PICTDESC pd;
pd.cbSizeofstruct = sizeof (PICTDESC);
pd.picType = PICTYPE_BITMAP;
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
gdiplusStartupInput.DebugEventCallback = NULL;
gdiplusStartupInput.SuppressBackgroundThread = FALSE;
gdiplusStartupInput.SuppressExternalCodecs = FALSE;
gdiplusStartupInput.GdiplusVersion = 1;
GdiplusStartup (&gdiplusToken, &gdiplusStartupInput, NULL);
int idPNG;
//if (lstrcmp (bstrID, TEXT("iJoinBtn")) == 0)
if(wcscmp(bImageName.m_str,L"crhs1.bmp")==0)
idPNG = IDR_PNG1;
if(wcscmp(bImageName.m_str,L"crhs2.bmp")==0)
idPNG = IDR_PNGBJHS;
if(wcscmp(bImageName.m_str,L"dwsj.bmp")==0)
idPNG = IDR_PNGDWSJ;
if(wcscmp(bImageName.m_str,L"sjj.bmp")==0)
idPNG = IDR_PNGSJJ;
if(wcscmp(bImageName.m_str,L"crdm.bmp")==0)
idPNG = IDR_PNGCRDM;
if(wcscmp(bImageName.m_str,L"crrq.bmp")==0)
idPNG = IDR_PNGCRRQ;
if(wcscmp(bImageName.m_str,L"cssz.bmp")==0)
idPNG = IDR_PNGCSSZ;
if(wcscmp(bImageName.m_str,L"xtsz.bmp")==0)
idPNG = IDR_PNGXTSZ;
if(wcscmp(bImageName.m_str,L"shuaxin.bmp")==0)
idPNG = IDR_SHUAXIN;
//if(wcscmp(bImageName.m_str,L"wdl.bmp")==0)
// idPNG = IDR_PNGWDL;
HRSRC hResource = FindResource (_Module.GetModuleInstance(),
MAKEINTRESOURCE(idPNG), TEXT("PNG"));
if (!hResource)
return hr;
DWORD dwImageSize = SizeofResource (_Module.GetModuleInstance(), hResource);
const void* pResourceData = LockResource (LoadResource
(_Module.GetModuleInstance(), hResource));
if (!pResourceData)
return hr;
HGLOBAL hBuffer = GlobalAlloc (GMEM_MOVEABLE, dwImageSize);
if (hBuffer)
{
void* pBuffer = GlobalLock (hBuffer);
if (pBuffer)
{
CopyMemory (pBuffer, pResourceData, dwImageSize);
IStream* pStream = NULL;
if (::CreateStreamOnHGlobal (hBuffer, FALSE, &pStream) == S_OK)
{
Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromStream (pStream);
pStream->Release();
if (pBitmap)
{
pBitmap->GetHBITMAP (0, &pd.bmp.hbitmap);
hr = OleCreatePictureIndirect (&pd, IID_IDispatch, FALSE, (LPVOID*)ppdispImage);
delete pBitmap;
}
}
GlobalUnlock (pBuffer);
}
GlobalFree (hBuffer);
}
Gdiplus::GdiplusShutdown(gdiplusToken);
return hr;
}