добрый день.
у меня следующая проблема. есть wmf в clipbaord. мне нужно добавить к существующему рисунку ограничивающий прямоугольник и сохранить в файле. код есть, но чтото там не правильно. прямоугольник рисуется, но он закрывает собой весь рисунок. в результате получается сплошной белый прямоугольник.
подскажите пожалуйста решение.
спасибо.
if(OpenClipboard(NULL))
{
/*HGLOBAL*/HANDLE hGlobal=GetClipboardData(CF_METAFILEPICT);
if(hGlobal!=NULL)
{
IStream* istr=NULL;
METAFILEPICT FAR* lpPict;
lpPict=(METAFILEPICT FAR*)GlobalLock(hGlobal);
DWORD dwSize = GetMetaFileBitsEx(lpPict->hMF, 0 , NULL);
///////////////////////////////
HDC hMetaDC = CreateMetaFile(NULL);
SetMapMode(hMetaDC,MM_HIMETRIC);
CIGraftReportDlg* idlg=(CIGraftReportDlg*)AfxGetMainWnd();
CDC* dc=idlg->GetDC();
SIZE siz;
siz.cx=lpPict->xExt;
siz.cy=lpPict->yExt;
dc->HIMETRICtoLP(&siz);
SetWindowOrgEx(hMetaDC,0,0,NULL);
SetWindowExtEx(hMetaDC,siz.cx,siz.cy,NULL);
COLORREF darkgray = RGB(132,130,132); // dark gray
COLORREF black = RGB(0,0,0); // black
COLORREF lightgray = RGB(198,195,198); // lightgray
COLORREF white = RGB(255,255,255);
HBRUSH darkgraybrush = CreateSolidBrush(darkgray);
HBRUSH whitebrush = CreateSolidBrush(white);
HBRUSH lightgraybrush = CreateSolidBrush(lightgray);
HPEN blackpen = CreatePen(PS_NULL,1,black);
HGDIOBJ oldpen = SelectObject(hMetaDC,blackpen);
Rectangle(hMetaDC,0,0,siz.cx,siz.cy);
SelectObject(hMetaDC,oldpen);
POINT oldviewportorg;
SetViewportOrgEx(hMetaDC,0,0,&oldviewportorg);
SetWindowExtEx(hMetaDC,siz.cx,siz.cy,NULL);
DeleteObject(darkgraybrush);
DeleteObject(lightgraybrush);
DeleteObject(whitebrush);
DeleteObject(blackpen);
PlayMetaFile(hMetaDC,lpPict->hMF);
DeleteMetaFile(lpPict->hMF);
lpPict->hMF=CloseMetaFile(hMetaDC);
///////////////////////////////
LPVOID pvData=::VirtualAlloc(NULL,dwSize,MEM_COMMIT | MEM_RESERVE,PAGE_READWRITE);
UINT ui=GetMetaFileBitsEx(lpPict->hMF,dwSize,pvData);
HGLOBAL hgl = GlobalAlloc(GMEM_MOVEABLE | GMEM_NODISCARD,0);
HRESULT hr = ::CreateStreamOnHGlobal(hgl,TRUE,&istr);
CPictureHolder pic;
pic.CreateFromMetafile(lpPict->hMF,lpPict->xExt,lpPict->yExt);
LONG s=0;
pic.m_pPict->SaveAsFile(istr,TRUE,&s);
pvData = GlobalLock(hgl);
CFile file;
if(file.Open("c:\\mywmf.wmf",CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
{
file.Write(pvData,dwSize+22);
file.Close();
}
GlobalUnlock(hgl);
::VirtualFree(pvData,dwSize,MEM_DECOMMIT | MEM_RELEASE);
}
CloseClipboard();
}