下面的代码(屏幕截图),哪位老大给解释一下呀?
[大楚] 2005-03-28 03:36:07 ///////截取屏幕图像的///////////
//主要是这部分看不明白,刚学VC,各位老大多多指点:) 谢谢
void CShowBMPView::OnCopySrc()
{
CDC MemDc,ScrDc; // 屏幕和内存设备描述表
//得到屏幕分辨率
int ScrWidth = GetSystemMetrics(SM_CXSCREEN);
int ScrHeight = GetSystemMetrics(SM_CYSCREEN);
//1 创建一个屏幕DC
ScrDc.CreateDC("display",NULL,NULL,NULL);
//2 创建一个与屏幕DC相兼容的内存DC
MemDc.CreateCompatibleDC(&ScrDc);
//3 创建与屏幕DC相兼容的位图
ScrBmp.Detach();
ScrBmp.CreateCompatibleBitmap(&ScrDc,ScrWidth,ScrHeight);
//4 将位图指针放入内存DC中,并得到一个pOld位图指针
//??? 仅仅将位图指针放到内存DC中吗?
CBitmap* pOld = MemDc.SelectObject(&ScrBmp);
//5 将位图由屏幕DC拷贝到内存DC中
//??? 这次是将位图数据放入到了内存DC中吧?
MemDc.BitBlt(0,0,ScrWidth,ScrHeight,&ScrDc,0,0,SRCCOPY);
//???经过(4)和(5)是不是已经将位图保存到了ScrBmp中啦?
//倒来倒去的,清楚呀,:(
//6 将位图放入内存DC中
//????为什么又pOld放了进去呀
MemDc.SelectObject(pOld);
CClientDC pDC(this);
OnDraw(&pDC);
}
//////////显示图像的/////
void CShowBMPView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
CRect trect;
GetClientRect(&trect);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldB=MemDC.SelectObject(&ScrBmp);
//显示大小 可自己定
pDC->BitBlt(0,0,trect.Width(),trect.Height(),&MemDC,0,0,SRCCOPY);
}