各位高手:
我在往窗口上绘图时,想先把背景区域保存起来,以便重绘时直接显示该背景区域,以避免用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();
但是这里画出来的背景区域就是一块黑色区域,请帮我看看,啥原因呢?
我在往窗口上绘图时,想先把背景区域保存起来,以便重绘时直接显示该背景区域,以避免用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();
但是这里画出来的背景区域就是一块黑色区域,请帮我看看,啥原因呢?
解决方案 »
- MultiByteToWideChar转换的BUG?
- Dll中这样的消息发给谁?
- 用at命令发送短消息问题?
- 关于vc+ado的问题,如何获取数据库里面所有的表名,请教!
- 如何可以确定程序被使用了几次.
- 关于windows核心编程一书
- 请教一个关于截取桌面并显示的问题,急!
- CScrollView滚动条 必须刷新一次界面才可用
- 关于在WM_INITMENUPOPUP中取得菜单的RECT
- 用vc++编写c的程序怎么总是说我有错误啊?
- 菜鸟问题,要分的进来看看,在线等,要急死了!!!!
- 最近做远程控制,发现远程计算机锁定屏幕(Ctrl+Alt+Del)以后,我这里就看不到远程的屏幕了。而很多远程控制软件可以做到,请问怎么实现?
m_background.CreateCompatibleBitmap(pDC, //
(lprcDest->right-lprcDest->left),
(lprcDest->bottom-lprcDest->top));
You must create an bitmap compatible with the orignal DC.
(lprcDest->right-lprcDest->left),
(lprcDest->bottom-lprcDest->top));