读取保存在剪切板中的图片(转)

来源:互联网 发布:windows linux shell 编辑:程序博客网 时间:2024/04/30 13:50

Getting a CF_DIB or CF_METAFILEPICT from the clipboard and displaying it

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.

// 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() ;
    }

原创粉丝点击