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


WM_NCCALCSIZE сообщение

Отправляется, когда необходимо вычислить размер и положение клиентской области окна. Обрабатывая это сообщение, приложение может управлять содержимым клиентской области окна при изменении размера или положения окна.

Окно получает это сообщение через функцию WindowProc .

#define WM_NCCALCSIZE                   0x0083

Параметры

wParam

Если wParam имеет значение TRUE, оно указывает, что приложение должно указать, какая часть клиентской области содержит допустимые сведения. Система копирует допустимые сведения в указанную область в новой клиентской области.

Если wParam имеет значение FALSE, приложению не нужно указывать допустимую часть клиентской области.

lParam

Если wParam имеет значение TRUE, lParam указывает на структуру NCCALCSIZE_PARAMS , содержащую сведения, которые приложение может использовать для вычисления нового размера и положения клиентского прямоугольника.

Если wParam имеет значение FALSE, lParam указывает на структуру RECT . При входе структура содержит предлагаемый прямоугольник окна для окна. При выходе структура должна содержать экранные координаты соответствующей клиентской области окна.

Возвращаемое значение

Тип: LRESULT

Если параметр wParam имеет значение FALSE, приложение должно возвращать ноль.

Если wParam имеет значение TRUE, приложение должно возвращать ноль или сочетание следующих значений.

Если wParam имеет значение TRUE , а приложение возвращает ноль, старая клиентская область сохраняется и выравнивается по верхнему левому углу новой клиентской области.

Возвращаемый код/значение Описание
WVR_ALIGNTOP
0x0010
Указывает, что клиентская область окна должна быть сохранена и выровнена по верхней части нового положения окна. Например, чтобы выровнять клиентную область по верхнему левому углу, верните значения WVR_ALIGNTOP и WVR_ALIGNLEFT .
WVR_ALIGNRIGHT
0x0080
Указывает, что клиентская область окна должна быть сохранена и выровнена по правому краю нового положения окна. Например, чтобы выровнять область клиента по правому нижнему углу, верните значения WVR_ALIGNRIGHT и WVR_ALIGNBOTTOM.
WVR_ALIGNLEFT
0x0020
Указывает, что клиентская область окна должна быть сохранена и выровнена по левой стороне нового положения окна. Например, чтобы выровнять область клиента по левому нижнему углу, верните значения WVR_ALIGNLEFT и WVR_ALIGNBOTTOM .
WVR_ALIGNBOTTOM
0x0040
Указывает, что клиентская область окна должна быть сохранена и выровнена по нижней части нового положения окна. Например, чтобы выровнять область клиента по верхнему левому углу, верните значения WVR_ALIGNTOP и WVR_ALIGNLEFT .
WVR_HREDRAW
0x0100
Использование в сочетании с любыми другими значениями, кроме WVR_VALIDRECTS, приводит к полному перерисовке окна, если размер клиентского прямоугольника изменяется горизонтально. Это значение похоже на стиль класса CS_HREDRAW
WVR_VREDRAW
0x0200
Использование в сочетании с любыми другими значениями, кроме WVR_VALIDRECTS, приводит к полному перерисовке окна, если размер клиентского прямоугольника изменяется вертикально. Это значение похоже на стиль класса CS_VREDRAW
WVR_REDRAW
0x0300
Это значение приводит к перерисовкам всего окна. Это сочетание значений WVR_HREDRAW и WVR_VREDRAW .
WVR_VALIDRECTS
0x0400
Это значение указывает, что при возвращении из WM_NCCALCSIZE прямоугольники, заданные элементами rgrc[1] и rgrc[2] структуры NCCALCSIZE_PARAMS , содержат допустимые прямоугольники назначения и исходной области соответственно. Система объединяет эти прямоугольники для вычисления области сохраняемого окна. Система копирует любую часть изображения окна, которая находится в исходном прямоугольнике, и обрезает изображение в целевой прямоугольник. Оба прямоугольника находятся в родительских или экранных координатах. Этот флаг нельзя сочетать с другими флагами.
Это возвращаемое значение позволяет приложению реализовать более сложные стратегии сохранения клиентской области, такие как центрирование или сохранение подмножества клиентской области.

 

Комментарии

Окно может быть перерисовывано в зависимости от того, задан ли стиль класса CS_HREDRAW или CS_VREDRAW. Это обработка этого сообщения с обратной совместимостью по умолчанию функцией DefWindowProc (в дополнение к обычному расчету клиентского прямоугольника, описанному в предыдущей таблице).

Если wParam имеет значение TRUE, простое возвращение 0 без обработки NCCALCSIZE_PARAMS прямоугольников приведет к тому, что размер клиентской области изменится до размера окна, включая рамку окна. Это приведет к удалению рамки окна и подпись элементов из окна, оставив только клиентская область.

Начиная с Windows Vista удаление стандартного кадра путем простого возврата 0, если wParam имеет значение TRUE , не влияет на кадры, которые расширяются в клиентской области с помощью функции DwmExtendFrameIntoClientArea . Будет удален только стандартный кадр.

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Winuser.h (включая Windows.h)

См. также раздел

Справочные материалы

DefWindowProc

MoveWindow

SetWindowPos

NCCALCSIZE_PARAMS

Основные понятия

Windows

Другие ресурсы

RECT