MFC基于对话框的程序,如何实现移动位图时不闪屏?

我建了一个基于对话框的工程,在窗口的鼠标移动事件中写了一些响应事件,但是图片移动时有痕迹,添加InvalidateRect()函数后又出现闪屏,在网上查了许多资料都说用双... 我建了一个基于对话框的工程,在窗口的鼠标移动事件中写了一些响应事件,但是图片移动时有痕迹,添加InvalidateRect()函数后又出现闪屏,在网上查了许多资料都说用双缓存来做,我按照说的方法来还是没有效果,不知道是不是我用的不是双缓存,或者说有其余的解决方法,或者这么写是不对的。求帮助:
我的代码如下:
(不加InvalidateRect函数,移动不会闪屏,但有移动痕迹,加了就会闪屏,但是没有移动痕迹,我现在希望没有移动痕迹且不闪屏的效果)
void CTestMFCImageDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CBitmap cbmp; //内存中承载临时图象的位图
cbmp.LoadBitmap(IDB_BITMAP2);
CDC* pDC =GetDC();
CPoint ptCenter;
CRect rect;
GetClientRect(&rect);
CDC dcMem; //用于缓冲作图的内存DC
dcMem.CreateCompatibleDC(pDC); //依附窗口DC 创建兼容内存DC
dcMem.FillSolidRect(rect,pDC->GetBkColor());//按原来背景填充客户区,不然会是黑色
dcMem.SelectObject(&cbmp); //将位图选择进内存DC
//将内存DC 上的图象拷贝到前台
pDC->BitBlt(point.x,point.y,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);
cbmp.DeleteObject(); //删除位图
dcMem.DeleteDC(); //删除DC
CDialog::OnMouseMove(nFlags, point);
}
有人说这是移动事件响应太频繁了,用鼠标移动消息不合适,不知道到底是不是这样,如果是的话,有什么思路,如何不是的话,又如何修改?
展开
 我来答
695108725
2012-09-17
知道答主
回答量:14
采纳率:0%
帮助的人:17.4万
展开全部
刚试了,你还是老老实实用双缓存把背景绘出来。背景和图不一起刷新,一定会闪~
追问
你的意思绘了背景就不闪了?就是说先把背景绘好,而在鼠标移动事件里面,只移动图片,背景不动,就不闪了?还是说背景和图同时都要刷新才不会闪?
追答
先将你要移动的图绘制到背景图的中,再把背景图刷新出来~
第一次的缓存装的是你创造的整个图,然后将这个图作为背景贴出来,所以是双缓存。
poseidon_k
2012-09-20 · TA获得超过2580个赞
知道小有建树答主
回答量:1223
采纳率:0%
帮助的人:314万
展开全部
InvalidateRect函数的最后一个参数bErase你是传入FALSE了么?每次刷新背景容易闪烁。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a9ca369
2012-09-19 · TA获得超过143个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:168万
展开全部
使用双缓冲,网上很多例子,收双缓冲就大把
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦里花更香
2012-09-18 · 超过31用户采纳过TA的回答
知道答主
回答量:175
采纳率:0%
帮助的人:110万
展开全部
你可以把cbitmap和MEDC设为全局的试一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式