Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT | страница 62



Приложение MFMenu обрабатывает только две команды от меню приложения. Первая команда имеет идентификатор ID_TEST_BEEP и передается, когда пользователь выбирает из меню Test строку Beep. Для обработки этой команды вызывается метод MenuCommand. Вторая команда с идентификатором ID_TEST_EXIT передается приложению, когда пользователь выбирает из меню Test строку Exit. Обработка этого сообщения выполняется методом ExitApp.

>//=====================================================

>// Таблица сообщений класса CMFMenuWindow

>//=====================================================

>BEGIN_MESSAGE_MAP(CMFMenuWindow, CFrameWnd)

> ON_COMMAND(ID_TEST_BEEP, MenuCommand)

> ON_COMMAND(ID_TEST_EXIT, ExitApp)

>END_MESSAGE_MAP()

Конечно, приложению MFMenu может поступать гораздо больше сообщений и команд, чем указано в таблице сообщений класса CMFMenuWindow. Необработанные сообщения передаются для обработки базовому классу CMFMenuWindow – классу CFrameWnd . Класс, который будет обрабатывать сообщения, не указанные в таблице сообщений, указывается во втором параметре макрокоманды BEGIN_MESSAGE_MAP.

Долгий путь сообщения

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

Создайте новый проект под названием MFMessage. В качестве типа приложения выберите из списка Type строку Application (рис. 4.1). Наберите в редакторе исходный текст приложения и сохраните его в файле MFMessage.cpp (листинг 2.10). Чтобы быстрее набрать текст приложения, вы можете модифицировать исходный текст приложения MFMenu.

Листинг 2.10. Файл MFMessage.cpp

>// Включаемый файл для MFC

>#include

>#include "resource.h"


>//=====================================================

>// Класс CMFMessageApp – главный класс приложения

>//=====================================================

>class CMFMessageApp : public CWinApp {

>public:

> // Мы будем переопределять метод InitInstance,

> // предназначенный для инициализации приложения

> virtual BOOL InitInstance();


> afx_msg void AppMessageCommand();


> // Макрокоманда необходима, так как класс

> // CMFMessageWindow обрабатывает сообщения

> DECLARE_MESSAGE_MAP()

>};


>// Создаем объект приложение класса CMFMessageApp

>CMFMessageApp MFMessageApp;


>//=====================================================

>// Класс CMFMessageWindow – представляет главное окно