Как поместить содержимое экрана в буфер обмена
(Clipboard)
Автор: Joseph M. Newcomer
ToClip.h:
void toClipboard(CWnd * wnd, BOOL FullWnd);
ToClip.cpp
#include "stdafx.h"
#include "toclip.h"
/****************************************************************
* toClipboard
* Входные значения:
* CWnd * wnd: Окно, содержимое которого будет передано в
* буфер обмена (clipboard)
* BOOL FullWnd: TRUE для всего окна,
* FALSE для клиентской области
* На выходе
*
* Эффект:
* Копирует содержимое клиентской области или окна
* в буфер обмена (clipboard) в формате CF_BITMAP.
*****************************************************************/
void toClipboard(CWnd * wnd, BOOL FullWnd)
{
CDC dc;
if(FullWnd)
{ /* всё окно */
HDC hdc = ::GetWindowDC(wnd->m_hWnd);
dc.Attach(hdc);
} /* всё окно */
else
{ /* только клиентская часть */
HDC hdc = ::GetDC(wnd->m_hWnd);
dc.Attach(hdc);
} /* только клиентская часть */
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
}
|