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

用MFC更新图像时,在新位置作了图后,怎么做可以同时清除旧位置上的图像呢?用InvalidateRect(NULL)吗?下面是我的代码,加了InvalidateRect(... 用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图片是一样的.. 只是要不断在新位置更新.. 类似运动状态..
展开
 我来答
很会搞笑
2009-02-24 · TA获得超过179个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:0
展开全部
既然旧的图像你不想让他显示了,为什么画新图像的时候你不把它的区域画的大一些,直接把旧的覆盖了不就行了。
创作者SNKVKZZN4g
2009-02-25 · 超过13用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:17.9万
展开全部
你是在OnPaint()或者OnDraw()中绘制的吧 ?
每次调用InvalidateRect(NULL)系统都会重绘窗口,也就是调用OnPaint()或者OnDraw()函数,然后又调用InvalidateRect(NULL),从而陷入了死循环

问题在于不能再OnPaint()或者OnDraw()函数中调用InvalidateRect(NULL),放在普通的函数中即可。不过你这个内存贴图的方式很不错的哦
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三网充值折扣
2021-11-02
知道答主
回答量:12
采纳率:0%
帮助的人:5933
展开全部
CRect rect;//设置成原图像的矩形
CBrush brush;
brush.CreateSolidBrush(RGB(255, 255, 255));//设置成背景的颜色,如果不知道用rgb取色器取rgb值
//画实心矩形
pDC->FillRect(&rect, &brush);//画矩形把原图片覆盖成背景纯色
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haohaojian
2009-02-24 · TA获得超过606个赞
知道小有建树答主
回答量:493
采纳率:0%
帮助的人:262万
展开全部
invalidate或者UpdateData,记得好像,好久没动vc了记得不是太清楚了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
成功还宝贵灬宝贝I
2009-02-24 · TA获得超过280个赞
知道答主
回答量:98
采纳率:0%
帮助的人:0
展开全部
画刷重绘怎么样? 我不知道 我也和你一样的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式