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

         

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


Обратите внимание, что в последней строке определения класса CSingleApp расположена макрокоманда DECLARE_MESSAGE_MAP. Загадочная макрокоманда DECLARE_MESSAGE_MAP определена в файле afxwin.h следующим образом:

#define DECLARE_MESSAGE_MAP() \

private: \

      static const AFX_MSGMAP_ENTRY _messageEntries[]; \

protected: \

      static AFX_DATA const AFX_MSGMAP messageMap; \

      virtual const AFX_MSGMAP* GetMessageMap() const; \

Таким образом, DECLARE_MESSAGE_MAP не является расширением языка Си++, а просто добавляет к вашему классу несколько новых элементов.

Так как в классе CSingleApp расположена макрокоманда DECLARE_MESSAGE_MAP, то он может обрабатывать сообщения и имеет таблицу сообщений. Таблица сообщений класса CSingleApp расположена в файле реализации Single.cpp.

//////////////////////////////////////////////////////////////

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

BEGIN_MESSAGE_MAP(CSingleApp, CWinApp)

      //{{AFX_MSG_MAP(CSingleApp)

      ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

      //}}AFX_MSG_MAP

      // Стандартные команды для работы с документами

      ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)

      ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

      // Стандартная команда выбора принтера

      ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)

END_MESSAGE_MAP()

Кроме команды для обработки командного сообщения ID_APP_ABOUT, расположенного в блоке AFX_MSG_MAP, таблица сообщений содержит еще три макрокоманды, предназначенные для обработки командных сообщений с идентификаторами ID_FILE_NEW, ID_FILE_OPEN, ID_FILE_PRINT_SETUP.

Командные сообщения ID_FILE_NEW, ID_FILE_OPEN, ID_FILE_PRINT_SETUP поступают, когда пользователь выбирает из меню приложения строки с соответствующими идентификаторами. Для обработки этих командных сообщений вызываются методы класса CWinApp.



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