Сообщение WM_PAINT отправляется тогда, когда система или другое приложение делают запрос, чтобы окрасить часть окна приложения. Сообщение отправляется тогда, когда вызывается функция UpdateWindow или RedrawWindow, или когда от функции DispatchMessage приложение получает сообщение WM_PAINT, используя функции GetMessage или PeekMessage.
Окно получает это сообщение через свою функцию WindowProc.
LRESULT CALLBACK WindowProc( HWND hwnd, // дескриптор окна UINT uMsg, // WM_PAINT WPARAM wParam, // не используется LPARAM lParam // не используется ); |
Этот параметр не используется.
lParamЭтот параметр не используется.
Приложение возвращает нуль, если оно обрабатывает это сообщение.
Функция DefWindowProc проверяет достоверность региона обновления. Функция может также отправить сообщение WM_NCPAINT оконной процедуре, если рамка окна должна окрашиваться и отправить сообщение WM_ERASEBKGND, если фон окна должен быть стерт.
Система отправляет это сообщение тогда, когда нет никаких других сообщений в очереди сообщений приложения. Функция DispatchMessage решает, куда отправить сообщение; функция GetMessage определяет какое сообщение послать. GetMessage возвращает сообщение WM_PAINT, когда нет никаких других сообщений в очереди сообщений приложения, а функция DispatchMessage отправляет сообщение соответствующей оконной процедуре.
Окно может получить внутренние сообщения для окраски в результате вызова функции RedrawWindow с установкой флажка RDW_INTERNALPAINT. В этом случае, у окна, возможно, нет региона обновления. Приложение должно вызвать функцию GetUpdateRect, чтобы определить, есть ли у окна регион обновления. Если GetUpdateRect возвращает нуль, приложение не должно вызвать функции BeginPaint и EndPaint.
Приложение должно произодить проверку любого необходимого внутреннего окрашивания, рассматривая свои внутренние структуры данных для каждого сообщения WM_PAINT, потому что сообщение WM_PAINT, возможно, было вызвано и регионом обновления с не-NULL значением, и вызовом функции RedrawWindow с установкой флажка в RDW_INTERNALPAINT.
Система отправляет внутреннее сообщение WM_PAINT только один раз. После того, как внутреннее сообщение WM_PAINT возвращается из функции GetMessage или PeekMessage, или отправляется окну функцией UpdateWindow, система не объявляет или не отправляет далее сообщения WM_PAINT до тех пор, пока окно не сделается недействительным, или до тех пор, пока не будет вызвана снова функция RedrawWindow с установленным флажком RDW_INTERNALPAINT.
Для некоторых стандартных органов управления, по умолчанию сообщение WM_PAINT обрабатывается проверкой параметра wParam. Если wParam - не-NULL, орган управления предполагает, что это значение - HDC и рисует, используя этот контекст устройства
Обзор Окрашивание и рисование, Сообщения окрашивания и рисования, BeginPaint, DefWindowProc, DispatchMessage, EndPaint, GetMessage, GetUpdateRect, PeekMessage, RedrawWindow, UpdateWindow, WM_ERASEBKGND, WM_NCPAINT, WM_PRINT, WM_PRINTCLIENT
Размещение и совместимость WM_PAINT |
||
К | Windows Vista | Да |
л | Windows XP | Да |
и | Windows 2000 Professional | Да |
е | Windows NT Workstation | Да версии 3.1 и выше |
н | Windows Me | Да |
т | Windows 98 | Да |
Windows 95 | Да | |
С | Windows Server 2008 | Да |
е | Windows Server 2003 | Да |
р | Windows 2000 Server | Да |
в | Windows NT Server | Да версии 3.1 и выше |
е | ||
р | ||
Используемая библиотека | - | |
Используемая DLL | - | |
Заголовочный файл | ||
- объявлено в | Winuser.h | |
- включено в | Windows.h | |
Unicode | - | |
Замечания по платформе | Не имеется |