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.
>// Включаемый файл для 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 – представляет главное окно