求助 如何将屏幕上的画面载入到缓存DC中?

Watchmen_ 2012-06-04 09:16:16
想将屏幕上画的矩形载入到缓存DC中,然后再从缓存DC中将位

图移位后导出到屏幕上。

以下是我写的代码,运行时没有达到效果,好像并没有将屏

幕上画的矩形载入到缓存DC中。还请大家给指点一下!


void CMycure_1View::OnDraw(CDC* pDC)
{
CMycure_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CDC dc;

dc.CreateCompatibleDC(pDC);

pDC->Rectangle(900,200,1000,300);

dc.BitBlt(0,0,1024,768,pDC,0,0,SRCCOPY);

pDC->BitBlt(0,0,1024,768,&dc,400,0,SRCCOPY);

}
...全文
96 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Watchmen_ 2012-06-04
请大家看一下这段代码,就实现了我想要的功能,可惜需要载入Bitmap,
不明白为什么在载入Bitmap后就可以把在屏幕上画的矩形载入到缓存DC中,请大家帮帮忙给解释一下!

void CWwwwwwwView::OnDraw(CDC* pDC)
{
CWwwwwwwDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CBitmap bitmap;

CDC dc;

dc.CreateCompatibleDC(pDC);

bitmap.LoadBitmap(IDB_BITMAP1);

dc.SelectObject(& bitmap);

pDC->BitBlt(0,0,1024,768,&dc,0,0,SRCCOPY);

pDC->Rectangle(900,200,1000,300);

dc.BitBlt(0,0,1024,768,pDC,0,0,SRCCOPY);

pDC->BitBlt(0,0,1024,768,&dc,300,0,SRCCOPY);

}
回复
Watchmen_ 2012-06-04
[Quote=引用 1 楼 的回复:]
dc.BitBlt(0,0,1024,768,pDC,0,0,SRCCOPY);
这句话不对,你画的矩形900,200,1000,300,那么你拷贝的顶点也应该跟着变
dc.BitBlt(0,0,1024,768,pDC,900,200,SRCCOPY);
[/Quote]

"袍哥"我是想把整个屏幕都拷贝到缓存DC中。
回复
三条猫 2012-06-04
dc.BitBlt(0,0,1024,768,pDC,0,0,SRCCOPY);
这句话不对,你画的矩形900,200,1000,300,那么你拷贝的顶点也应该跟着变
dc.BitBlt(0,0,1024,768,pDC,900,200,SRCCOPY);
回复
Watchmen_ 2012-06-04
[Quote=引用 8 楼 的回复:]
酱紫啊……
[/Quote]

呵呵,用点胶水就行。会和浆子的都快没有了吧!
回复
Watchmen_ 2012-06-04
[Quote=引用 7 楼 的回复:]
dc你就当做画板,bitmap你就当做画布,要用画板作画,你得把画布给铺上吧
[/Quote]

呵呵谢谢“袍哥”。
回复
微wx笑 2012-06-04
酱紫啊……
回复
三条猫 2012-06-04
dc你就当做画板,bitmap你就当做画布,要用画板作画,你得把画布给铺上吧
回复
Watchmen_ 2012-06-04
[Quote=引用 4 楼 的回复:]
你在创建dc之后,还要再创建一个bitmap,
bitmap_.CreateCompatibleBitmap(&dc, width_, height_);

然后选择使用bitmap
dc.SelectObject(&bitmap);就可以拷贝了
[/Quote]

谢谢“袍哥”,功能实现了,

还想请教一下“袍哥”:
bitmap_.CreateCompatibleBitmap(&dc, width_, height_);

dc.SelectObject(&bitmap);

这两句的实质作用是什么?

为什么直接不能在缓存DC中直接画图然后拷贝到屏幕上显示?
回复
buyong 2012-06-04
that's right
[Quote=引用 4 楼 的回复:]

你在创建dc之后,还要再创建一个bitmap,
bitmap_.CreateCompatibleBitmap(&dc, width_, height_);

然后选择使用bitmap
dc.SelectObject(&bitmap);就可以拷贝了
[/Quote]
回复
三条猫 2012-06-04
你在创建dc之后,还要再创建一个bitmap,
bitmap_.CreateCompatibleBitmap(&dc, width_, height_);

然后选择使用bitmap
dc.SelectObject(&bitmap);就可以拷贝了
回复
发动态
发帖子
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
社区公告
暂无公告