Как поместить содержимое экрана в буфер обмена
|
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 } |