Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT

Приложение MFMenu


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

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

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

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

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

#include <afxwin.h>

#include "MFMenuRes.h"

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

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

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

class CMFMenuApp : public CWinApp

{

public:



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

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

      virtual BOOL InitInstance();

};

 

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

CMFMenuApp MFMenuApp;

 

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

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

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

class CMFMenuWindow : public CFrameWnd

{

public:

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

      CMFMenuWindow();

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

      afx_msg void MenuCommand();

      afx_msg void ExitApp();


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

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

      DECLARE_MESSAGE_MAP()   

};

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

// Метод MenuCommand

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

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

void CMFMenuWindow::MenuCommand()

{

      MessageBeep(0);               

}

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

// Метод ExitApp

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

void CMFMenuWindow::ExitApp()

{

      DestroyWindow();

}

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

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

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

BEGIN_MESSAGE_MAP(CMFMenuWindow, CFrameWnd)

      ON_COMMAND(ID_TEST_BEEP, MenuCommand)

      ON_COMMAND(ID_TEST_EXIT, ExitApp)

END_MESSAGE_MAP()

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

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

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

BOOL CMFMenuApp::InitInstance()

{

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

      m_pMainWnd = new CMFMenuWindow();

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

      m_pMainWnd -> ShowWindow(m_nCmdShow);

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

      m_pMainWnd -> UpdateWindow();

      return TRUE;

}

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

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

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

CMFMenuWindow::CMFMenuWindow()

{

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

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

      Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW,

                   rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU));

}


Содержание раздела