На этом шаге мы рассмотрим структуру MFC-приложения.
Познакомившись с архитектурой Windows-приложения, можно переходить к изучению приложений на базе MFC.
Классы библиотеки MFC не только инкапсулируют Win32 API. Среди них есть небольшая группа классов, представляющих стандартные объекты приложения и устанавливающих в этой группе взаимосвязи с целью реализации обычной работы Windows-программы. Такие определяющие архитектуру приложения классы вместе с некоторыми глобальными функциями составляют каркас приложения, который можно использовать в качестве основы любой программы. Для создания набора производных от них классов обычно применяют мастер MFC AppWizard. Добавляя к ним свой код, Вы напишете нужную Вам программу.
Каркас MFC-приложения реализует базовую архитектуру Windows-приложения с помощью:
Приложение представлено в MFC классом CWinApp, производным от класса потока CWinThread. CWinApp - это класс первичного потока. Он инкапсулирует функции инициализации, работы и завершения приложения, описанные в таблице 1.
Функция | Описание |
---|---|
InitInstance() | Инициализирует каждый экземпляр запускаемого приложения. Отображает его главное окно |
Run() | Реализует цикл обработки сообщений |
OnIdle() | Вызывается каркасом, когда в очереди нет сообщений для обработки. Можно переопределить эту функцию для выполнения фоновых задач |
ExitInstance() | Вызывается при завершении экземпляра приложения |
В каждом MFC-приложении должен присутствовать производный от CWinApp класс. Также необходимо переопределить функцию InitInstance(). Она вызывается непосредственно функцией WinMain() и проводит специфическую инициализацию приложения.
В каркасе приложения существует стандартная функция WinMain(). Вызывая некоторые глобальные функции, она производит стандартную инициализацию приложения, например регистрирует оконный класс. Затем она запускает функцию-член объекта приложения InitInstance(). После чего начинает работать функция-член Run(), создающая цикл обработки сообщений, который завершается с приходом сообщения WM_QUIT. В момент его получения вызывается функция ExitInstance(). После нее выполняются операции по очистке памяти и завершению приложения.
Основной компонент Windows-приложения - главное окно, которое необходимо для взаимодействия с программой. Им может быть и простое диалоговое окно, и окно-рамка (его размер можно изменять), содержащее меню, панели инструментов и клиентскую область. В любом случае в каркасе приложения должен присутствовать класс, производный от CDialog или CFrameWnd, который приложение будет использовать для создания объекта главного окна. При запуске программы главное окно отображает функция InitInstance().
А теперь вернемся к проекту МуАрр, созданному на шаге 2. На его примере Вы изучите классы полученного каркаса приложения.
Рис.1. Просмотр классов проекта МуАрр
На следующем шаге мы рассмотрим механизм обработки ссобщений.