截屏到剪切板

 
HBITMAP CExampleDlg::CopyScrToBit(LPRECT lpRect)
{
	HDC       	hScrDC, hMemDC;      
	HBITMAP   hOldBitmap;   
	int       	nX, nY, nX2, nY2;      
	int       	nWidth, nHeight;      
	int       	xScrn, yScrn;         
	if (IsRectEmpty(lpRect))
		return NULL;
	hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
	hMemDC = CreateCompatibleDC(hScrDC);
	nX = lpRect->left;
	nY = lpRect->top;
	nX2 = lpRect->right;
	nY2 = lpRect->bottom;
	xScrn = GetDeviceCaps(hScrDC, HORZRES);
	yScrn = GetDeviceCaps(hScrDC, VERTRES);
	if (nX < 0) 			nX = 0;
	if (nY < 0)			    nY = 0;
	if (nX2 > xScrn)		nX2 = xScrn;
	if (nY2 > yScrn)		nY2 = yScrn;
	nWidth = nX2 - nX;
	nHeight = nY2 - nY;
	hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
	hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
	ShowWindow(SW_HIDE);
	BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY);
	hBitmap =(HBITMAP)SelectObject(hMemDC, hOldBitmap);
	DeleteDC(hScrDC);
	DeleteDC(hMemDC);
	ShowWindow(SW_SHOW);
	return hBitmap;
}

void CExampleDlg::OnBtnCopyscreen() 
{
	// TODO: Add your control notification handler code here
	CRect rc;
	GetDesktopWindow()->GetWindowRect(&rc);
	hBitmap=CopyScrToBit(&rc);
}

void CExampleDlg::OnBtnClipboard() 
{
	// TODO: Add your control notification handler code here
	if (OpenClipboard())
	{
		EmptyClipboard();
		SetClipboardData(CF_BITMAP, hBitmap);
		CloseClipboard();
	}
}


2.BMP 顯示

	CPaintDC dc(this); // device context for painting
	
	//獲得窗口大小
	CRect r;
	GetClientRect(&r);

	//填充背景
	HBRUSH brush = (HBRUSH)::GetStockObject(GRAY_BRUSH); 
	::FillRect(dc.m_hDC,&r,brush);
	dc.SetStretchBltMode(HALFTONE);

	//將位圖選進設備場景中
	CDC memdc;
	memdc.CreateCompatibleDC( &dc );
	CBitmap* pOldBmp= memdc.SelectObject(&m_bmpImage);
	
	//獲得位圖參數
	BITMAP bmp;
	m_bmpImage.GetBitmap(&bmp);

	//開始縮放
	switch(m_nStrechType)
	{
	case Type_1_1://1:1
			dc.BitBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,SRCCOPY);
		break;
	case Type_FULL_X://按寬度
		dc.StretchBlt(r.left,r.top,r.Width(),bmp.bmHeight,&memdc,0,0,
			bmp.bmWidth,bmp.bmHeight,SRCCOPY);
		break;
	case Type_FULL_Y://按高度
		dc.StretchBlt(r.left,r.top,bmp.bmWidth,r.Height(),&memdc,0,0,
			bmp.bmWidth,bmp.bmHeight,SRCCOPY);
		break;
	case Type_FULL://充滿窗口
		dc.StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,
			bmp.bmWidth,bmp.bmHeight,SRCCOPY);
		break;
	case Type_CENTER://居中顯示,大小爲窗口的一半
		dc.StretchBlt(r.Width()/4,r.Height()/4,r.Width()/2,r.Height()/2,&memdc,0,0,
			bmp.bmWidth,bmp.bmHeight,SRCCOPY);
		break;
	}
	
	//還原
	memdc.SelectObject(pOldBmp);


 

發佈了51 篇原創文章 · 獲贊 23 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章