2016-01-12 70 views
0

這是一個MFC文檔/查看應用程序:
是否可能/有必要在單獨的執行線程(即工作線程)中調用OnDraw?在我們構建的軟件中,我們在Doc/View應用程序中查看存在很大的問題。也就是說,每次瀏覽視圖時,處理這個過程需要很長時間,以致應用程序凍結。
需要處理的位圖相當大(平均超過1GB)
謝謝。有可能/有必要在單獨的線程中調用OnDraw [MFC]

+0

你通常希望打破這一巨大的位圖成磚(例如,大約每一個尺寸,將適合在屏幕上)所以你一次最多可以處理4個瓦片,其餘的位圖不會受到干擾。 –

+0

我可能會有一個縮小的位圖副本,滾動時顯示粗略圖像,計算單獨線程中的細節並在準備好時更新屏幕。 –

+0

如上所述,通常你應該把巨大的照片分成幾部分。至於你的問題的「可能」部分,是的,可以創建繪圖任務的線程。但我認爲在大多數Doc/View應用程序中這是不必要的。如果繪圖任務過於繁重,則應該更改爲Direct2D等。 – WhatsUp

回答

0

正如具體問到的那樣,答案是「否」。必須在主GUI線程的上下文中調用OnDraw。你可以做什麼,就是:

  • 標記滾動區域爲無效(在「OnScroll」)
  • 開球另一個線程來提取您的過大的位圖的屏幕大小的位圖。
  • OnDraw在無效區域上繪製了很多問號。
  • 後臺線程完成後向主GUI線程發佈消息。
  • 消息處理程序將滾動區標記爲現在具有後備位圖(並再次調用「InvalidateRect」以提示另一個OnDraw)。
  • OnDraw只是提取位圖提取的位圖。

(但分裂巨大的位圖成片會是一個更好的主意。)

相關問題