复制位图到剪贴板

2014-11-23 20:10:08 · 作者: · 浏览: 11

复制一幅位图到剪贴板相当简单,需要记住的一个是如果位图需要调色盘,你应当将调色盘也复制。

函数一:复制设备相关位图到剪贴板

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 &