我要在窗体上同时往多个区域绘图,我应该怎么做呢?

airhawk 2005-07-11 03:26:59
我现在的思路基本上是:
create memory dc1(rect1),draw ,bitblt to client dc,
create memory dc2(rect2),draw ,bitblt to client dc,
...
感觉这样不是很好,如果有好多区域需要重绘的画,一样会有闪屏问题,
我应该怎么做呢?
难道计算一个包含这些区域的区域,然后 bitblt client dc to mem dc ,draw in mem dc,bitblt mem dc to client dc 吗?这样的话,如果这个包含区域很大的,性能又很差的,
请各位给一个比较好的思路哦。
谢了。
...全文
122 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljp3000 2005-07-12
  • 打赏
  • 举报
回复
Invalidate时记得参数选 false
ChenJF206 2005-07-11
  • 打赏
  • 举报
回复
全部在memDC上画,完成之后再画到pDC上;
另外,可能要重载OnEraseBkgnd,禁止背景刷新
快乐鹦鹉 2005-07-11
  • 打赏
  • 举报
回复
你将整个窗口作为一个内存位图进行绘制不就完事了么。干嘛分成多个位图阿。
goodboyws 2005-07-11
  • 打赏
  • 举报
回复
如果区域不重叠的话,完全没有影响啊
airhawk 2005-07-11
  • 打赏
  • 举报
回复
哪位大哥,给点提示莫,很急的呀。谢了
airhawk 2005-07-11
  • 打赏
  • 举报
回复
我的代码
CDC memDC;
//画第一块区域
memDC.CreateCompatibleDC(pDC);
ltPos=m_timer.GetLTPos();
CBitmap *pOldBmp=memDC.SelectObject(&m_timerNum.m_background);
pDC->BitBlt(rect1.left,rect1.top, rect1.Width(),rect1.Height(),
&memDC,0,0,SRCCOPY);
//画第二块区域
memDC.SelectObject(&m_timer.m_background);
pDC->BitBlt(ltPos.x,ltPos.y,m_timer.GetSize().cx,
m_timer.GetSize().cy/2,&memDC,0,0,SRCCOPY);
//释放资源
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
主要是两个pDC->BitBlt,会不会有闪屏的可能?

15,979

社区成员

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

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