Win32 API. Структуры и сообщения окна - Сообщение WM_NCCALCSIZE

ОГЛАВЛЕНИЕ

Сообщение WM_NCCALCSIZE

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

Синтаксис

 
WM_NCCALCSIZE
fCalcValidRects = (BOOL) wParam;  // флажок действующей области
lpncsp = (LPNCCALCSIZE_PARAMS) lParam;  // указатель на размер
     // вычисляемых данных или
lpncsp = (LPRECT) lParam;   // указатель на новые координаты окна

Параметры

fCalcValidRects
Значение wParam. Это Булево значение, если ИСТИНА (TRUE), то определяется, что прикладная программа должна указать, какая часть рабочей области содержит допустимую информацию. Операционная система копирует правильную информацию в указанный район внутри новой рабочей области. Также, если этот параметр - ИСТИНА (TRUE), lParam указывает на структуру NCCALCSIZE_PARAMS.Если этот параметр - ЛОЖЬ(FALSE), прикладная программа не должна указывать допустимую часть рабочей области. Также, если этот параметр - ЛОЖЬ(FALSE), lParam указывает на структуру RECT.
lpncsp

Значение lParam. Если wParam - ИСТИНА (TRUE), lParam указывает на структуру NCCALCSIZE_PARAMS, которая содержит информацию, которую прикладная программа может использовать, чтобы вычислить новый размер и позицию прямоугольника пользователя. Если wParam - ЛОЖЬ(FALSE), lParam указывает на структуру RECT, которая содержит новые координаты окна, которое было перемещено или изменено. Этот параметр эквивалентен rgrc [0] из структуры NCCALCSIZE_PARAMS.

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

Если параметр fCalcValidRects - ЛОЖЬ(FALSE), прикладная программа должна возвратить нуль. Если fCalcValidRects - ИСТИНА (TRUE), прикладная программа может возвратить нуль или допустимую комбинацию следующих значений:
  • WVR_ALIGNTOP, WVR_ALIGNLEFT, WVR_ALIGNBOTTOM, WVR_ALIGNRIGHT - Эти значения, используемые в комбинаци-ях, определяют, что рабочая область окна должна сохраниться и выравниваться соот-ветственно относительно новой позиции окна. Например, чтобы выровнять рабочую область по левому нижнему углу, возвратите значения WVR_ALIGNLEFT и WVR_ALIGNTOP.
  • WVR_HREDRAW, WVR_VREDRAW - Эти значения, используемые в комбинации с любыми другими значениями, заставляют окно быть полностью повторно выведенным, если прямоугольник пользователя изменяет размер горизонтально или вертикально. Эти значения подобны стилям класса CS_HREDRAW и CS_VREDRAW.
  • WVR_REDRAW - Это значение вынуждает повторно вывести все окно. Это - комбинация значений WVR_HREDRAW и WVR_VREDRAW.
  • WVR_VALIDRECTS - Это значение указывает, что, при возврате из WM_NCCALCSIZE, прямоугольники, заданные элементами rgrc [1] и rgrc [2] структуры NCCALCSIZE_PARAMS содержат правильный источник и области адресования прямоугольников, соответственно. Windows объединяет эти прямоугольники, чтобы вычислить область окна, которую нужно сохранить. Windows копирует любую часть изображения окна, которое является внутри исходного прямоугольника и прикрепляет изображение к прямоугольнику назначения. Оба прямоугольника находятся в окне - относительно родительских или экранных координат. Это возвращаемое значение позволяет прикладной программе выполнять более сложные приемы охраны рабочей области, типа центрирования или сохранения подмножества рабочей области.

Если fCalcValidRects - ИСТИНА (TRUE), а программа возвращает нуль, старая рабочая область сохраняется и выравнивается по левому верхним углом новой рабочей области.

Действия по умолчанию

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

Смотри также

DefWindowProc, MoveWindow, SetWindowPos, NCCALCSIZE_PARAMS, RECT

Размещение и совместимость WM_NCCALCSIZE

Windows NT   Да 
Win95    Да
Win32s    Да
Импортируемая библиотека -
Заголовочный файл   winuser.h
Unicode    Нет
Замечания по платформе  Не имеется