从剪贴板中获取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

posted @ 2020-08-04 09:29  Dincat  阅读(1026)  评论(0编辑  收藏  举报