mfc中的onpaint函数中绘图以后不要求图片闪烁

haishi在onpaint函数中让图片移动的时候不要闪烁,要用双缓存,就是把图片先添加到内存缓冲区中,然后就可以直接bitblt到窗口中,具体的代码不会写,希望高手给个代码吧!

首先,OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用OnPaint双缓冲的实现:在OnDraw(CDC *pDC)中:
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
//绘图
MemDC.MoveTo(……);
MemDC.LineTo(……);
//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-07-25
不需要那么复杂,直接用InvalidateRect()或UpdateWindow()实时更新窗口就可以了。本回答被网友采纳
第2个回答  2013-05-31
搜一下,例子很多的

50分求教MFC对话框中双缓冲绘图避免闪烁的问题
(如果不需要背景DC,则直接把内容画到缓冲DC上)最后记得在OnPaint里将缓冲DC画到实际的窗口上:GetDC()->BitBlt(m_nLeft, m_nTop, m_nWidth, m_nHeight, &m_dcMem, 0, 0, SRCCOPY);

MFC 对话框图片控件中绘图刷新的问题
“双缓存”是OpenGL里用的防止屏幕闪烁的方法.一般的不好解决,有点复杂.还不如想其他办法画图,或者去学习其他做图方法,比如OpenGL.Active等.那些画出来效果要好很多,可以去看下.

MFC 画图 老是闪烁 求高手指点
你把memdc那段移植到OnPaint中,然后将memdc传给DrawMap, 之后在OnPaint中bitblt到窗口DC CBitmap MemBitmap;MemDC.CreateCompatibleDC(pDC);MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(), rect.Height());DrawMap(&MemDC...pDC->BitBlt(最后pDC->ReleaseDC ...

mfc中如何解决屏幕闪烁
4, 最好的一种方法是使用 BitBlt 函数来拷贝需要刷新的区域。5,最后,当然也可以直接使用 OnPaint() 放置在要刷新的位置。

MFC 中OnPaint()函数中的用法
OnPaint()在窗口进行重绘时会被调用,所以如果有些图或者控件是你动态生成的,而你又不希望在重绘时被擦除的话,你可以把绘图的过程写在OnPaint里。

MFC中OnDraw和OnPaint的区别
1. OnPaint中首先构造一个CPaintDC类得实例,然后以这个实例为参数来调用虚函数OnPrepareDC来进行一些绘制前的一些处理,比设置映射模式,最后调用OnDraw。2. OnDraw和OnPrepareDC不是消息处理函数。所以在不是因为重绘消息所引发的OnPaint导致OnDraw被调用时,比如在OnLButtonDown等消息处理函数中绘图时,要先...

关于MFC的onpaint函数问题!!
MFC的窗口重绘,是一套很复杂的消息逻辑。这里包含了前景绘制(OnPaint)、背景绘制,窗口框架绘制、子窗口消息管理,一个窗口的重绘,并不是直接出发的WM_PAINT消息,这也是窗口重绘为什么会有InValidate这个函数来触发,而不是仅仅发送一个WM_PAINT.,因为它需要处理背景和子窗口。而OnPaint不过是一系列...

用MFC如何高效地绘图
1、显示的图形为什么会闪烁? 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看...

mfc中static控件显示时间闪烁
在MFC中用缓存技术进行绘图完全可以做到不闪烁,下面是在对话框应用程序OnPaint函数else分支中的代码,显示一行文本,仅用来测试:CWnd * pWndShow;CDC * pDCShow;pWndShow = GetDlgItem(IDC_STC_DRAW); \/\/ static text控件ID pDCShow = pWndShow->GetDC();CDC memDC;CRect rect;CBitmap ...

用MFC如何高效地绘图
1、显示的图形为什么会闪烁? 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看...

相似回答