// Таблица сообщений класса CSingleApp

BEGIN_MESSAGE_MAP(CSingleApp, CWinApp)

 //{{AFX_MSG_MAP(CSingleApp)

 ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

 //}}AFX_MSG_MAP

 // Стандартные команды для работы с документами

 ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)

 ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

 // Стандартная команда выбора принтера

 ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)

END_MESSAGE_MAP()

Кроме команды для обработки командного сообщения ID_APP_ABOUT, расположенного в блоке AFX_MSG_MAP, таблица сообщений содержит еще три макрокоманды, предназначенные для обработки командных сообщений с идентификаторами ID_FILE_NEW, ID_FILE_OPEN, ID_FILE_PRINT_SETUP.

Командные сообщения ID_FILE_NEW, ID_FILE_OPEN, ID_FILE_PRINT_SETUP поступают, когда пользователь выбирает из меню приложения строки с соответствующими идентификаторами. Для обработки этих командных сообщений вызываются методы класса CWinApp.

Главный объект приложения

В приложении создается всего один объект класса CSingleApp. Этот объект определяется как статический, поэтому его конструктор получает управление сразу после запуска приложения.

CSingleApp theApp;

Конструктор класса CSingleApp

Конструктор класса CSingleApp не выполняет никаких действий и состоит из пустого блока. Вы можете разместить в конструкторе класса CSingleApp код для инициализации приложения, однако лучше всего для этого воспользоваться методом InitInstance.

//////////////////////////////////////////////////////////////

// Конструктор класса CSingleApp

CSingleApp::CSingleApp() {

 // TODO: Здесь вы можете разместить свой код

}

Метод InitInstance

Метод InitInstance является виртуальным методом класса CWinApp. Когда вы наследуете главный класс приложения от базового класса CWinApp, этот метод необходимо переопределить.

MFC AppWizard переопределяет метод InitInstance автоматически для приложений с любым пользовательским интерфейсом. Однако реализация этого метода может различаться. Сравните переопределенный метод InitInstance для приложений с главной диалоговой панелью (приложение Dialog) и оконным интерфейсом (приложение Single).

//////////////////////////////////////////////////////////////

// Метод CSingleApp

BOOL CSingleApp::InitInstance() {

#ifdef _AFXDLL

 Enable3dControls();

#else

 Enable3dControlsStatic();

#endif

 // Загружаем файл конфигурации

 LoadStdProfileSettings();

 // Создаем шаблон документа

 CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(CSingleDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CSingleView));

 // Регистрируем шаблон документа

 AddDocTemplate(pDocTemplate);

 // Выполняем стандартную обработку командной строки

 // приложения

 CCommandLineInfo cmdInfo;

 ParseCommandLine(cmdInfo);

 // Обрабатываем командную строку приложения

 if (!ProcessShellCommand(cmdInfo)) return FALSE;

 return TRUE;

}

После вызова метода Enable3dControls, описанного ранее, вызывается метод LoadStdProfileSettings. Этот метод загружает файл конфигурации приложения, имеющий расширение INI. В INI-файле записаны имена нескольких файлов, с которыми работало приложение. Эти имена файлов будут добавлены как отдельные строки в меню File приложения. Кроме того, в INI-файле может храниться и другая информация.

Метод LoadStdProfileSettings определен в классе CWinApp следующим образом:

void LoadStdProfileSettings(UINT nMaxMRU = _AFX_MRU_COUNT);

Необязательный параметр nMaxMRU определяет, сколько имен файлов документов будет запоминаться. Если указать в качестве параметра nMaxMRU нулевое значение, список файлов запоминаться не будет. По умолчанию параметру nMaxMRU присваивается значение _AFX_MRU_COUNT. Константа _AFX_MRU_COUNT определена в файле afxwin.h.

#define _AFX_MRU_COUNT 4

Напомним вам, что количество запоминаемых имен файлов можно указать в диалоговой панели MFC AppWizard – Step 4 of 6 (рис. 5.3), во время разработки приложения средствами MFC AppWizard.

Затем начинается создание шаблона документов. Сначала создается указатель pDocTemplate на соответствующий класс. Для однооконных приложений это класс CSingleDocTemplate, а для многооконных – CMultiDocTemplate. Создается новый объект класса и в переменную pDocTemplate записывается указатель на него. Для создания шаблона документа используется оператор new.

Конструктору класса CSingleDocTemplate передаются четыре параметра.

CSingleDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass);

Первый параметр nIDResource определяет идентификатор ресурсов, используемых совместно с типом документов, управляемых шаблоном. К таким ресурсам относятся меню, пиктограмма, строковый ресурс, таблица акселераторов.

Остальные три параметра pDocClass, pFrameClass, pViewClass содержат указатели на объекты класса CRuntimeClass, полученные с помощью макрокоманд RUNTIME_CLASS из классов документа CSingleDoc , окна CMainFrame и окна просмотра CSingleView . Таким образом, шаблон документа объединяет всю информацию, относящуюся к данному типу документов.

Созданный шаблон документов заносится в список шаблонов с которыми работает приложение. Для этого указатель на созданный шаблон документа передается методу AddDocTemplate из класса WinApp. Указатель на шаблон документов передается через параметр pTemplate.

void AddDocTemplate(CDocTemplate* pTemplate);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату