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