Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT - [31]
Если вы выберите строку Beep из меню Test, то услышите на внутреннем динамике компьютера звуковой сигнал. В случае если звуковой сигнал не слышен, проверьте подключен ли внутренний динамик, а если в компьютере установлена звуковая плата, правильно установите громкость сигнала.
Когда вы завершите работу с приложением, его можно закрыть. Для этого воспользуйтесь системным меню приложения или выберите из меню Test строку Exit.
Рис. 2.25. Приложение MFMenu
Чтобы объекты класса могли обрабатывать сообщения, в определении этого класса необходимо поместить макрокоманду DECLARE_MESSAGE_MAP. По принятым соглашениям эта макрокоманда должна записываться в конце определения класса в секции public.
>//=====================================================
>// Класс CMFMenuWindow – представляет главное окно
>//=====================================================
>class CMFMenuWindow : public CFrameWnd {
>public:
> // Объявляем конструктор класса CMFMenuWindow
> CMFMenuWindow();
> // Объявляем методы для обработки команд меню
> afx_msg void MenuCommand();
> afx_msg void ExitApp();
> // Макрокоманда необходима, так как класс
> // CMFMenuWindow обрабатывает сообщения
> DECLARE_MESSAGE_MAP()
>};
Однако это еще не все. Необходимо также определить таблицу сообщений. Таблица начинается макрокомандой BEGIN_MESSAGE_MAP и заканчивается макрокомандой END_MESSAGE_MAP. Между этими макрокомандами расположены строки таблицы сообщений, определяющие сообщения, подлежащие обработке данным классом и методы, которые выполняют такую обработку.
Приложение может содержать несколько классов, обладающих собственными таблицами сообщений. В следующем разделе мы приведем пример такого приложения. Чтобы однозначно определить класс, к которому относится таблица сообщений, имя этого класса записывается в первый параметр макрокоманды BEGIN_MESSAGE_MAP.
Приложение 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 – представляет главное окно
>//=====================================================
>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

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.

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

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

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

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.