关于MFC 简单截取程序界面的程序:
已经测试通过
void CMFCExcle1Dlg::OnBnClickedButton8()
{
// TODO: Add your control notification handler code here
CWnd * wnd = FromHandle(GetSafeHwnd()); // 将当前窗口的句柄转化为CWnd
CopyBitmapToClipboard(wnd, FALSE); // 调用复制函数
}
//介绍第一个函数:功能是将某个窗口的图像复制到剪切板。
void CMFCExcle1Dlg::CopyBitmapToClipboard(CWnd wnd, BOOL FullWnd)
{
CDC dc;
if (FullWnd)
{
/ 抓取整个窗口/
dc = new CWindowDC(wnd);
}
else
{
/* 仅抓取客户区时*/
dc = new CClientDC(wnd);
}
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);
//直接调用OpenClipboard(),而不用wnd->GetParent()->OpenClipboard();
wnd->OpenClipboard();
::EmptyClipboard();
::SetClipboardData(CF_BITMAP, bm.m_hObject);
CloseClipboard();
//恢复原始环境
memDC.SelectObject(oldbm);
bm.Detach();
delete dc;
}