簡體   English   中英

在窗口中繪畫之前是否需要使更新區域無效

[英]Is it necessary to invalidate update region before painting in the window

如果我使用Direct2D,是否需要在立即繪制之前(響應用戶操作)使更新區域無效? 還是調用RenderTarget::BeginDraw()足夠了? 我需要在WM_PAINT消息之外快速重繪窗口的某些部分。 如果我不使更新區域無效,則有時窗口的整個工作區都變成黑色,則看不到任何圖形。 但是,如果我確實使更新區域無效,則系統會在我驗證更新區域之前發送WM_PAINT消息,這將導致執行不必要的繪制操作。 如果使用Direct2D,應如何在WM_PAINT消息處理程序之外實現即時繪圖操作?

無效和驗證是獲取WM_PAINT消息並處理一條消息的方法。 如果要在WM_PAINT處理程序之外繪畫,則不應作為該繪圖的一部分進行無效或驗證。

也就是說,在WM_PAINT處理程序之外進行繪制是非常罕見的。 正確處理可能非常困難。 我的建議是首先通過傳統的WM_PAINT處理程序使所有工作正常,然后決定是否真的需要在該處理程序外部進行繪畫。

通常,在類似游戲的應用程序中使用Direct2D時,您不會在WM_PAINT中執行繪制,而是每秒使用Direct2D進行多次繪制。 對於您一次繪制一次且每秒不多次創建新圖形的情況,另一種常見技術是將圖形存儲在某種形式的后緩沖區中。 這樣,您可以將其“屏蔽”到屏幕以響應WM_PAINT消息。

當然,根據您所創建的程序類型的不同,情況可能會有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM