Портрет архитектуры "документ-представление"
Документы и представления связаны в типичном приложении MFC. Данные хранятся в документе, но представление имеет привилегированный доступ к данным. Разделение документа от представления отделяет хранение и обслуживание данных от отображения.
Получение доступа к данным документа из представления
Представление обращается к данным документа с помощью функции GetDocument , которая возвращает указатель на документ или делает класс представления C++ friend
класса документа. Затем представление использует его доступ к данным, чтобы получить данные, когда он готов к рисованию или иначе манипулировать им.
Например, из функции-члена OnDraw представления представление используется GetDocument
для получения указателя документа. Затем он использует этот указатель для доступа к элементу CString
данных в документе. Представление передает строку TextOut
функции. Чтобы просмотреть код для этого примера, см. статью "Рисование" в представлении.
Входные данные пользователя в представление
Представление также может интерпретировать щелчк мыши внутри себя как выбор или редактирование данных. Аналогичным образом он может интерпретировать нажатия клавиш как запись данных или редактирование. Предположим, пользователь вводит строку в представлении, которое управляет текстом. Представление получает указатель на документ и использует указатель для передачи новых данных в документ, который сохраняет его в какой-то структуре данных.
Обновление нескольких представлений одного документа
В приложении с несколькими представлениями одного документа ( например, окно разделения в текстовом редакторе) представление сначала передает новые данные в документ. Затем он вызывает функцию-член UpdateAllViews документа, которая сообщает всем представлениям документа обновить себя, отражая новые данные. Это синхронизирует представления.