问题一:怎么用VC进行屏幕截图?
答:在VC中进行屏幕截图可以分成几步:
(1) 获得整个屏幕的DC,并创建一个与之兼容的DC。
CDC *pDesktopDC=GetDesktopWindow()->GetDC();
CDC memDC;
memDC.CreateCompatibleDC(pDesktopDC);
(2)创建一个与屏幕大小相同的兼容位图。
CRect RectDesktop;
GetDesktopWindow()->GetClientRect(&RectDesktop);
CBitmap bmpdesktop;
bmpdesktop.CreateCompatibleBitmap(pDesktopDC,RectDesktop.Width(),RectDesktop.Height());
(3)把位图显示在客户区。
CRect rect;
GetClientRect(&rect);
CDC *pDC=this->GetDC();
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),pDesktopDC,0,0,RectDesktop.Width(),RectDesktop.Height(),SRCCOPY);
这样就能完成了简单截图的功能。
猜想:(1)按理来说呢,要想截取某个程序的图像,只要获得该程序的DC,并将之复制一份即可。
(2)那么如果截取屏幕的某一区域的话,只需将区域范围保存下来,然后对复制的位图进行裁剪即可。
问题二:看下面的截图,大家是不是看着很别扭呢?这是使用上面的程序多次截图造成的。咋一看很吃惊,这不是我想要的结果,但事实确实如此。仔细想想也就能明白了。

GetClientRect(&rc);
pDC->Rectangle(&rc);