从剪贴板中获取CF_DIB或CF_METAFILEPICT并显示它
介绍 我需要显示一个位图从剪贴板是在 CF_DIB格式在我的一个应用程序。标准的MSDN文档中没有 关于如何做到这一点的信息。另外,这里所有其他剪贴板文章都有代码 将CF_DIB写入剪贴板,但不读取它。而且我已经有了 一些现有的代码,用于显示剪贴板中的元文件,两者都可能有用
。 隐藏,收缩,复制Code
// pDC is the DC to draw to // metafile is a CRect to display the DIB/Metafile in CRect metafile(0, 0, 100, 100); // example location if (IsClipboardFormatAvailable(CF_METAFILEPICT)) { // play a metafile from the clipboard if available 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)) { // a DIB is in the clipboard, draw it out GLOBALHANDLE hGMem ; LPBITMAPINFO lpBI ; void* pDIBBits; OpenClipboard() ; hGMem = GetClipboardData(CF_DIB) ; lpBI = (LPBITMAPINFO)GlobalLock(hGMem) ; // point to DIB bits after BITMAPINFO object 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() ; }
就是这样!享受吧! 本文转载于:http://www.diyabc.com/frontweb/news240.html