Методы для работы с сообщениями

static const MSG* PASCAL CWnd::GetCurrentMessage( ); - возвращает указатель на структуру с параметрами текущего сообщения, может вызываться из обработчика, заданного макросом ON_MESSAGE.

virtual BOOL CWnd::PreTranslateMessage( MSG* pMsg ); - используется классом CWinApp для фильтрации оконных сообщения до того, как они будут распределены функциями Windows TranslateMessage и DispatchMessage.

LRESULT CWnd::SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ); - посылает сообщение в окно, непосредственно вызывая оконную процедуру, и пока не обработает сообщение, не возвращает управление.

BOOL CWnd::PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ); - помещает сообщение в очередь приложения и возврвщвет управление.

BOOL CWnd::SendNotifyMessage( UINT message, WPARAM wParam, LPARAM lParam ); - посылает сообщение в окно. Если окно было создано текущим потоком, то выполняется, как SendMessage, иначе посылает извещение в оконную процедуру и возвращается в вызывающую программу.

Оглавление

Лабораторная работа №2......................................................................................... 238

Программирование для Windows. Использование MFC. Создание простых Windows-приложений. 238

1 Цель работы...................................................................................................... 238

2 Теоретические сведения.................................................................................. 238

2.1 Создание приложения на Visual C++ в студии разработчика..................... 238

2.2 Библиотека MFC.............................................................................................. 238

2.3 MFC и архитектура приложения.................................................................... 239

2.4 Каркас приложения......................................................................................... 239

2.5 AppWizard и архитектура Document-View.................................................... 240

2.6 ClassWizard....................................................................................................... 241

2.7 Первые MFC-приложения.............................................................................. 241

2.7.1 Простое приложение.................................................................................... 242

2.7.2 Приложение с единственным окном.......................................................... 244

2.8 Обработка сообщений..................................................................................... 246

2.9 Группы сообщений.......................................................................................... 248

2.9.1 Оконные сообщения..................................................................................... 248

2.9.2 Сообщения от органов управления............................................................ 248

2.9.3 Командные сообщения................................................................................. 248

2.10 Таблица сообщений......................................................................................... 248

2.10.1 Макрокоманда ON_WM_<name>................................................................ 249

2.10.2 Макрокоманда ON_REGISTERED_MESSAGE........................................ 250

2.10.3 Макрокоманда ON_MESSAGE................................................................... 250

2.10.4 Макрокоманда ON_COMMAND................................................................ 250

2.10.5 Макрокоманда ON_COMMAND_RANGE................................................ 250

2.10.6 Макрокоманда ON_UPDATE_COMMAND_UI........................................ 250

2.10.7 Макрокоманда ON_UPDATE_COMMAND_UI_RANGE........................ 251

2.10.8 Макрокоманда ON_<name>......................................................................... 251

2.10.9 Макрокоманда ON_CONTROL_RANGE................................................... 251

2.11 Способы определения таблицы сообщений................................................. 252

2.12 Создание приложения с одним окном с использованием AppWizard....... 252

2.13 Приложение, обрабатывающее сообщения................................................... 252

2.14 Создание обработчиков сообщений для команд меню................................ 253

3 Задания к работе............................................................................................... 254

4 Порядок выполнения работы......................................................................... 254

5 Вопросы для самопроверки............................................................................ 255

6 Приложение I................................................................................................... 256

6.1 Некоторые полезные классы MFC................................................................. 256

6.1.1 Класс CPoint - точка на плоскости.............................................................. 256

6.1.2 Класс CSize - относительные координаты на плоскости......................... 256

6.2 Класс CString - текстовые строки в MFC...................................................... 257

6.3 Класс СWnd...................................................................................................... 260

7 Оглавление....................................................................................................... 264

Лабораторная работа №3.

Программирование для Windows. Использование MFC. Создание диалоговых панелей. Программирование диалоговых элементов Windows.

Цель работы:

Углубить знания приемов работы с AppWizard;

Углубить знания приемов работы с редактором ресурсов;

Углубить знания приемов работы с ClassWizard;

Ознакомиться с механизмом обработки событий от диалоговых элементов;

Усвоить разницу между модальными и немодальными диалогами;

Освоить принципы обмена данными между диалоговыми элементами и переменными.

Теоретические сведения.

Диалоговая панель

Удобным средством организации взаимодействия пользователя и приложения являются диалоговые панели. Многие приложения могут успешно работать и без главного окна, взаимодействуя с пользователем только через диалоговые окна. Диалоговые панели (блоки диалога) - специальные окна, поддерживающие гибкие средства, через которые пользователь может взаимодействовать с программой. Как правило, они содержат дочерние окна, называемые элементами управления.

Диалоговые панели бывают двух типов - модальные и немодальные.

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

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

И модальные и немодальные диалоговые панели обслуживаются одним (общим) классом CDialog,

Библиотека классов MFC содержит класс CDialog, наследованный от базового класса CWnd, специально предназначенный для управления диалоговыми панелями, как модальными, так и немодальными.

Для создания и отображения диалоговой панели необходимо произвести следующие действия.

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

Следующим этапом создается класс для управления диалоговой панелью. Этот класс наследуется непосредственно от базового класса CDialog.

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

Так как класс диалоговой панели обрабатывает сообщения, то содержит таблицу сообщений и соответствующие методы-обработчики сообщений.

Чтобы создать модальную диалоговую панель, сначала необходимо создать объект определенного в приложении класса диалоговой панели, а затем вызвать метод DoModal, определенный в классе CDialog.

Процедура создания немодальной диалоговой панели несколько другая. Для этого используется метод Create класса CDialog. Процесс создания немодальных диалоговых панелей будет рассматриваться позже. Сейчас остановимся на проблеме создания модальных диалогов.

Наши рекомендации