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

Screen Capture to the Clipboard

By , 5 Apr 2001
 

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

About the Author

Joseph M. Newcomer
United States United States
Member
No Biography provided

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

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralTake a snapshot of a hidden windowmemberMember 368961631 Mar '08 - 3:39 
GeneralRe: Take a snapshot of a hidden windowmemberJoseph M. Newcomer31 Mar '08 - 4:02 
GeneralRe: Take a snapshot of a hidden windowmemberMember 368961631 Mar '08 - 4:58 
GeneralRe: Take a snapshot of a hidden windowmemberJoseph M. Newcomer31 Mar '08 - 7:53 
GeneralRe: Take a snapshot of a hidden windowmemberMember 368961631 Mar '08 - 8:20 
GeneralRe: Take a snapshot of a hidden windowmemberJoseph M. Newcomer31 Mar '08 - 12:43 
GeneralCapture MineSweeper WindowmemberSwimmerDave20 Jun '06 - 7:32 
GeneralRe: Capture MineSweeper Windowmembervikrant kpr25 Jan '08 - 0:25 
GeneralOther bitmap formatsmemberNeWi13 Oct '05 - 7:14 
GeneralRe: Other bitmap formatsmemberNeWi13 Oct '05 - 7:35 
GeneralRe: Other bitmap formatsmemberJoseph M. Newcomer18 Oct '05 - 7:46 
Generalwindows on top interferememberbbrehm0430 Aug '05 - 16:10 
GeneralRe: windows on top interferememberJoseph M. Newcomer5 Sep '05 - 16:07 
GeneralRe: windows on top interferememberbbrehm046 Sep '05 - 14:13 
GeneralCapture in Win32 - codememberpowerpop30 Jun '05 - 16:20 
QuestionHow to send captured screen shot through a socket?memberbijut6 May '05 - 7:39 
AnswerRe: How to send captured screen shot through a socket?memberJames R. Twine6 May '05 - 8:18 
AnswerRe: How to send captured screen shot through a socket?memberJoseph M. Newcomer6 May '05 - 11:31 
AnswerRe: How to send captured screen shot through a socket?memberjags_vc8 May '05 - 22:52 
Questionhow to get image in memory?memberjags_vc25 Feb '05 - 1:00 
AnswerRe: how to get image in memory?memberJoseph M. Newcomer25 Feb '05 - 6:18 
GeneralRe: how to get image in memory?memberjags_vc27 Feb '05 - 18:13 
GeneralRe: how to get image in memory?memberJoseph M. Newcomer27 Feb '05 - 22:02 
GeneralRe: how to get image in memory?memberjags_vc7 Mar '05 - 1:13 
GeneralRe: how to get image in memory?memberJoseph M. Newcomer9 Mar '05 - 10:40 

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

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130513.1 | Last Updated 6 Apr 2001
Article Copyright 2001 by Joseph M. Newcomer
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid