MFC更新图像时,旧位置的图像怎么清除?

来源:百度知道 编辑:UC知道 时间:2024/05/28 14:54:25
用MFC更新图像时, 在新位置作了图后, 怎么做可以同时清除旧位置上的图像呢? 用InvalidateRect(NULL)吗?

下面是我的代码,加了InvalidateRect(NULL)后,运行的时候整个窗口图像一直闪烁.. 不加的话, 倒是不闪烁.. 但原来的图像还在那.. 请问该怎么改?帮帮忙! 谢谢!

{
CBitmap bmp;
if (bmp.LoadBitmap(IDB_BITMAP2))
{

BITMAP bmpInfo;
bmp.GetBitmap(&bmpInfo);

CDC*pDC=GetDC();

CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);

CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);

CRect rect;
GetClientRect(&rect);
int nX = ImageX - (1.75*ArenaSize);
int nY = ImageY - (.75*ArenaSize);

pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory,
0, 0, SRCCOPY);

dcMemory.SelectObject(pOldBitmap);
InvalidateRect(NULL);
ReleaseDC(pDC);
}

}
不是简单背景.. 我用ondraw先画了图像,然后在图像上再添加了bmp图片, 就是想问当我更新新的bmp图片时,旧的怎么去掉? 两个bmp图片是一样的.. 只是要不断在新位置更新.. 类似运动状态..

你是在OnPaint()或者OnDraw()中绘制的吧 ?
每次调用InvalidateRect(NULL)系统都会重绘窗口,也就是调用OnPaint()或者OnDraw()函数,然后又调用InvalidateRect(NULL),从而陷入了死循环

问题在于不能再OnPaint()或者OnDraw()函数中调用InvalidateRect(NULL),放在普通的函数中即可。不过你这个内存贴图的方式很不错的哦

invalidate或者UpdateData,记得好像,好久没动vc了记得不是太清楚了~

既然旧的图像你不想让他显示了,为什么画新图像的时候你不把它的区域画的大一些,直接把旧的覆盖了不就行了。

如果是简单的背景你可以尝试一下在原来的地方填充上背景颜色。很简单的方法。

画刷重绘怎么样? 我不知道 我也和你一样的问题