ПЕРВАЯ ПРОГРАММА С ИСПОЛЬЗОВАНИЕМ MFC

 

Иерархия классов MFC. Файл AFXWIN.H. Создание MFC приложения.

Класс CMyMainWnd. Класс CMyApp. Создание экземпляра приложения.

 

Иерархия классов MFC

Библиотека MFC (Microsoft Foundation Classes) содержит большую иерархию классов, написанных на С++. В ее вершине находится класс СObject, который содержит различные функции, используемые во время выполнения программы.

Некоторые классы порождаются непосредственно от CObject:

·           ССmdTarget предназначен для обработки сообщений;

·           СFile предназначен для работы с файлами;

·           CDC обеспечивает поддержку контекстов устройств, в этот класс включены практически все функции графики GDI.;

·           CGDIObject является базовым классом для различных GDI-объектов, таких как перья, кисти, шрифты и другие;

·           СMenu предназначен для манипуляций с меню;

От класса CCmdTarget порождается очень важный класс CWnd. Он является базовым для создания всех типов окон, включая масштабируемые ("обычные") и диалоговые, а также различные элементы управления. Наиболее широко используемым производным классом является CFrameWnd. Как Вы увидите в дальнейшем, в большинстве программ главное окно создается с помощью именно этого класса.

От класса CCmdTarget, через класс CWinThread, порождается, наверное, единственный из наиболее важных классов, обращение к которому в MFC-программах происходит напрямую: CWinApp. Это один из фундаментальных классов, поскольку предназначен для создания самого приложения. В каждой программе имеется один и только один объект этого класса. Как только он будет создан, приложение начнет выполняться.

 

Файл AFXWIN.H

Все MFC программы должны включать файл AFXWIN.H. Он автоматически подключает большинство библиотечных файлов MFC, включая WINDOWS.H. Включая этот файл, Вы тем самым подготавливаете все необходимое для создания WINDOWS приложения.

 

Создание MFC приложения

Запускаем Visual C++. Затем выбираем File->New.В появившемся окошке New обращаем внимание, что активна вкладка Projects.

Диалог New

 

Выбираем тип проекта Win32 Application. Этот тип - приложение под Windows, но без использования MFC. MFC же мы подсоединим позже

.Проект Win32 Application

 

Даем проекту имя (например mfc). Вы можете дать любое.

Диалог New

 

В последующих диалоговых окнах отвечайте по умолчанию. После этого у вас возникнет пустой проект. Теперь нам в него надо добавить файлы. Для этого снова выбираем File->New. Сейчас уже активна вкладка Files. В списке файлов выберете Source file

Диалог New

 

Впечатайте имя файла и убедитесь, что галочка Add to Project стоит.

Галочка Add to Project

 

 

Сейчас наш проект не использует MFC (такой мы выбрали тип проекта). Нам надо указать явно, что мы хотим использовать MFC. Для этого заходим в меню Project и далее Settings.

Выбор настроек

 

В диалоге Project Settings выбираем Use MFC in a Shared DLL. Теперь наш проект будет использовать MFC.

Подключение MFC

Закройте диалог, нажав OK.

 

Вставьте в файл вашего проекта следующий код:

 

#include <afxwin.h>

 

class CMyMainWnd : public CFrameWnd

{

public:

CMyMainWnd()// конструктор

 {

  Create(NULL,"My title");

}

};

 

class CMyApp : public CWinApp

{

public:

CMyApp(){}; // конструктор

virtual BOOL InitInstance()

 {

  m_pMainWnd = new CMyMainWnd();

  m_pMainWnd->ShowWindow(SW_SHOW);

  return TRUE;

}

};

 

CMyApp theApp;

 

Запустите программу. Должно появиться окно с заголовком My title”:

Пустое окно

 

В простейшем случае программа, написанная с помощью MFC, содержит два класса, порождаемые от классов иерархии библиотеки:

·   Класс CMyApp, порожденный от CWinApp, и предназначенный для создания приложения;

·   Класс CMyMainWnd, порожденный от CFrameWnd, предназначенный для создания окна.

Эти два класса обязательны для любой программы.

 

Класс CMyMainWnd

В классе главного окна ничего кроме контруктора нет. В конструкторе вызывается метод Create, взятый от родительского класса. Обратите внимание, что класс нашего окна потомок от класса CFrameWnd из библиотеки MFC. Это видно из строчки

 

class CMyMainWnd : public CFrameWnd

 

В родительском классе и есть метод create. Он принимает много параметров, но большинство из них можно не указывать, так как они задаются по умолчанию. Мы указали только первые два. Первый NULL означает, что параметры окна мы берём стандартные. Второй отвечает за заголовок окна.

 

Класс CMyApp

Класс CMyApp приложения порождается от CWinApp. Этот класс отвечает за работу программы. В примере используется член-функция со следующим прототипом:

 

virtual BOOL CWinApp::InitInstance();

 

Это виртуальная функция, которая вызывается каждый раз при запуске программы. В ней должны производиться все действия, связанные с инициализацией приложения. Функция должна возвращать TRUE при успешном завершении и FALSE в противном случае. В нашем случае, в функции сначала создается объект класса CMyMainWin, и указатель на него запоминается в переменной m_pMainWnd. Когда окно создано, вызывается функция c прототипом:

 

BOOL CWnd::ShowWindow(int How);

 

Параметр How определяет, каким образом окно будет показано на экране. Наиболее распространенные значения следующие:

 

Константа

Действие

SW_HIDE

Окно становится невидимым

SW_MAXIMIZE

Окно максимизируется

SW_MINIMIZE

Окно минимизируется

SW_SHOW

Окно отображается, если было невидимо

SW_RESTORE

Окно приводится к нормальному размеру

 

При первом вызове в качестве первого параметра функции можно подставить член m_nCmdShow, в котором хранится значение кода отображения окна, переданное в программу при запуске (например, в ярлыке Windows 95 пользователь может определить, как показывать окно при запуске приложения).

 

Создание экземпляра приложения

В конце программы в строке

 

CMyApp theApp;

 

создаётся экземпляр нашего приложения.