MFC画图软件中怎么样克服刷屏问题。

warmyellow 2009-10-20 12:49:36
MFC画图软件中怎样克服刷屏问题,我知道有一种叫双缓冲技术,谁能够提供代码例子,或者提供其他比较好的防刷屏的技术
...全文
151 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
loop_k 2009-10-20
  • 打赏
  • 举报
回复
来晚了 接个分。。
快乐鹦鹉 2009-10-20
  • 打赏
  • 举报
回复
嗯。根据对象改变的频度以及绘制的复杂度再进一步分级处理。
我现在的系统就是这么做的。
fandh 2009-10-20
  • 打赏
  • 举报
回复
如果你的数据量大的话,可以这样改进一下!
用两个BITMAP,分别为BMP1,BMP2,程序数据都在BMP1上面画,中间数据(比如一些鼠标超重过程,鼠标拖线等过程)都在BMP2上面画,最终贴出的是BMP2;
过程如下,在数据有变化时,必须重画BMP1将所有的数据显示在BMP1上,然后,BMP2从BMP1上拷贝后,再显示BMP2本身的数据,比如选择的显示!最后,将BMP2贴出!
这样做,可以提高绘图的速度以及质量!
webing520 2009-10-20
  • 打赏
  • 举报
回复
1楼那是专家中的专家,冲钻的队伍。。。呵呵

膜拜中。。。
dkbrain 2009-10-20
  • 打赏
  • 举报
回复
楼上的太快了,我就会这点东西,本指望着给我加点分的,可惜又迟一步。
快乐鹦鹉 2009-10-20
  • 打赏
  • 举报
回复
关于双缓冲,你只要在网上简单搜索一下,就可以找到一大片。主要是先将你要绘制的内容画到内存DC中,然后将内存DC中的内容复制到显示用的DC上,这样只需要一次刷新,因此看不到抖动。
简要代码:
void CMsgTipDlg::DrawMsg(CDC *pDC)
{
CRect rc;
GetClientRect(&rc);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
CBitmap *pOldBmp = memDC.SelectObject(&bmp);
memDC.FillSolidRect(rc,theApp.m_sysINIFile.GetMsgTipConfig().nMsgTipBkColor);

DrawGrid(&memDC,rc);//用兼容DC绘制你的图形内容
pDC->BitBlt(0, 0, rc.Width(),rc.Height(), &memDC, 0, 0, SRCCOPY) ;
pDC->SelectObject(pOldBmp);
bmp.DeleteObject();
memDC.DeleteDC();
}
TRUE 2009-10-20
  • 打赏
  • 举报
回复
我也来晚了,
Hiiishe 2009-10-20
  • 打赏
  • 举报
回复
绘图防闪屏的完整方案是: WM_ERASEBKGND响应直接返回TRUE + 双缓存

MFC里面单文档和多文档绘图时,这两个配合使用效果最佳。如果不处理WM_ERASEBKGND,VIEW会默认在重绘前用白色填充一次客户区,因此仅仅只做双缓存的话在重绘频率很高的情况下贴图仍然会闪烁。

双缓存的代码网上就是一大票了,是一个老生常谈的问题。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧