Introduction
If you want
to display a bitmap
from the clipboard
which is in the CF_DIB
format in one of my
applications. Also, all the other clipboard
articles here had
code to write CF_DIB
to the clipboard,
but not read it. So the following codes will be very
useful.
Collapse
CRect metafile(0, 0, 100, 100);
if (IsClipboardFormatAvailable(CF_METAFILEPICT))
{
GLOBALHANDLE hGMem ;
LPMETAFILEPICT lpMFP ;
OpenClipboard() ;
hGMem = GetClipboardData(CF_METAFILEPICT) ;
lpMFP = (LPMETAFILEPICT)GlobalLock(hGMem) ;
pDC->SaveDC() ;
pDC->SetMapMode(lpMFP->mm) ;
pDC->SetViewportExt(metafile.Width(), metafile.Height()) ;
pDC->SetViewportOrg(metafile.left, metafile.top) ;
pDC->PlayMetaFile(lpMFP->hMF) ;
VERIFY(pDC->RestoreDC(-1)) ;
GlobalUnlock(hGMem) ;
CloseClipboard() ;
}
if (IsClipboardFormatAvailable(CF_DIB))
{
GLOBALHANDLE hGMem ;
LPBITMAPINFO lpBI ;
void* pDIBBits;
OpenClipboard() ;
hGMem = GetClipboardData(CF_DIB) ;
lpBI = (LPBITMAPINFO)GlobalLock(hGMem) ;
pDIBBits = (void*)(lpBI + 1);
::StretchDIBits(pDC->m_hDC,
metafile.left, metafile.top,
metafile.Width(), metafile.Height(),
0, 0, lpBI->bmiHeader.biWidth,
lpBI->bmiHeader.biHeight,
pDIBBits, lpBI, DIB_RGB_COLORS, SRCCOPY);
GlobalUnlock(hGMem) ;
CloseClipboard() ;
}