我在往窗口上绘图时,想先把背景区域保存起来,以便重绘时直接显示该背景区域,以避免用InvalidateRect,但是背景被保存为黑色区域了?

airhawk 2005-07-10 11:40:31
各位高手:
我在往窗口上绘图时,想先把背景区域保存起来,以便重绘时直接显示该背景区域,以避免用InvalidateRect,但是背景被保存为黑色区域了,请问为什么?
我的代码如下:
if(bBackground)
{//要保存背景色
if( m_background.m_hObject)
{
m_background.DeleteObject();
}
CDC memDC;
CBitmap* pOldBmp = NULL;

memDC.CreateCompatibleDC(pDC);
m_background.CreateCompatibleBitmap(&memDC,
(lprcDest->right-lprcDest->left),
(lprcDest->bottom-lprcDest->top));
pOldBmp=memDC.SelectObject(&m_background);
memDC.BitBlt(0,0,(lprcDest->right-lprcDest->left),
(lprcDest->bottom-lprcDest->top),pDC,
lprcDest->left,lprcDest->top,
SRCCOPY);
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
}
...//这里画当前绘图



...//这里需要重绘背景区域了

CDC memDC;
memDC.CreateCompatibleDC(pDC);
ltPos=m_timer.GetLTPos();
CBitmap *pOldBmp=memDC.SelectObject(&m_timerNum.m_background);//m_timerNum.m_background就是前面保存的背景bitmap
pDC->BitBlt(rect1.left,rect1.top, rect1.Width(),rect1.Height(),
&memDC,0,0,SRCCOPY);
memDC.SelectObject(&m_timer.m_background);
pDC->BitBlt(ltPos.x,ltPos.y,m_timer.GetSize().cx,
m_timer.GetSize().cy/2,&memDC,0,0,SRCCOPY);
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
但是这里画出来的背景区域就是一块黑色区域,请帮我看看,啥原因呢?
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodboyws 2005-07-11
  • 打赏
  • 举报
回复
m_background.CreateCompatibleBitmap(pDC,
(lprcDest->right-lprcDest->left),
(lprcDest->bottom-lprcDest->top));
airhawk 2005-07-11
  • 打赏
  • 举报
回复
谢谢各位了;
qrlvls 2005-07-11
  • 打赏
  • 举报
回复
agree to Zhymax
You must create an bitmap compatible with the orignal DC.
Zhymax 2005-07-10
  • 打赏
  • 举报
回复
memDC.CreateCompatibleDC(pDC);
m_background.CreateCompatibleBitmap(pDC, //
(lprcDest->right-lprcDest->left),
(lprcDest->bottom-lprcDest->top));

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧