Вход/Регистрация
Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2
вернуться

Фролов Григорий Вячеславович

Шрифт:

 virtual BOOL InitInstance;

 //}}AFX_VIRTUAL

// Implementation

 //{{AFX_MSG(CMultiApp)

 afx_msg void OnAppAbout;

 //}}AFX_MSG

 // Класс CMultiApp может получать сообщения

 DECLARE_MESSAGE_MAP

};

В приложении определен только один объект базового класса приложения theApp. Этот объект должен быть один вне зависимости от того, какой интерфейс имеет приложение – однооконный, многооконный или основанный на диалоговой панели:

CMultiApp theApp;

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

Конструктор класса, созданный MFC AppWizard, не выполняет никаких действий. В нем вы можете разместить код для инициализации объекта CMultiApp:

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

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

CMultiApp::CMultiApp {

 // TODO:

}

Метод InitInstance класса CMultiApp

Основную работу по инициализации приложения выполняет метод InitInstance главного класса приложения, определенный в файле Multi.cpp. Как видите, он отличается от метода InitInstance, который используется для однооконных приложений:

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

// Метод InitInstance

BOOL CMultiApp::InitInstance {

#ifdef _AFXDLL

 Enable3dControls;

#else

 Enable3dControlsStatic;

#endif

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

 LoadStdProfileSettings;

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

 CMultiDocTemplate* pDocTemplate;

 pDocTemplate = new CMultiDocTemplate(IDR_MULTITYPE, RUNTIME_CLASS(CMultiDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CMultiView));

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

 AddDocTemplate(pDocTemplate);

 // Создаем главное окно приложения (MDI Frame window)

 CMainFrame* pMainFrame = new CMainFrame;

 if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE;

 m_pMainWnd = pMainFrame;

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

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

 CCommandLineInfo cmdInfo;

 ParseCommandLine(cmdInfo);

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

 if (!ProcessShellCommand(cmdInfo)) return FALSE;

 // Отображаем окно

 pMainFrame->ShowWindow(m_nCmdShow);

 pMainFrame->UpdateWindow;

 return TRUE;

}

В начале InitInstance вызываются методы Enable3dControls и LoadStdProfileSettings. Они уже были описаны в предыдущем томе серии “Библиотека системного программиста”, посвященном MFC, поэтому мы не станем на них останавливаться и перейдем к рассмотрению шаблонов документа приложения.

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

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

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

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

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

  • Читать дальше
  • 1
  • ...
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: