共用方式為


同步和非同步繪圖

在處理 WM_PAINT 訊息期間執行的大部分繪圖都是非同步;也就是說,視窗部分的時間與傳送時間WM_PAINT之間會有延遲。 在延遲期間,應用程式通常會從佇列擷取訊息,並執行其他工作。 延遲的原因是系統通常會將視窗中的繪圖視為低優先順序作業,並如同使用者輸入訊息和可能會影響視窗位置或大小的訊息一樣,在WM_PAINT 之前處理。

在某些情況下,應用程式必須同步繪製,也就是在使視窗部分失效之後立即在視窗中繪製。 一般應用程式會在建立視窗之後立即繪製主視窗,以向使用者發出應用程式已成功啟動的訊號。 系統會同步繪製一些控制項視窗,例如按鈕,因為這類視窗可作為使用者輸入的焦點。 雖然任何具有簡單繪圖常式的視窗都可以同步繪製,但所有這類繪圖都應該快速完成,且不應干擾應用程式回應使用者輸入的能力。

UpdateWindowRedrawWindow函式允許同步繪圖。 如果更新區域不是空的,UpdateWindow會將WM_PAINT訊息直接傳送至視窗。 RedrawWindow 也會傳送 WM_PAINT 訊息,但可讓應用程式更充分控制如何繪製視窗,例如是否要繪製非工作區和視窗背景,還是要傳送訊息,不論更新區域是否空白。 這些函式會將 WM_PAINT 訊息直接傳送至視窗,而不論應用程式訊息佇列中的其他訊息數目為何。

任何需要耗時繪圖作業的視窗都應該以非同步方式繪製,以防止在繪製視窗時封鎖擱置的訊息。 此外,經常使視窗小部分失效的任何應用程式都應該允許這些不正確部分合併成單一非同步 WM_PAINT 訊息,而不是一系列的同步 WM_PAINT 訊息。