Предыдущая версия справа и слева
Предыдущая версия
|
Следующая версия
Следующая версия справа и слева
|
bbdocuviews [2014/11/21 17:09] admin |
bbdocuviews [2014/11/21 17:12] admin |
====== Как загружаются отображения ====== | ====== Как загружаются отображения ====== |
| |
=== Открытие отображения в окне === | ===== Открытие отображения в окне ===== |
| |
Любое отображение открывается средствами платформонезависимого модуля Views. Процедура Views.Open обращается к хуку открытия, который скрыт в интерфейсе модуля, потому что является наследником Kernel.Hook и реализуется в эталонном каркасе в модуле StdDialog. | Любое отображение открывается средствами платформонезависимого модуля Views. Процедура Views.Open обращается к хуку открытия, который скрыт в интерфейсе модуля, потому что является наследником Kernel.Hook и реализуется в эталонном каркасе в модуле StdDialog. |
| |
| |
=== Модуль Windows === | ===== Модуль Windows ===== |
| |
В документации каркаса есть раздел **Compound Documents**, в котором обоснована необходимость поддержки каркасом разделения на пространство документа и пространство отображения. Модуль StdDialog создаёт персистентный объект - документ, затем создаёт объект окна и передаёт их в модуль Windows, выводящий этот объект в пространство отображения. | В документации каркаса есть раздел **Compound Documents**, в котором обоснована необходимость поддержки каркасом разделения на пространство документа и пространство отображения. Модуль StdDialog создаёт персистентный объект - документ, затем создаёт объект окна и передаёт их в модуль Windows, выводящий этот объект в пространство отображения. |
Процедура CreateDoc средствами WinApi и самого каркаса настраивает окно, после чего сначала вызывает метод Windows.Window.Restore для перестройки дерева фреймов, а потом метод Windows.Window.Update для обновления фреймов на экране (см. "Построение дерева фреймов"). | Процедура CreateDoc средствами WinApi и самого каркаса настраивает окно, после чего сначала вызывает метод Windows.Window.Restore для перестройки дерева фреймов, а потом метод Windows.Window.Update для обновления фреймов на экране (см. "Построение дерева фреймов"). |
| |
=== Модули Views и Ports === | ===== Модули Views и Ports ===== |
| |
Фрейм является т.н. "маппером" (mapper), или, другими словами, способом доступа к порту, на котором выводится отображение. | Фрейм является т.н. "маппером" (mapper), или, другими словами, способом доступа к порту, на котором выводится отображение. |
При построении дерева фреймов, отображению может понадобиться особый фрейм, который запрашивается методом Views.View.GetNewFrame. Если отображение не вернёт никакого фрейма, то ему назначается стандартный фрейм. | При построении дерева фреймов, отображению может понадобиться особый фрейм, который запрашивается методом Views.View.GetNewFrame. Если отображение не вернёт никакого фрейма, то ему назначается стандартный фрейм. |
| |
=== Построение дерева фреймов === | ===== Построение дерева фреймов ===== |
| |
Для построения и обновления дерева фреймов в модуле Views предусмотрены две процедуры UpdateRoot и ValidateRoot. Первая из них определяет видимые области, требующие перерисовки. Вторая сперва отбрасывает ненужные фреймы, а затем перестраивает заново дерево фреймов, вызывая RestoreRoot. | Для построения и обновления дерева фреймов в модуле Views предусмотрены две процедуры UpdateRoot и ValidateRoot. Первая из них определяет видимые области, требующие перерисовки. Вторая сперва отбрасывает ненужные фреймы, а затем перестраивает заново дерево фреймов, вызывая RestoreRoot. |
Теперь самое интересное. Перед вызовом //RestoreFrame// открывается буфер порта, а после - закрывается. Это необходимо для накопления выводимых отображениями данных в буфере, который затем одномоментно "выбрасывает" их на экран или другое устройство отображения. | Теперь самое интересное. Перед вызовом //RestoreFrame// открывается буфер порта, а после - закрывается. Это необходимо для накопления выводимых отображениями данных в буфере, который затем одномоментно "выбрасывает" их на экран или другое устройство отображения. |
| |
=== Корневой фрейм === | == Корневой фрейм == |
| |
Это фрейм, находящийся на вершине дерева фреймов. С него начинается построение дерева, поэтому для обозначения корня есть специальный тип //Views.RootFrame//. Поскольку корневой фрейм нельзя встраивать посреди других фреймов, то в процедуре //Views.InstallFrame// стоит проверка типа фрейма. | Это фрейм, находящийся на вершине дерева фреймов. С него начинается построение дерева, поэтому для обозначения корня есть специальный тип //Views.RootFrame//. Поскольку корневой фрейм нельзя встраивать посреди других фреймов, то в процедуре //Views.InstallFrame// стоит проверка типа фрейма. |