在視窗中繪製的時機
應用程式會以各種不同的時間在視窗中繪製:第一次建立視窗時、變更視窗的大小、從另一個視窗移動視窗時、最小化或最大化視窗時、顯示已開啟檔案的資料,以及捲動、變更或選取所顯示資料的一部分時。
系統會管理動作,例如移動和調整視窗大小。 如果動作會影響視窗的內容,系統會將視窗的受影響部分標示為已準備好進行更新,並在下一個機會將 WM_PAINT 訊息傳送至視窗的視窗程式。 訊息是應用程式的訊號,可判斷必須更新的內容,並執行必要的繪圖。
某些動作是由應用程式管理,例如顯示開啟的檔案,以及選取顯示的資料。 針對這些動作,應用程式可以標示更新受動作影響的視窗部分,導致下一個機會傳送 WM_PAINT 訊息。 如果動作需要立即的意見反應,應用程式可以在動作發生時繪製,而不需要等待 WM_PAINT。 例如,一般應用程式會醒目提示使用者選取的區域,而不是等候下一個 WM_PAINT 訊息更新區域。
在所有情況下,應用程式只要建立,就可以在視窗中繪製。 若要在視窗中繪製,應用程式必須先擷取視窗顯示裝置內容的控制碼。 在理想情況下,應用程式會在處理 WM_PAINT 訊息期間執行大部分的繪圖作業。 在此情況下,應用程式會藉由呼叫 BeginPaint 函式來擷取顯示裝置內容。 如果應用程式在任何其他時間繪製,例如在WinMain內或在處理鍵盤或滑鼠訊息期間,它會呼叫GetDC 或 GetDCEx 函式來擷取顯示 DC。