Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 82

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 76 77 78 79 80 81 < 82 > 83 84 85 86 87 88 .. 204 >> Следующая

3. Вызов функции Initlnstance функцией WinMain
Вскоре после получения управления функция WinMain вызывает Initlnstance класса CWinGreetApp, используя адрес объекта, сохраненный конструктором класса cwinApp на этапе 1. Функция Initlnstance служит для инициализации приложения и будет описана далее в этой главе.
Примечание
MFC сохраняет в указателе класса cwinApp адрес объекта CWinGreetApp, используемый для вызова функции initlnstance. Так как последняя является виртуальной функцией (см. гл. 5), то управление передается переопределенной версии initlnstance, заданной внутри класса CWinGreetApp. Класс cwinApp содержит еще несколько виртуальных функций, которые можно переопределить. Например, чтобы выполнить завершающую очистку, можно переопределить функцию Exitinstance, выполняемую непосредственно перед завершением работы приложения. Информация о переопределяемых функциях класса cwinApp приведена в следующих разделах справочной системы: Visual С++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation Class Library, Class Library Reference, CWinApp, CWinApp Class Members (см. подраздел Overridables.)
4. Обработка сообщений функцией WinMain
После завершения задач инициализации функция WinMain входит в цикл, содержащий системные вызовы дтя получения и распределения всех сообщений, посланных объектам внутри программы WinGreet. (На самом деле этот цикл содержится в функции Run, вызываемой из WinMain.) Обработка сообщений будет описана в гл. 10. В процессе выполнения приложения управление остается внутри цикла. Однако используемый в Windows 95 и Windows NT режим приоритетной многозадачности позволяет одновременно выполняться другим программам (гл. 22).
5. Выход из функции WinMain и завершение программы
Когда пользователь программы WinGreet выбирает команду Exit в меню File или команду Close в системном меню, или нажимает на Close, MFC уничтожает окно программы и вызывает функцию Win32 API : : PostQuitMessage для выхода из цикла обработки сообщений. Вслед за этим происходит возврат из функции WinMain, что приводит к завершению работы приложения.
Функция Initlnstance
Initlnstance - функция класса CWinGreetApp, определяемая в файле WinGreet.срр. Библиотека MFC вызывает эту функцию из функции WinMain, а работа ее заключается в инициализации приложения.
При вызове функции initlnstance большинство традиционных графических приложений создают только главное окно программы, как того требует модель представления документа, используемая библиотекой MFC. Однако мастер AppWizard выполняет более сложные вещи. Он создает шаблон документа, сохраняющий информацию о классах документа: главного окна и представления (не путайте термин шаблон в этом контексте с шаблонами языка С+ + , описанными в гл. 7). Шаблон документа также содержит идентификатор ресурсов программы, используемый при отображении и управлении документом (в частности, при выводе меню, значка и т.д.). Когда программа запускается впервые и создает новый документ, то с помощью шаблона документа она создает: для сохранения документа — объект класса документа; для создания окна представления, отображающего документ, — объект класса представления; для вывода главного окна программы, ограничивающего окно представления, — объект класса главного окна.
Шаблон документа является объектом языка С++. Для SDI-приложений, таких как WinGreet, это экземпляр MFC-класса csingleDocTemplate. Шаблон документа создается и сохраняется внутри объекта приложения в функции Initlnstance.
// Регистрация шаблонов документа приложения. Шаблоны документов // служат для связи документа с главным окном и окном представления
CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAIN FRAME,
RUNTIME_CLASS(CWinGreetDoc) ,
RUNTIME_CLASS(CMainFrame), // главное окно SDI-приложения RUNTIME_CLASS(CWinGreetView) ) ; AddDocTemplate(pDocTemplate) ;
Этот код работает следующим образом.
• Создается указатель pDocTemplate на шаблон документа.
• Используется оператор new для динамического создания шаблона документа, т. е. экземпляра класса CSingleDocTemplate. При этом адрес объекта присваивается указателю pDocTemplate.
• Передаются четыре параметра конструктору класса CSingleDocTemplate. Первый — идентификатор ресурсов программы, используемых при отображении и управлении документом (таблица командных клавиш, значок, меню и строка заголовка). Следующие три параметра содержат информацию о классах
главного окна и представления. Информация о каждом классе передается при вызове макроса runtime_class, возвращающего указатель на класс CRuntimeClass. Эта информация позволяет программе динамически создавать объекты каждого класса при первоначальном создании нового документа.
• Указатель на объект шаблона передается в функцию AddDocTemplate класса CWinApp, сохраняющую шаблон документа в объекте приложения так, чтобы шаблон был открыт.
После создания шаблона документа функция Initlnstance вызовом функции ParseCommandLine извлекает командную строку, если она была передана в программу при запуске.
Предыдущая << 1 .. 76 77 78 79 80 81 < 82 > 83 84 85 86 87 88 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100