拷贝位图到剪切板   函数一:拷贝与设备相关的位图到剪切板 函数CopyBitmapToClipboard()将实现拷贝 DDB到剪切扳。如果支持调色板,它 同时拷贝调色板。注意 结束时要调用 Detach()函数,因为在这之前GDI object 已被转移到剪切板,要恢复。 // CopyBitmapToClipboard - 拷贝DDB到剪切板 // pWnd - 指向打开剪切板的窗口 // bitmap - DDB // pPal - 指向逻辑调色板,可为NULL 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(); } 函数二:拷贝与设备无关的位图到剪切板。 当DIB位图显示时,DIB位图的BITMAPINFO与位图信息已经被GlobalAlloc()函数分配。在拷贝位图到剪切板时这个句柄将被剪切板获得。 // CopyDIBToClipboard - 拷贝位图到剪切板 // pWnd - 指向打开剪切板的窗口 // hDIB - 内存句柄包括BITMAPINFO 与 bitmap bits // pPal - 指向一个逻辑调色板,可为NULL 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(); } 函数三:拷贝image到剪切板 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(); }