请教MFC 画图闪屏的问题

lieyingshengbao 2012-11-14 12:48:47
网上搜索了下,说用双缓冲避免。。但是实验了下好像不管用。。我这边可以调节画笔大小。当画笔为1时,确实不再闪屏。。但是当画笔增大时候,且划线较多时候还是会闪屏、、请问怎么规避呢??
以下是双缓冲的源码:
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect); //获得窗口客户区

// 创建内存缓存DC
CDC memDC;
memDC.CreateCompatibleDC(&dc);

CBitmap bufferMemBitmap;
bufferMemBitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height());
memDC.SelectObject(&bufferMemBitmap);
CBrush whiteBrush;
whiteBrush.CreateSolidBrush(RGB(255, 255, 255));
memDC.FillRect(CRect(0, 0, rect.Width(), rect.Height()),&whiteBrush);

CPen my_pen;
my_pen.CreatePen(PS_SOLID,m_PenWidth,m_Color); //m_PenWidth调节画笔大小
CPen *oldPen = memDC.SelectObject(&my_pen);

//画图过程省略

// 将内存缓冲DC拷贝至当前DC
dc.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),&memDC, 0, 0, SRCCOPY);
bufferMemBitmap.DeleteObject();
memDC.DeleteDC();
...全文
242 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
转角天边 2012-11-14
  • 打赏
  • 举报
回复
出现闪屏,有可能是由于消息响应不及时造成的,你在在画完之后,立即发送一个窗口重绘消息试试
赵4老师 2012-11-14
  • 打赏
  • 举报
回复
任何技术也避免不了白屏黑屏来回切换导致的闪屏!(^_^)
sumos 2012-11-14
  • 打赏
  • 举报
回复
最基本的ERASEBKGND消息你都没响应

65,194

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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