【GDI】在Picture控件上使用粘貼板

學習記錄:在基於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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章