3,248
社区成员




CComPtr<IRichEditOle> pTalkRichEditOle;
CComPtr<ITextRange> pTalkRange;
::SendMessage(m_pwndTalk->m_hWnd,EM_GETOLEINTERFACE,0,(LPARAM)&pTalkRichEditOle);
CComQIPtr<ITextDocument>(pTalkRichEditOle)->Range(0,0,&pTalkRange);
int pic_count = (int)pTalkRichEditOle->GetObjectCount();
for (int nIndex = 0; nIndex < pic_count; nIndex++)
{
REOBJECT reobject = {0};
reobject.cbStruct = sizeof(REOBJECT);
pTalkRichEditOle->GetObject(i, &reobject, REO_GETOBJ_POLEOBJ);
reobject.poleobj->SetClientSite(NULL);
CComQIPtr<IDataObject> pDataObject = reobject.poleobj;
if (!pDataObject) continue;
CComPtr<IEnumFORMATETC> pEnumFormatEtc;
if (SUCCEEDED(pDataObject->EnumFormatEtc(DATADIR_GET,&pEnumFormatEtc)) && pEnumFormatEtc)
{
FORMATETC fmt = {0};
if (S_FALSE != pEnumFormatEtc->Next(1,&fmt,NULL))
{
STGMEDIUM medium;
pDataObject->GetData(&fmt,&medium);
if (fmt.cfFormat == CF_METAFILEPICT)
{
HMETAFILEPICT hMetaFilePict = medium.hMetaFilePict;
LPMETAFILEPICT pMFP = (LPMETAFILEPICT)GlobalLock(hMetaFilePict);
SIZE size;
size.cx = 19;
size.cy = 19;
HWND hWnd = ::GetDesktopWindow();
HDC hDC = ::GetDC(hWnd);
HDC hMemDC = ::CreateCompatibleDC(hDC);
HBITMAP hMemBmp = ::CreateCompatibleBitmap(hDC, size.cx, size.cy);
HBITMAP hPrevBmp = (HBITMAP)::SelectObject(hMemDC, hMemBmp);
::PlayMetaFile(hMemDC, pMFP->hMF);
HMETAFILE hFile = CopyMetaFile(pMFP->hMF, _T("E:\\fromMSN.wmf"));
DeleteMetaFile(hFile);
GlobalUnlock(pMFP);
}
}
}
}
CxImage * pImage = new CxImage();
if (pImage)
{
pImage->CreateFromHANDLE(hMemBmp);
bool bRetCode = pImage->Save(bstrFullPathName,CXIMAGE_FORMAT_PNG);
delete pImage;
pImage = NULL;
}
CxImage * pImage = new CxImage();
pImage->CreateFromHANDLE(medium.hBitmap);
bool bRetCode = pImage->Save(bstrFullPathName, CXIMAGE_FORMAT_PNG);
delete pImage;
pImage = NULL;
但是保存的png图片是错误的。请问上面的代码错了吗?