非工作區
每當視窗非工作區的一部分,例如標題列、功能表欄或視窗框架時,系統就會將 WM_NCPAINT 訊息傳送至視窗。 系統也可以傳送其他訊息,以指示視窗更新其工作區的一部分;例如,當視窗變成使用中或非使用中時,它會傳送 WM_NCACTIVATE 訊息來更新其標題列。 一般而言,不建議針對標準窗口處理這些訊息,因為應用程式必須能夠繪製視窗非工作區的所有必要部分。 因此,大部分的應用程式都會將這些訊息傳遞至 DefWindowProc 以進行默認處理。
為視窗建立自定義非工作區的應用程式必須處理這些訊息。 這樣做時,應用程式必須使用視窗裝置內容在視窗中執行繪圖。 視窗裝置內容 可讓應用程式繪製視窗的所有部分,包括非工作區。 應用程式會使用 getWindowDC 或 GetDCEx 函式來擷取視窗裝置內容,而且在繪圖完成時,必須使用 ReleaseDC 函式釋放視窗裝置內容。
系統會維護非客戶端區域的更新區域。 當應用程式收到 WM_NCPAINT 訊息時,wParam 參數會包含定義更新區域維度的區域句柄。 應用程式可以使用 句柄,將更新區域與視窗裝置內容的裁剪區域結合。 除非應用程式使用 GetDCEx,並且同時指定區域句柄和DCX_INTERSECTRGN旗標,否則系統不會在擷取視窗裝置內容時自動合併更新區域。 如果應用程式未合併更新區域,則只會裁剪在視窗外延伸的繪圖作業。 應用程式不負責清除更新區域,不論其是否使用區域。
如果應用程式處理 WM_NCACTIVATE 訊息,在處理之後,它必須傳回 true,以指示系統完成使用中視窗的變更。 如果應用程式收到 WM_NCACTIVATE 訊息時將視窗最小化,它應該會將訊息傳遞至 DefWindowProc。 在這種情況下,預設函式會重新繪製圖示的標籤。