Introduction
I needed to display a bitmap from the clipboard which is in the
CF_DIB
format in one of my applications. The standard MSDN docs did not have any
information on how to do this. Also, all the other clipboard articles here had code to
write CF_DIB
to the clipboard, but not read it. Also I already had
some existing code to display a metafile from the clipboard, both of which may be of use.
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() ;
}
That's it! Enjoy!
A research and development programmer working for a pharmaceutical instrument company for the past 17 years.
I am one of those lucky people who enjoys his work and spends more time than he should either doing work or reseaching new stuff. I can also be found on playing DDO on the Cannith server (Send a tell to "Maetrim" who is my current main)
I am also a keep fit fanatic, doing cross country running and am seriously into [url]http://www.ryushinkan.co.uk/[/url] Karate at this time of my life, training from 4-6 times a week and recently achieved my 1st Dan after 6 years.