那图鲁扮演者:Getting a CF_DIB or CF_METAFILEPICT from the ...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 19:46:24
 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() ;
    }