Шаг 409 - CFrameWnd

409_1.gif (1864 b)

Класс CFrameWnd обеспечивает функциональные возможности Windows на основе одиночного интерфейса документа (SDI) для всплывающих окон наряду с элементами для управления окном.

Чтобы создавать полезное рамочное окно для Вашей прикладной программы, получите класс из CFrameWnd. Добавьте поля к полученному классу, чтобы сохранить данные, специфические для Вашей прикладной программы. Примените сообщения и карту сообщения в полученном классе, чтобы определить то, что случается, когда сообщения полученные окном.

Имеются три способа создать рамочное окно:

Непосредственно создайте используя Create.
Непосредственно создайте используя LoadFrame.
Косвенно создайте  используя шаблон документа. 

Прежде, чем Вы вызываете Create или LoadFrame, Вы должны создать объект рамочного окна в "куче ", используя C++ new оператор. Прежде, чем вызывать Create, Вы можете также регистрировать класс окна глобальной функцией AfxRegisterWndClass, чтобы установить пиктограмму и стили класса для рамки.

Используйте Create функцию, чтобы передать параметры создания рамки как непосредственные параметры.

LoadFrame требует, меньшее количество параметров чем Create, и взамен восстанавливает большинство значений по умолчанию из ресурсов, включая заголовок рамки, пиктограмму, таблицу акселератора, и меню. Чтобы быть доступным LoadFrame, все эти ресурсы должны иметь тот же самый ресурс ID (например IDR_MAINFRAME).

Когда объект CFrameWnd содержит виды и документы, они созданы косвенно рамкой вместо непосредственного создания программистом. Объект CDocTemplate обеспечивает создание рамки, создание вида, и подключение видов к соответствующему документу. Параметры CDocTemplate конструктора определяют CRuntimeClass из трех включаемых классов (документ, рамка, вид). Объект CRuntimeClass используется рамкой, чтобы динамически создать новые рамки когда это определено пользователем (например, используя команду File New или в многодокументной среде (MDI) командой Window New).

Класс рамочного окна, полученный из CFrameWnd должен быть объявлен с DECLARE_DYNCREATE для вышеупомянутого RUNTIME_CLASS механизма, чтобы работать правильно.

CFrameWnd содержит заданные по умолчанию реализации чтобы выполнить следующие функции основного окна в типичной прикладной программе для Windows:

1. CFrameWnd рамочное окно следит за активным просмотром, который не зависит от активного окна Windows или текущего фокуса ввода. Когда рамка повторно активизирована, активному просмотру сообщается путем вызова вызывая CView::OnActivateView.

2. Сообщения команды и много общих уведомительных сообщений рамки, включая обработанный OnSetFocus, OnHScroll, и OnVScroll CWnd, делегированы CFrameWnd рамочным окном к активному настоящее время просмотру.

3. Активный просмотр (или в настоящее время активное MDI порожденное рамочное окно в случае MDI рамки) может определять заголовок рамочного окна. Это свойство может быть заблокировано, выключением FWS_ADDTOTITLE бита стиля рамочного окна.

4. CFrameWnd рамочное окно управляет позиционированием областей управления, видов и других дочерних окон внутри клиентской области окна рамки. Рамочное окно также делает модифицирование времени простоя инструментальной панели и других кнопок области управления. CFrameWnd рамочное окно также переключает заданные по умолчанию реализации команд для переключения вкл. и выкл. инструментальной панелью и строкой состояния.

5. CFrameWnd рамочное окно управляет областью главного меню. Когда всплывабщее отображается, рамочное окно использует UPDATE_COMMAND_UI механизм, чтобы определить, которые пункты меню нужно допустить, заблокировать, или проверить. Когда пользователь выбирает пункт меню, рамочное окно модифицирует строку состояния со строкой сообщения для той команды.

6. CFrameWnd рамочное окно имеет факультативную таблицу акселератора, которая автоматически транслирует ускорители клавиатуры.

7. CFrameWnd рамочное окно имеет факультативную справку ID установленную LoadFrame, который используется для контекстно-зависимой справки. Рамочное окно - обеспечивает полумодальное состояние типа контекстно-зависимой справки (SHIFT+F1) и режимы предварительного просмотра печати.

8. CFrameWnd рамочное окно откроет файл, перемещаемый из диспетчера файлов и отпущенный на рамочном окне. Если расширение файла зарегистрировано и связано с прикладной программой, рамочное окно отвечает на динамический обмен данными (DDE) , который происходит, когда пользователь открывает файл данных в диспетчере файлов или когда функция ShellExecute Windows вызвана.

9. Если рамочное окно - основное окно прикладной программы (то есть CWinThread::m_pMainWnd), когда пользователь закрывает прикладную программу, рамочное окно запрашивает пользователя сохранять любые изменяемые документы ( OnClose и OnQueryEndSession).

10. Если рамочное окно - основное окно прикладной программы, рамочное окно - контекст для выполнения WinHelp. Закрытие рамочного окна закрыло бы WINHELP.EXE, если справки запущено из этой прикладной программы.

Не используйте C++ delete оператор чтобы уничтожить рамочное окно. Используйте CWnd::DestroyWindow вместо этого. CFrameWnd реализация PostNcDestroy удалит объект C++, когда окно разрушено. Когда пользователь закрывает рамочное окно, значение по умолчанию OnClose вызовет DestroyWindow.

#include <afxwin.h>

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