是否有可能/必须在单独的线程[MFC]中调用OnDraw

时间:2016-01-12 16:06:22

标签: c++ multithreading mfc

这是MFC Doc / View应用程序:
是否有可能/必须在单独的执行线程中调用OnDraw,即工作线程?在我们构建的软件中,我们在Doc / View应用程序中查看了很大的问题。也就是说,每次滚动视图时,处理都需要很长时间才能冻结应用程序 需要处理的位图相当大(平均超过1GB) 谢谢。

1 个答案:

答案 0 :(得分:0)

如具体要求,答案是“不”。必须在主GUI线程的上下文中调用OnDraw。你能做的是:

  • 将滚动区域标记为无效(在“OnScroll”中)
  • 启动另一个线程,从过大的位图中提取屏幕大小的位图。
  • OnDraw在无效区域上绘制了大量问号。
  • 后台线程在完成后将消息发布到主GUI线程。
  • 消息处理程序将滚动区域标记为现在具有支持位图(并再次调用“InvalidateRect”以提示另一个OnDraw)。
  • OnDraw只是将提取的位图blits到位。

(但将巨大的位图拆分成碎片会更好。)