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图片是一样的.. 只是要不断在新位置更新.. 类似运动状态.. 展开
下面是我的代码,加了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图片是一样的.. 只是要不断在新位置更新.. 类似运动状态.. 展开
6个回答
展开全部
你是在OnPaint()或者OnDraw()中绘制的吧 ?
每次调用InvalidateRect(NULL)系统都会重绘窗口,也就是调用OnPaint()或者OnDraw()函数,然后又调用InvalidateRect(NULL),从而陷入了死循环
问题在于不能再OnPaint()或者OnDraw()函数中调用InvalidateRect(NULL),放在普通的函数中即可。不过你这个内存贴图的方式很不错的哦
每次调用InvalidateRect(NULL)系统都会重绘窗口,也就是调用OnPaint()或者OnDraw()函数,然后又调用InvalidateRect(NULL),从而陷入了死循环
问题在于不能再OnPaint()或者OnDraw()函数中调用InvalidateRect(NULL),放在普通的函数中即可。不过你这个内存贴图的方式很不错的哦
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CRect rect;//设置成原图像的矩形
CBrush brush;
brush.CreateSolidBrush(RGB(255, 255, 255));//设置成背景的颜色,如果不知道用rgb取色器取rgb值
//画实心矩形
pDC->FillRect(&rect, &brush);//画矩形把原图片覆盖成背景纯色
CBrush brush;
brush.CreateSolidBrush(RGB(255, 255, 255));//设置成背景的颜色,如果不知道用rgb取色器取rgb值
//画实心矩形
pDC->FillRect(&rect, &brush);//画矩形把原图片覆盖成背景纯色
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
invalidate或者UpdateData,记得好像,好久没动vc了记得不是太清楚了~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
画刷重绘怎么样? 我不知道 我也和你一样的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询