复制位图到剪贴板 |
| 作者:佚名 来源:不详 更新:2006-8-25 21:05:35 错误报告 我要投稿 |
复制一幅位图到剪贴板相当简单,需要记住的一个是如果位图需要调色盘,你应当将调色盘也复制。
函数一:复制设备相关位图到剪贴板
CopyBitmapToClipboard()函数复制一幅DDB位图到剪贴板,如果提供调色盘它将同时复制调色盘。 注意在最后调用Detach()。这一点很重要,因为此时GDI对象的物主已经传送至剪贴板。
// CopyBitmapToClipboard - Copies a device-dependent bitmap to clipboard // pWnd - Pointer to window that opens the clipboard // bitmap - The device-dependent bitmap // pPal - Pointer to logical palette - Can be NULL // NOTE - GDI objects are detached from bitmap & pPal // as the clipboard owns them after the copy void CopyBitmapToClipboard( const CWnd *pWnd, CBitmap& bitmap, CPalette* pPal ) { ::OpenClipboard(pWnd->GetSafeHwnd()); ::EmptyClipboard() ; if( pPal ) ::SetClipboardData (CF_PALETTE, pPal->GetSafeHandle() ) ; ::SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ; ::CloseClipboard () ; bitmap.Detach(); if( pPal ) pPal->Detach(); } 函数二:复制设备无关位图到剪贴板
CopyDIBToClipboard()函数和CopyBitmapToClipboard()非常相似。内存句柄包含了BITMAPINFO 和位图的位信息,通过GlobalAlloc()分配。
// CopyDIBToClipboard - Copies a device-dependent bitmap to clipboard // pWnd - Pointer to window that opens the clipboard // hDIB - Memory handle that contains BITMAPINFO & bitmap bits // pPal - Pointer to logical palette - Can be NULL // NOTE - GDI objects are detached from bitmap & pPal // as the clipboard owns them after the copy void CopyDIBToClipboard( const CWnd *pWnd, HGLOBAL hDIB, CPalette* pPal ) { ::OpenClipboard(pWnd->GetSafeHwnd()); ::EmptyClipboard(); if( pPal ) ::SetClipboardData (CF_PALETTE, pPal->GetSafeHandle() ) ; ::SetClipboardData (CF_DIB, hDIB ) ; ::CloseClipboard () ; bitmap.Detach(); if( pPal ) pPal->Detach(); }
函数三:复制一幅windows图象到剪贴板
void CopyWndToClipboard( CWnd *pWnd ) { CBitmap bitmap; CClientDC dc(pWnd); CDC memDC; CRect rect;
memDC.CreateCompatibleDC(&dc);
pWnd->GetWindowRect(rect);
bitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height() );
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); memDC.BitBlt(0, 0, rect.Width(),rect.Height(), &dc, 0, 0, SRCCOPY);
pWnd->OpenClipboard() ; EmptyClipboard() ; SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ; CloseClipboard () ;
memDC.SelectObject(pOldBitmap); bitmap.Detach(); }
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |