Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
52
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
      1. Вычисление геометрии для поверхностей управления

Вы должны предусмотреть функцию, которая вычисляет геометрию управляющей поверхности. Поверхности управления опрашиваются для вычисления их геометрии дважды, когда виджет, являющийся их владельцем, опрашивается для вычисления его геометрии:

  • непосредственно перед вычислением геометрии виджета (что позволяет виджету изменить свои размеры в соответствии с требованиями своих поверхностей, если виджет заботится об этом – и некоторые виджеты таки делают это);

  • сразу после (позволяя поверхностям позиционировать и задать свои размеры в соответствии с размерами виджета).

Аргумент почтового сообщения, передаваемый функции геометрии, говорит Вам, какой случай обрабатывается.

Поверхность может также вычислять свою геометрию на основании геометрии других поверхностей. Используя функции PtCalcSurface() или PtCalcSurfaceById(), вы можете гарантировать, что поверхности, которыми Вы интересуетесь, вычислили свою геометрию до того, как их рассматривают.

Текущая запись геометрии поверхности – это просто вопрос прямой модификации массива указателя поверхностей. Убедитесь, что Вы знаете, как этот массив организован, перед тем как обрабатывать его. Эта организация подробно рассмотрена в документации к функции PtCreateSurface().

Эти функции имеют дело с геометрией поверхностей управления:

PtCalcSurface()

Вынуждает поверхность вычислить свою геометрию

PtCalcSurfaceByAction()

Вынуждает все поверхности, связанные с действием, вычислить свою геометрию

PtCalcSurfaceById()

Вынуждает поверхность управления с заданным идентификатором вычислить свою геометрию

PtSurfaceCalcBoundingBox(), PtSurfaceCalcBoundingBoxById()

Вычисляет окаймляющий прямоугольник для поверхности управления

PtSurfaceExtent(), PtSurfaceExtentById()

Вычисляет пределы поверхности управления

PtSurfaceHit()

Находит поверхность управления для заданной точки

PtSurfaceRect(), PtSurfaceRectById()

Получает ограничивающий прямоугольник для поверхности управления

PtSurfaceTestPoint()

Проверяет, находится ли точка на поверхности управления

      1. Прорисовка поверхностей управления

Поверхности управления опрашиваются на самопрорисовку от заднего плана вперёд, после того как виджет перерисовал себя. Никакого отсечения для Вас не производится. Если Вы хотите отсечения, Вы осуществляете необходимую логику подгонки списка отсечений по ходу прохождения поверхностей, и затем восстанавливаете стек отсечений после того, как прорисована последняя поверхность. В противном случае Вы получите какие-то непредсказуемые результаты.

Следующие функции инициируют перерисовку поверхностей управления:

PtDamageSurface(), PtDamageSurfaceById()

Помечает поверхность как повреждённую, так что она будет перерисована.

PtDamageSurfaceByAction()

Повреждает все поверхности, связанные с действием.

Соседние файлы в папке Литература