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



Однако ClassWizard не всесилен. Так он не позволяет определить один метод для обработки нескольких сообщений. Как вы уже знаете, для этих целей предназначены макрокоманды ON_COMMAND_RANGE и ON_CONTROL_RANGE. Если вы решите воспользоваться этими макрокомандами, вам придется редактировать таблицу сообщений непосредственно, без использования ClassWizard.

Более подробно об использовании ClassWizard для создания обработчиков сообщений вы можете прочитать в разделе “Средства ClassWizard” главы “Приложение с главной диалоговой панелью”. А сейчас мы рассмотрим механизм обработки сообщений, используемый MFC, на примере нескольких приложений.

Приложение MFMenu

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

Сейчас мы рассмотрим приложение MFMenu, которое имеет меню и содержит обработчики сообщений, передаваемых приложению, когда пользователь открывает меню и выбирает из него строки. Для создания приложения MFMenu мы также не станем пользоваться средствами автоматизированной разработки MFC AppWizard, и наберем текст приложения вручную. Этот позволит вам лучше разобраться с механизмом сообщений.

Создайте новый проект под названием MFMenu. В качестве типа приложения выберите из списка Type строку Application (рис. 4.1 из главы “Приложение с главной диалоговой панелью”). Наберите в редакторе исходный текст приложения и сохраните его в файле MFMenu.cpp (листинг 2.7). Чтобы быстрее набрать текст приложения, вы можете получить его, изменив исходный текст приложения MFStart. Затем включите этот файл в проект.

Листинг 2.7. Файл MFMenu.cpp

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

>#include

>#include "MFMenuRes.h"


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

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

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

>class CMFMenuApp : public CWinApp {

>public:

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

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

> virtual BOOL InitInstance();

>};


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

>CMFMenuApp MFMenuApp;


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

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

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

>class CMFMenuWindow : public CFrameWnd {

>public:

> // Объявляем конструктор класса CMFMenuWindow