Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОУК / 09 семестр / Книги и методические указания / Руководство программиста в Photon.doc
Источник:
Скачиваний:
364
Добавлен:
04.03.2014
Размер:
7.99 Mб
Скачать

О регионах потомка

Начало координат региона потомка задаётся относительно начала координат родителя. Таким образом, когда регион перемещается, все его потомки автоматически перемещаются вместе с ним. И также, когда регион уничтожается, уничтожаются его потомки.

 Если Вы хотите сделать регион большим по размеру, чем какой-либо другой регион Вашего приложения, сделайте его потомком корневого региона, вызвав функцию PhRegionOpen() или PhRegionChange(), задав Ph_ROOT_RID как родительский.

Регионы и отсечение событий

Регион может генерировать или получать события только там, где он перекрывается со своим родителем. Например, на следующем рисунке:

  • Потомок 1 может генерировать или получать события во всём своём регионе

  • Потомок 2 может генерировать или получать события только в той малой серой зоне, которая перекрывается с регионом родителя.

Рис. 22-2. Регионы и отсечение событий

На основании этого свойства регионов, любая часть региона, которая не перекрывается со своими родителями, в действительности является невидимой.

Месторасположение и иерархия Иерархия регионов:

Рис. 22-3. Иерархия регионов типичной системы Photon'а

В Photon'е каждый регион имеет родительский регион. Эта связь родитель-потомок приводит к появлению иерархии регионов с корневым регионом в вершине. Следующая диаграмма показывает иерархию типичной системы Photon'а:

Родительский регион

Менеджер Photon'а всегда размещает регионы потомков впереди (т.е. в сторону пользователя) своих родителей:

 При открытии региона приложение определяет родителя региона. Если приложение открывает регион, не задавая его родителя, родитель региона устанавливается по умолчанию – базовые регионы становятся потомками корневого региона и окна становятся потомками фонового региона оконного менеджера.

Братские регионы

Кроме родителя, регион может иметь "братьев", т.е. другие регионы, имеющие того же родителя. Регион знает только о своих двух братьях – о том, который непосредственно перед ним, и том, который непосредственно за ним.

На следующем рисунке показан родитель с тремя потомками, и взаимосвязи, которые имеются между регионом потомка 2 с его братьями:

Когда приложение открывает регион (напр., регион потомка 2 на вышеприведенном рисунке), оно может либо не задавать ничего, либо задать одного, либо двух непосредственных братьев. В зависимости от того, как приложение задало этих братьев, новый регион может быть размещён в соответствии с принимаемыми по умолчанию правилами (см. ниже) или в определённом месторасположении.

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

Месторасположение по умолчанию

Если приложение открывает регион, не задавая братьев, менеджер Photon'а размещает этот регион, используя принимаемые по умолчанию правила месторасположения. В большинстве случаев эти правила приводят к тому, что вновь открытый регион располагается впереди своего самого переднего брата, который становится "братом сзади" для нового региона. (Чтобы использовать другие правила месторасположения, Вы можете задать флаг Ph_FORCE_FRONT).

Например, на следующем рисунке регион потомка 1 является самым передним регионом:

Когда приложение открывает регион потомка 2 с принимаемым по умолчанию месторасположением (следующий рисунок), регион 2 размещается впереди региона 1. Регион 1 становится братом сзади региона 2. Регион 2 становится братом спереди региона 1.