+ -
当前位置:首页 → 问答吧 → 关于CDC保存内容到内存DC,再粘贴出来的疑问。

关于CDC保存内容到内存DC,再粘贴出来的疑问。

时间:2011-12-09

来源:互联网

C/C++ code

CBrush MyBrush;
MyBrush.CreateSolidBrush(RGB(255, 0, 0));

CDC old;
old.CreateCompatibleDC(this->GetDC());
old.BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), this->GetDC(), rc.left, rc.top, SRCCOPY);
                

CClientDC dc(this);
dc.FillRect(rc, &MyBrush);
dc.BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &old, rc.left, rc.top, SRCCOPY);



想要实现的效果是从当前DC中拷贝出一部分放到内存DC。
然后处理一下。
再显示出来。
上面代码想要实现的效果是rc区域不变。
可是出来的效果是rc区域被涂红。
问题在哪呢。
对DC这东西不太熟。
原来一知半解。
现在忘了差不多了。

作者: na2650945   发布时间: 2011-12-09

要创建一个HBITMAP(CBitmap),内存DC要SelectObject把它选入。否则你没有缓冲区来保存啊!

作者: ndy_w   发布时间: 2011-12-09

你没有建立内存位图

作者: yhp1888   发布时间: 2011-12-09

C/C++ code

CBrush MyBrush;
MyBrush.CreateSolidBrush(RGB(255, 0, 0));

CDC old;
old.CreateCompatibleDC(this->GetDC());
                
CBitmap oldBitmap;
oldBitmap.CreateCompatibleBitmap(&old, rc.Width(), rc.Height());
old.SelectObject(oldBitmap);
old.BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), this->GetDC(), rc.left, rc.top, SRCCOPY);

CClientDC dc(this);
dc.FillRect(rc, &MyBrush);
dc.BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &old, rc.left, rc.top, SRCCOPY);


这次还有问题么?
还是没有达到我的效果呀。

作者: na2650945   发布时间: 2011-12-09

贴完图把以前的再选回去
MemDC.SelectObject(pOldBitmap);
==============================================================================
This function returns the previously selected object of the specified type. An application should always replace a new object with the original, default object after it has finished drawing with the new object. 

作者: echoyin59   发布时间: 2011-12-09

热门下载

更多