Click here to Skip to main content
Licence CPOL
First Posted 11 Dec 2002
Views 69,198
Bookmarked 41 times

Getting a CF_DIB or CF_METAFILEPICT from the clipboard and displaying it

By | 11 Dec 2002 | Article
Example code to display a CF_DIB or CF_METAFILEPICT from the clipboard

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

That's it! Enjoy!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Roger Allen

Software Developer (Senior)
Sirius Analytical Instruments
United Kingdom United Kingdom

Member

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.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralTypical How People Who Post Here Dont Test It Pinmemberxox_c0bra_xox7:44 8 Sep '09  
GeneralPaste CF_METAFILEPICT in a rtf dialog box app PinmemberFilomela22:07 24 Mar '04  
Generalbug PinsussAnonymous13:42 3 Nov '03  
GeneralRe: bug PinmemberRepsej3:21 9 Dec '04  
QuestionLocal copy of clipboard memory ? Pinmemberstorep23:03 28 Oct '03  
AnswerRe: Local copy of clipboard memory ? PinsussAnonymous12:03 12 May '04  
GeneralMr.Roger Allen, I need your help!!Come on... Pinmembersuncho0:17 6 Aug '03  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120517.1 | Last Updated 12 Dec 2002
Article Copyright 2002 by Roger Allen
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid