Порядок выполнения работы. Попробуем упростить задачу по созданию приложения, используя AppWizard

Попробуем упростить задачу по созданию приложения, используя AppWizard. Выберем в пункте главного меню File команду New, укажем, что хотим создать новое рабочее пространство (Workspace), зададим все параметры, необходимые для создания приложения с использованием MFC с минимальным набором функций и с именем start. Обратите внимание, что нет необходимости включать поддержку строки сотояния и панели инструментов. После выполнения работы мастером мы увидим, что созданы файлы типа .h и .cpp, а также файлы, содержащие некоторые ресурсы:

start.cpp;

startDoc.cpp;

startView.cpp;

MainFrm.cpp;

stdafx.cpp;

start.h;

startDoc.h;

startView.h;

MainFrm.h;

stdafx.h;

resource.h;

Оттранслируйте и постройте задачу, запустите ее.

Проанализируте полученный код. Обратите внимание на таблицу сообщений. Найдите объект-приложение. Найдите место инициализации приложения. Найдите макросы DECLARE_MESSAGE и таблицы сообщений.

Используя редактор ресурсов, измените меню, убрав ненужные пункты и добавив необходимые ( предусмотреть вывод названий меню на русском языке).
Введите идентификаторы пунктов меню.
Используя ClassWizard, добавьте обработчики сообщений по введенным пунктам меню в класс CMainFrm.
Посмотрите, как изменилась таблица событий.
Отладьте программу.

Добавьте обработку одной и той же команды с помощью ClassWizard в разные классы: класс документа, представления, приложения. Сделайте вывод об обработке командных сообщений.

Используя редактор ресурсов, измените диалог About. Создайте свою иконку для программы.

Используя редактор ресурсов, создайте диалог для преобразования числа по заданию. С помощью ClassWizard создайте новый класс, добавьте обработчики событий для элементов этого диалога и необходимые переменные. Добавьте пункт в главное меню программы. Используя ClassWizard, добавьте обработчик команды из меню в класс документа.

Вопросы для самопроверки.

Какой класс называется главным классом приложения?

Какие действия выполняет класс CWinApp?

Какие основные виртуальные методы содержит главный класс приложения?

Какой виртуальный метод класса CWinApp обязательно должен быть переопределен в производном от него классе?

Сколько объектов класса, производного от CWinApp, можно создавать в приложении? Как называются такие объекты?

Почему объект-приложение должен быть объявлен глобальной переменной?

Может ли главный класс приложения обрабатывать сообщения? Почему?

В реализации какого класса скрыта функция WinMain? Перечислите ее действия.

В чем заключаются функции методов InitInstatnce и InitApplication главного класса приложения?

Каким образом объект-приложение и объект главного окна приложения связываются вместе? Какой элемент класса приложения должен содержать указатель на объект главного окна, присоединенного к объекту-приложению?

Что происходит, если метод InitInstance класса приложения возвращает значение: 1) TRUE, 2) FALSE?

Вызов какого метода класса CWnd создает Windows-окно и связывает его с объектом класса CWnd (или производного от него)? Какая переменная класса CWnd отвечает за присоединенное к объекту этого класса Windows-окно?

На какие группы делятся сообщения, которые могут обрабатываться MFC-приложениями?

Что такое таблица сообщений класса, для чего она предназначена? Опишите структуру таблицы сообщений класса?

От какого класса наследуются все остальные классы, способные обрабатывать сообщения?

Для чего в заголовке таблицы сообщений класса указывается имя базового класса?

Какая макрокоманда должна присутствовать в объявлении класса для того, чтобы этот класс мог обрабатывать сообщения?

Покажите порядок создания меню в редакторе ресурсов.

Покажите порядок создания диалогов в редакторе ресурсов.

Как создаются обработчики событий с помощью ClassWizard

Как добиться отображения русского текста в меню приложения?

Приложение I

Некоторые полезные классы MFC

Класс CPoint - точка на плоскости.

В API Winwdows можно использовать структуру POINT, а в состав MFC вместоэтой структуры включен класс CPoint.

Этот класс имеет следующие конструкторы:

CPoint::CPoint( );

CPoint::CPoint( int initX, int initY );

CPoint::CPoint( POINT initPt );

CPoint::CPoint( SIZE initSize );

CPoint::CPoint( DWORD dwPoint );

Здесь

initX - x координата CPoint.

initY -y координата CPoint.

initPt - структура POINT или CPoint, содержащие значения для инициализации CPoint.

initSize структура SIZE или CSize, содержащие значения для инициализации CPoint.

dwPoint - задает в маладшем слове x-координату, а в старшем слове - y-координату CPoint.

Для класса CPoint определены операторы +,-,+=,-=, ==,!=, а также функция для изменения значений координат Offset:

void CPoint::Offset( int xOffset, int yOffset );

void CPoint::Offset( POINT point );

void CPoint::Offset( SIZE size );

Структура POINT описывается следующим образом:

typedef struct tagPOINT {

LONG x; //x-координата

LONG y; //y-координата

} POINT;

Наши рекомендации