Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Фролов Александр. Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT - royallib.ru.doc
Скачиваний:
98
Добавлен:
11.03.2016
Размер:
905.62 Кб
Скачать

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

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

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

Листинг 2.10. Файл mfMessage.Cpp

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

#include <afxwin.h>

#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 – представляет главное окно

//=====================================================

class CMFMessageWindow : public CFrameWnd {

public:

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

 CMFMessageWindow();

 // Объявляем методы для обработки команд меню

 afx_msg void FrameMessageCommand();

 afx_msg void ExitApp();

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

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

 DECLARE_MESSAGE_MAP()

};

//=====================================================

// Метод MessageCommand

// Обрабатывает команду ID_TEST_BEEP

//=====================================================

void CMFMessageWindow::FrameMessageCommand() {

 ::MessageBox(NULL, "Command received in CMFMessageWindow Message Map", "Message", MB_OK);

}

//=====================================================

// Метод MessageCommand

// Обрабатывает команду ID_TEST_BEEP

//=====================================================

void CMFMessageApp::AppMessageCommand() {

 ::MessageBox(NULL, "Command received in CMFMessageApp Message Map", "Message", MB_OK);

}

//=====================================================

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

//=====================================================

BEGIN_MESSAGE_MAP(CMFMessageWindow, CFrameWnd)

 ON_COMMAND(ID_TEST_INFRAMECLASS, FrameMessageCommand)

 ON_COMMAND(ID_TEST_INBOTHCLASS, FrameMessageCommand)

END_MESSAGE_MAP()

//=====================================================

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

//=====================================================

BEGIN_MESSAGE_MAP(CMFMessageApp, CWinApp)

 ON_COMMAND(ID_TEST_INAPPCLASS, AppMessageCommand)

 ON_COMMAND(ID_TEST_INBOTHCLASS, AppMessageCommand)

END_MESSAGE_MAP()

//=====================================================

// Метод InitInstance класса CMFMessageApp

//=====================================================

BOOL CMFMessageApp::InitInstance() {

 // Создаем объект класса CMFMessageWindow

 m_pMainWnd = new CMFMessageWindow();

 // Отображаем окно на экране

 m_pMainWnd–>ShowWindow(m_nCmdShow);

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

 m_pMainWnd–>UpdateWindow();

 return TRUE;

}

//=====================================================

// Конструктор класса CMFMessageWindow

//=====================================================

CMFMessageWindow::CMFMessageWindow() {

 // Создаем окно приложения, соответствующее

 // данному объекту класса CMFMessageWindow

 Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU));

}

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

В листинге 2.11 представлен фрагмент файла ресурсов MFMessage.rc, в котором определяется меню приложения. Чтобы ускорить разработку меню, вы можете скопировать меню приложения MFMenu и изменить его соответствующим образом.