Инструменты пользователя

Инструменты сайта


bbdocuviews

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bbdocuviews [2014/11/21 17:09]
admin
bbdocuviews [2014/11/21 19:03]
admin [Корневой фрейм]
Строка 1: Строка 1:
 ====== Как загружаются отображения ====== ====== Как загружаются отображения ======
  
-=== Открытие отображения в окне === +===== Открытие отображения в окне =====
  
 Любое отображение открывается средствами платформонезависимого модуля Views. Процедура Views.Open обращается к хуку открытия, который скрыт в интерфейсе модуля, потому что является наследником Kernel.Hook и реализуется в эталонном каркасе в модуле StdDialog.  Любое отображение открывается средствами платформонезависимого модуля Views. Процедура Views.Open обращается к хуку открытия, который скрыт в интерфейсе модуля, потому что является наследником Kernel.Hook и реализуется в эталонном каркасе в модуле StdDialog. 
Строка 20: Строка 19:
  
  
-=== Модуль Windows ===+===== Модуль Windows ===== 
  
 В документации каркаса есть раздел **Compound Documents**, в котором обоснована необходимость поддержки каркасом разделения на пространство документа и пространство отображения. Модуль StdDialog создаёт персистентный объект - документ, затем создаёт объект окна и передаёт их в модуль Windows, выводящий этот объект в пространство отображения. В документации каркаса есть раздел **Compound Documents**, в котором обоснована необходимость поддержки каркасом разделения на пространство документа и пространство отображения. Модуль StdDialog создаёт персистентный объект - документ, затем создаёт объект окна и передаёт их в модуль Windows, выводящий этот объект в пространство отображения.
Строка 34: Строка 34:
 Процедура CreateDoc средствами WinApi и самого каркаса настраивает окно, после чего сначала вызывает метод Windows.Window.Restore для перестройки дерева фреймов, а потом метод Windows.Window.Update для обновления фреймов на экране (см. "Построение дерева фреймов"). Процедура CreateDoc средствами WinApi и самого каркаса настраивает окно, после чего сначала вызывает метод Windows.Window.Restore для перестройки дерева фреймов, а потом метод Windows.Window.Update для обновления фреймов на экране (см. "Построение дерева фреймов").
  
-=== Модули Views и Ports ===+===== Модули Views и Ports ===== 
  
 Фрейм является т.н. "маппером" (mapper), или, другими словами, способом доступа к порту, на котором выводится отображение. Фрейм является т.н. "маппером" (mapper), или, другими словами, способом доступа к порту, на котором выводится отображение.
Строка 46: Строка 47:
 При построении дерева фреймов, отображению может понадобиться особый фрейм, который запрашивается методом Views.View.GetNewFrame. Если отображение не вернёт никакого фрейма, то ему назначается стандартный фрейм. При построении дерева фреймов, отображению может понадобиться особый фрейм, который запрашивается методом Views.View.GetNewFrame. Если отображение не вернёт никакого фрейма, то ему назначается стандартный фрейм.
  
-=== Построение дерева фреймов ===+===== Построение дерева фреймов ===== 
  
 Для построения и обновления дерева фреймов в модуле Views предусмотрены две процедуры UpdateRoot и ValidateRoot. Первая  из них определяет видимые области, требующие перерисовки. Вторая сперва отбрасывает ненужные фреймы, а затем перестраивает заново дерево фреймов, вызывая RestoreRoot.  Для построения и обновления дерева фреймов в модуле Views предусмотрены две процедуры UpdateRoot и ValidateRoot. Первая  из них определяет видимые области, требующие перерисовки. Вторая сперва отбрасывает ненужные фреймы, а затем перестраивает заново дерево фреймов, вызывая RestoreRoot. 
Строка 54: Строка 56:
 Теперь самое интересное. Перед вызовом //RestoreFrame// открывается буфер порта, а после - закрывается. Это необходимо для накопления выводимых отображениями данных в буфере, который затем одномоментно "выбрасывает" их на экран или другое устройство отображения. Теперь самое интересное. Перед вызовом //RestoreFrame// открывается буфер порта, а после - закрывается. Это необходимо для накопления выводимых отображениями данных в буфере, который затем одномоментно "выбрасывает" их на экран или другое устройство отображения.
  
-=== Корневой фрейм ===+===== Корневой фрейм ===== 
  
 Это фрейм, находящийся на вершине дерева фреймов. С него начинается построение дерева, поэтому для обозначения корня есть специальный тип //Views.RootFrame//. Поскольку корневой фрейм нельзя встраивать посреди других фреймов, то в процедуре //Views.InstallFrame// стоит проверка типа фрейма. Это фрейм, находящийся на вершине дерева фреймов. С него начинается построение дерева, поэтому для обозначения корня есть специальный тип //Views.RootFrame//. Поскольку корневой фрейм нельзя встраивать посреди других фреймов, то в процедуре //Views.InstallFrame// стоит проверка типа фрейма.
Строка 60: Строка 63:
 Перед тем, как построить дерево фреймов, требуется связать корневой фрейм с его отображением. Связывание производится процедурой ''Views.SetRoot''. Сигналы от окна пойдут именно в это отображение, и далее к другим видимым отображениям. Корневое отображение отличается от других тем, что его метод GetNewFrame возвращает фрейм корневого типа. Таким образом, невозможно спутать назначение этого отображения. Перед тем, как построить дерево фреймов, требуется связать корневой фрейм с его отображением. Связывание производится процедурой ''Views.SetRoot''. Сигналы от окна пойдут именно в это отображение, и далее к другим видимым отображениям. Корневое отображение отличается от других тем, что его метод GetNewFrame возвращает фрейм корневого типа. Таким образом, невозможно спутать назначение этого отображения.
  
-Фрейм является маппером порта, а маппер, согласно паттерну //Carrier-Rider-Mapper//, требует для своей работы бегунок (Rider) и носитель (Carrier). Бегунком здесь является //Ports.Rider//, а носителем //Ports.Port//. При подключении фрейма к порту методом ConnectToдля фрейма создаётся экземпляр бегунка. Объект порта уже должен быть создан платформенными средствами (его нельзя создавать иначе, ведь порт является абстракцией устройства вывода), при этом порту назначаются единицы измерения на устройстве и его габариты (ширина и высота) в единицах измерения.+Фрейм является маппером порта, а мапперу, согласно паттерну //Carrier-Rider-Mapper//, требуются для работы бегунок (Rider) и носитель (Carrier). Бегунком здесь является //Ports.Rider//, а носителем //Ports.Port//. При подключении фрейма к порту методом ''ConnectTo'' для фрейма создаётся экземпляр бегунка. Объект порта уже должен быть создан платформенными средствами (его нельзя создавать иначе, ведь порт является абстракцией устройства вывода), при этом порту назначаются единицы измерения на устройстве и его габариты (ширина и высота) в единицах измерения.
  
 Конечно же, для корневого отображения должен быть создан контекст, умеющий определять размеры окна. Кроме этого, потребуется проинициализировать домен отображения. И можно строить дерево. Конечно же, для корневого отображения должен быть создан контекст, умеющий определять размеры окна. Кроме этого, потребуется проинициализировать домен отображения. И можно строить дерево.
bbdocuviews.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)