Шаг 244 - Рамка окна

Для реализации рамки окна разработан базовый класс CFrameWnd. Этот класс не только сам является рамкой окна, но и базовым классом для других классов рамок окон. Приложения на основе MDI более сложны в организации и содержат две рамки окон в отличии от приложений SDI, где одна рамка. На рисунке ниже показаны различия.

244_1.gif (2563 b)

Итак, мы имеем разные классы рамок для SDI:

CFrameWnd

И MDI приложений:

CMDIFrameWnd
CMDIChildWnd

С рамкой тесно связано понятие окна. Окно при появлении на экране ограничивается рамкой с необязательными дополнительными элементами типа меню, панели инструментов, строки состояния и так далее. Рамка переадресует получаемые сообщения своим видам. За управление рамкой, и в частности, изменение размеров, перемещение отвечает Windows. Класс рамки отвечает за:

  1. Передачу команд и извещений в активный вид.
  2. Управление размещением элементов управления, дочерних окон внутри своей области. Во время циклов ожидания обновляет панели инструментов и меню.
  3. Управление полосой основного меню. В момент раскрытия меню использует механизм UPDATE_COMMAND_UI для установки активности пунктов меню в состояние активен, заблокирован, помечен и так далее. При выборе меню выводит надпись в строку состояния.
  4. Может использовать таблицу акселераторов для транспортирования, комбинаций клавиш в командах.
  5. Управление механизмом контекстно зависимой справки и режимом предварительного просмотра.
  6. Поддержку операций drag-and-drop для файлов.
  7. Если рамка является главным окно приложения, то при закрытии предлогает сохранение документа.

Любое приложение состоит из двух компонентов: рамки CFrameWnd и рабочей области внутри рамки CView. Общий вид приложения можно представить так.

244_2.gif (1798 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 25.10.2000