vc cdc 截取屏幕

来源:百度知道 编辑:UC知道 时间:2024/06/01 10:12:29
我在ondraw()里面这么做的

CDC scrdc,memdc;
scrdc.CreateDC("DISPLAY",NULL,NULL,NULL);
memdc.CreateCompatibleDC(&scrdc);
memdc.BitBlt(20,20,300,300,&scrdc,0,0,SRCCOPY);
pDC->BitBlt(20,20,300,300,&memdc,0,0,SRCCOPY);
不能显示截取的区域。

但是如果这样:
CDC scrdc,memdc;
scrdc.CreateDC("DISPLAY",NULL,NULL,NULL);
memdc.CreateCompatibleDC(&scrdc);
memdc.BitBlt(20,20,300,300,&scrdc,0,0,SRCCOPY);
pDC->BitBlt(20,20,300,300,&scrdc,0,0,SRCCOPY);
可以显示。
为什么通过一个兼容的dc就不行了呢?请说明白点。在线等;

兼容DC就象一部照相机,你底片都没装,拍不出照片的。兼容DC的底片就是兼容位图。
1)CDC scrdc,memdc;
2)scrdc.CreateDC("DISPLAY",NULL,NULL,NULL);
3)memdc.CreateCompatibleDC(&scrdc);
4)CBitmap memBMP;//做底片
memBMP.CreateCompatibleBitmap(&scrdc, 300, 300);
5)memDC.SelectObject(&memBMP);//装底片
//少了4),5)两步
6)memDC.BitBlt(0, 0, 300, 300, &scrdc, 0, 0, SRCCOPY);
7)pDC->BitBlt(20,20,300,300,&memDC,0,0,SRCCOPY);
补充:怎么回事,看的时候都没人回答,贴出来时,已经有这么多人了?眼花了!

还没研究这么深入,似是而非的感觉

CPaintDC dc(this);

CDC scrdc,memdc;
CBitmap buf;

scrdc.CreateDC(L"DISPLAY",NULL,NULL,NULL);
memdc.CreateCompatibleDC(&scrdc);
buf.CreateCompatibleBitmap(&scrdc,300,300);
memdc.SelectObject(buf);
memdc.BitBlt(20,20,300,300,&scrdc,0,0,SRCCOPY);
dc.BitBlt(20,20,300,300,&memdc,0,0,SRCCOPY);

光有CreateCompatibleDC是不够的,要有CreateCompatibleBitmap
然后 SelectObject

因为你兼容DC是没有位图的,所以默认只有1*1大小,所以显示出来是黑色的.

你要先创建一个