Click here to Skip to main content
Click here to Skip to main content

Screen Capture to the Clipboard

, 5 Apr 2001
Rate this:
Please Sign up or sign in to vote.
How do you capture the bitmap of a window? This little download shows how, and places the bitmap on the clipboard.

Introduction

One of the common questions that I find on the microsoft.public forums is "How do I get a bitmap of a window on the screen?" Well, here's a little subroutine I used extensively in writing Win32 Programming, because I realized that for the number of illustrations I wanted for the book, there was no hope of doing screen captures and then hand-editing just the control I wanted to show. So all my Explorers have a little button somewhere that performs a screen capture of the example window and drops it into the clipboard. I could then paste it into the document, or paste it into an editor and save it as a TIFF or JPEG as well.

ToClip.h:

void toClipboard(CWnd * wnd, BOOL FullWnd);

ToClip.cpp

#include "stdafx.h"
#include "toclip.h" 
/****************************************************************
*                                 toClipboard
* Inputs:
*       CWnd * wnd: Window whose contents are to be sent 
*                   to the clipboard
*       BOOL FullWnd: TRUE for entire window, 
*                     FALSE for client area
* Result: void
*       
* Effect: 
*       Copies the contents of the client area or the window
*       to the clipboard in CF_BITMAP format.
*****************************************************************/

void toClipboard(CWnd * wnd, BOOL FullWnd)
    {
     CDC dc;
     if(FullWnd)
        { /* full window */
         HDC hdc = ::GetWindowDC(wnd->m_hWnd);
         dc.Attach(hdc);
        } /* full window */
     else
        { /* client area only */
         HDC hdc = ::GetDC(wnd->m_hWnd);
         dc.Attach(hdc);
        } /* client area only */

     CDC memDC;
     memDC.CreateCompatibleDC(&dc);

     CBitmap bm;
     CRect r;
     if(FullWnd)
        wnd->GetWindowRect(&r);
     else
         wnd->GetClientRect(&r);

     CString s;
     wnd->GetWindowText(s);
     CSize sz(r.Width(), r.Height());
     bm.CreateCompatibleBitmap(&dc, sz.cx, sz.cy);
     CBitmap * oldbm = memDC.SelectObject(&bm);
     memDC.BitBlt(0, 0, sz.cx, sz.cy, &dc, 0, 0, SRCCOPY);

     wnd->GetParent()->OpenClipboard();
     ::EmptyClipboard();
     ::SetClipboardData(CF_BITMAP, bm.m_hObject);
     CloseClipboard();

     memDC.SelectObject(oldbm);
     bm.Detach();  // make sure bitmap not deleted with CBitmap object
    }

The views expressed in these essays are those of the author, and in no way represent, nor are they endorsed by, Microsoft.

Send mail to newcomer@flounder.com with questions or comments about this article.
Copyright © 1999 All Rights Reserved
www.flounder.com/mvp_tips.htm

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Joseph M. Newcomer

United States United States
No Biography provided

Comments and Discussions

 
GeneralTake a snapshot of a hidden window PinmemberMember 368961631-Mar-08 3:39 
GeneralRe: Take a snapshot of a hidden window PinmemberJoseph M. Newcomer31-Mar-08 4:02 
GeneralRe: Take a snapshot of a hidden window PinmemberMember 368961631-Mar-08 4:58 
GeneralRe: Take a snapshot of a hidden window PinmemberJoseph M. Newcomer31-Mar-08 7:53 
GeneralRe: Take a snapshot of a hidden window PinmemberMember 368961631-Mar-08 8:20 
GeneralRe: Take a snapshot of a hidden window PinmemberJoseph M. Newcomer31-Mar-08 12:43 
GeneralCapture MineSweeper Window PinmemberSwimmerDave20-Jun-06 7:32 
GeneralRe: Capture MineSweeper Window Pinmembervikrant kpr25-Jan-08 0:25 
GeneralOther bitmap formats PinmemberNeWi13-Oct-05 7:14 
GeneralRe: Other bitmap formats PinmemberNeWi13-Oct-05 7:35 
GeneralRe: Other bitmap formats PinmemberJoseph M. Newcomer18-Oct-05 7:46 
Generalwindows on top interfere Pinmemberbbrehm0430-Aug-05 16:10 
GeneralRe: windows on top interfere PinmemberJoseph M. Newcomer5-Sep-05 16:07 
GeneralRe: windows on top interfere Pinmemberbbrehm046-Sep-05 14:13 
GeneralCapture in Win32 - code Pinmemberpowerpop30-Jun-05 16:20 
QuestionHow to send captured screen shot through a socket? Pinmemberbijut6-May-05 7:39 
AnswerRe: How to send captured screen shot through a socket? PinmemberJames R. Twine6-May-05 8:18 
AnswerRe: How to send captured screen shot through a socket? PinmemberJoseph M. Newcomer6-May-05 11:31 
AnswerRe: How to send captured screen shot through a socket? Pinmemberjags_vc8-May-05 22:52 
Questionhow to get image in memory? Pinmemberjags_vc25-Feb-05 1:00 
AnswerRe: how to get image in memory? PinmemberJoseph M. Newcomer25-Feb-05 6:18 
GeneralRe: how to get image in memory? Pinmemberjags_vc27-Feb-05 18:13 
GeneralRe: how to get image in memory? PinmemberJoseph M. Newcomer27-Feb-05 22:02 
GeneralRe: how to get image in memory? Pinmemberjags_vc7-Mar-05 1:13 
GeneralRe: how to get image in memory? PinmemberJoseph M. Newcomer9-Mar-05 10:40 
GeneralAbout mouse pointer PinmemberRodrigo Vaz4-Apr-04 17:09 
GeneralRe: About mouse pointer PinmemberJoseph M. Newcomer4-Apr-04 19:35 
GeneralRe: About mouse pointer PinsussRodrigo Vaz6-Apr-04 19:25 
GeneralRe: About mouse pointer PinmemberJoseph M. Newcomer6-Apr-04 21:12 
GeneralRe: About mouse pointer PinmemberRodrigo Vaz7-Apr-04 18:29 
GeneralRe: About mouse pointer PinmemberAndyzyx4-Sep-04 17:24 
GeneralRe: About mouse pointer PinmemberJoseph M. Newcomer5-Sep-04 10:57 
QuestionHow capture a DirectX or OpenGL window? Pinmemberpeterbing22-Feb-04 21:17 
AnswerRe: How capture a DirectX or OpenGL window? PinmemberJoseph M. Newcomer22-Feb-04 22:13 
GeneralRe: How capture a DirectX or OpenGL window? PinmemberNeWi13-Oct-05 7:29 
Questionhow to save clipboard to file?? PinsussAnonymous1-Jan-04 20:41 
AnswerRe: how to save clipboard to file?? PinmemberJoseph M. Newcomer1-Jan-04 20:55 
AnswerRe: how to save clipboard to file?? PinsussAnonymous14-Jan-04 8:08 
GeneralRe: how to save clipboard to file?? PinmemberJoseph M. Newcomer14-Jan-04 8:58 
AnswerRe: how to save clipboard to file?? PinmemberNeWi13-Oct-05 7:18 
QuestionHow to convert to non-mfc? PinmemberTommy2k9-Dec-03 11:22 
AnswerRe: How to convert to non-mfc? PinmemberNeWi13-Oct-05 7:25 
QuestionHow can i detect a global screen capture? PinmemberMiguel Lopes27-Oct-03 13:38 
AnswerRe: How can i detect a global screen capture? PinmemberJoseph M. Newcomer2-Nov-03 13:29 
QuestionHow can I print it? PinmemberAlex Evans30-Sep-03 14:32 
GeneralCapturing the whole window PinsussArne Diegenbach25-Sep-03 11:35 
GeneralI rate 5 for this article! Pinmemberxxxyyyzzz12-Feb-03 10:17 
Generalsomething that you don't need PinsussAnonymous10-Oct-02 3:44 
GeneralRe: something that you don't need PinmemberJoseph M. Newcomer10-Oct-02 15:23 
Generalthere's a bug Pinsusspangtao17-Jul-02 17:45 

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.

| Advertise | Privacy | Mobile
Web01 | 2.8.140821.2 | Last Updated 6 Apr 2001
Article Copyright 2001 by Joseph M. Newcomer
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid