【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

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