MFC中运用双缓冲绘图,效率太慢了,如何优化呢? 本帖最后由 VisualEleven 于 2014-03-17 10:24:20 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 内存DC用全局的OnPaint里只是BitBlt就可以了快的你屌毛都能随风竖起来 m_ps is a public member variable of type PAINTSTRUCT. It is the PAINTSTRUCT that is passed to and filled out by CWnd::BeginPaint. m_ps 有需要的重绘区, 不在重绘区的绘制都是白费劲,所以重绘量大时,一定要检测重绘区. 一般都是线程里面画好,OnPaint里面BitBlt出来 OnPaint里运算周期太长,把显示是速度拉下去了 双缓冲的本意就是后台绘图,在OnPaint只是贴图。而你的代码是在OnPaint中绘图到内存Dc加贴图,还不如直接在OnPaint中绘图到PaintDc呢(虽然都很慢) 取重画区,重画区以外的不重画 CRect rcClip; dc.GetClipBox( rcClip );这是比较通用的方法,还要根据实际情况来处理。楼主的1w多点是不是可以先筛选,因为屏幕只有1k多点,窗口可能更小,先把重复或重画区以外的去掉,再画,数据量就小多了。第二,如果是一个移动的曲线,用scrollwindow移动图形,这个极高效,基本不用时间,硬件完成,移完以后的空白部分只有2 -3个像素列,画的就很快了。MFC的重画看似简单,实际有很多技巧,要实现高效、流畅、不闪,要处理很多细节,可能比算法代码用时长的多。看看word和photoshop,画图量很大,用户体验却非常好。另外,如果很偏重界面,可以考虑用DX,画图功能更多一些,效率方便可以少考虑一些。 OnKeyDown函数获取按键信息 求最小二乘拟合源码 HGDIOBJ与HBRUSH有什么区别与联系? 韩文内码转中文内码,高手请帮忙解答 函数debug通过,执行正常。release报内存错误。帮我找找原因 请教个位,用TCP还是UDP呀? 大家认为vc会不会被c#代替 求救! SHFileOperation中的中文路径 请问调用同一个DLL中的函数,为什么在RELEASE下没问题,在DEBUG却会崩溃掉? VS2012 update4 问题求解答(100分) 关于VS2010中UNICODE码和MULTI BYTES码的编译问题
OnPaint里只是BitBlt就可以了快的你屌毛都能随风竖起来
CRect rcClip;
dc.GetClipBox( rcClip );
这是比较通用的方法,还要根据实际情况来处理。楼主的1w多点是不是可以先筛选,因为屏幕只有1k多点,窗口可能更小,先把重复或重画区以外的去掉,再画,数据量就小多了。第二,如果是一个移动的曲线,用scrollwindow移动图形,这个极高效,基本不用时间,硬件完成,移完以后的空白部分只有2 -3个像素列,画的就很快了。MFC的重画看似简单,实际有很多技巧,要实现高效、流畅、不闪,要处理很多细节,可能比算法代码用时长的多。看看word和photoshop,画图量很大,用户体验却非常好。另外,如果很偏重界面,可以考虑用DX,画图功能更多一些,效率方便可以少考虑一些。