Поделиться через


Неклиентная область

Система отправляет WM_NCPAINT сообщение в окно всякий раз, когда требуется обновить часть неклиентной области окна, например строку заголовка, строку меню или рамку окна. Система также может отправлять другие сообщения, чтобы направить окно для обновления части своей клиентской области; Например, когда окно становится активным или неактивным, оно отправляет WM_NCACTIVATE сообщение для обновления строки заголовка. Как правило, обрабатывать эти сообщения для стандартных окон не рекомендуется, так как приложение должно иметь возможность отрисовки всех необходимых частей неклиентной области для окна. По этой причине большинство приложений передают эти сообщения в DefWindowProc для обработки по умолчанию.

Приложение, которое создает пользовательские неклиентные области для своих окон, должно обрабатывать эти сообщения. При этом приложение должно использовать контекст устройства окна для рисования в окне. Контекст оконного устройства позволяет приложению рисовать во всех областях окна, включая неклиентную область. Приложение извлекает контекст оконного устройства с помощью функции GetWindowDC или GetDCEx и по завершении рисования должно освободить контекст устройства окна с помощью функции ReleaseDC .

Система поддерживает регион обновления для неклиентной области. Когда приложение получает сообщение WM_NCPAINT , параметр wParam содержит дескриптор региона, определяющий измерения области обновления. Приложение может использовать дескриптор для объединения области обновления с областью обрезки для контекста устройства окна. Система не объединяет регион обновления автоматически при получении контекста оконного устройства, если приложение не использует GetDCEx и не задает дескриптор региона и флаг DCX_INTERSECTRGN. Если приложение не объединяет область обновления, обрезаются только операции рисования, которые в противном случае будут расширяться за пределами окна. Приложение не несет ответственности за очистку региона обновления, независимо от того, использует ли он регион.

Если приложение обрабатывает сообщение WM_NCACTIVATE , после обработки оно должно вернуть значение TRUE , чтобы система выполнила изменение активного окна. Если окно свернуто, когда приложение получает сообщение WM_NCACTIVATE , оно должно передать сообщение в DefWindowProc. В таких случаях функция по умолчанию перерисовывает метку значка.