視窗背景
視窗背景是用來在視窗開始繪製之前填滿工作區的色彩或圖樣。 視窗背景涵蓋視窗移動到該處之前畫面上的任何內容,清除現有的影像,並防止應用程式的新輸出與不相關的資訊混合。
系統會繪製視窗的背景,或讓視窗有機會在應用程式呼叫BeginPaint時傳送WM_ERASEBKGND訊息來執行此動作。 如果應用程式未處理訊息,而是將它傳遞至 DefWindowProc,系統會在視窗類別所指定的背景筆刷中填入模式來清除背景。 如果筆刷無效或類別沒有背景筆刷,則系統會在BeginPaint傳回的PAINTSTRUCT結構中設定fErase成員,但不會執行其他動作。 然後,應用程式會有第二個機會,視需要繪製視窗背景。
如果處理 WM_ERASEBKGND,應用程式應該使用訊息的 wParam 參數來繪製背景。 此參數包含視窗顯示裝置內容的控制碼。 繪製背景之後,應用程式應該會傳回非零值。 這可確保BeginPaint不會錯誤地將PAINTSTRUCT結構的fErase成員設定為非零值, (指出當應用程式處理後續WM_PAINT訊息時,應該清除背景) 。
應用程式可以在向RegisterClass函式註冊類別時,將筆刷控制碼或系統色彩值指派給WNDCLASS結構的hbrBackground成員,以定義類別背景筆刷。 GetStockObject或CreateSolidBrush函式可用來建立筆刷控制碼。 系統色彩值可以是 針對 SetSysColors 函式定義的其中一個。 (指派給 member.) 之前,必須先增加一個值
即使已定義類別背景筆刷,應用程式仍可處理 WM_ERASEBKGND 訊息。 這通常適用于可讓使用者變更指定視窗的背景色彩或模式的應用程式,而不會影響 類別中的其他視窗。 在這種情況下,應用程式不得將訊息傳遞至 DefWindowProc。
應用程式不需要對齊筆刷,因為系統會使用視窗原點做為參考點繪製筆刷。 因此,使用者可以移動視窗,而不會影響圖樣筆刷的對齊方式。