學習記錄:在基於Dialog程序中,使用粘貼板拷貝BITMAP到另一Picture控件。
環境
VC2010
步驟
1、初始化時在Picture控件A中繪圖。
//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□//
//描述:在IDC_STATIC_BITMAP1控件中繪製
//參數:
//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□//
void CClipboardTestDlg::Draw()
{
CBitmap bitmap, *pOldBitmap;
BITMAP bmInfo;
CDC *pDC, dcMemory;
CRect rect;
CWnd *pWnd;
pWnd = GetDlgItem(IDC_STATIC_BITMAP1);
//獲取DC
pDC = pWnd->GetDC();
//獲得客戶區範圍
pWnd->GetClientRect(&rect);
bitmap.LoadBitmap(IDB_BITMAP_EIGHTHORSES);
bitmap.GetBitmap(&bmInfo);
dcMemory.CreateCompatibleDC(pDC);
pOldBitmap = dcMemory.SelectObject(&bitmap);
pDC->BitBlt(rect.left, rect.top, bmInfo.bmWidth, bmInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);
bitmap.DeleteObject();
dcMemory.SelectObject(pOldBitmap);
dcMemory.DeleteDC();
//釋放DC
ReleaseDC(pDC);
}
2、拷貝至粘貼板
//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□//
//描述:複製
//參數:
//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□//
void CClipboardTestDlg::OnBnClickedButtonCopy()
{
CBitmap bitmap, *pOldBitmap;
CDC dcMem;
long lWidth, lHeight;
CDC *pDC;
//複製區域
lWidth = 200;
lHeight = 200;
pDC = GetDlgItem(IDC_STATIC_BITMAP1)->GetDC();
dcMem.CreateCompatibleDC(pDC);
bitmap.CreateCompatibleBitmap(pDC, lWidth, lHeight);
pOldBitmap = dcMem.SelectObject(&bitmap);
dcMem.BitBlt(0, 0, lWidth, lHeight, pDC, 0, 0, SRCCOPY);
//複製至粘貼板
OpenClipboard();
EmptyClipboard();
SetClipboardData(CF_BITMAP, bitmap.GetSafeHandle());
CloseClipboard();
ReleaseDC(pDC);
GetDlgItem(IDC_BUTTON_PASTE)->EnableWindow(TRUE);
}
3、粘貼至另一Picture控件。
//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□//
//描述:粘貼
//參數:
//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□//
void CClipboardTestDlg::OnBnClickedButtonPaste()
{
HBITMAP hBitmap;
BITMAP bmInfo;
CDC *pDC;
CDC dcMemory;
CBitmap bitmap;
pDC = GetDlgItem(IDC_STATIC_BITMAP2)->GetDC();
if (!dcMemory.CreateCompatibleDC(pDC))
{
ReleaseDC(pDC);
return;
}
//從粘貼板取出BITMAP
OpenClipboard();
hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
bitmap.Attach(hBitmap);
bitmap.GetBitmap(&bmInfo);
dcMemory.SelectObject(&bitmap);
pDC->BitBlt(0, 0, bmInfo.bmWidth, bmInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);
CloseClipboard();
dcMemory.DeleteDC();
ReleaseDC(pDC);
}
4、效果。
代碼下載:https://download.csdn.net/download/sunriver2000/12187515