Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI-ekz_shpory.docx
Скачиваний:
5
Добавлен:
25.09.2019
Размер:
185.19 Кб
Скачать
  1. Сообщения. Источники сообщений

Сообщение - это извещение о некотором имевшем место событии, посылаемое системой Windows.

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

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

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

Сообщения имеют приоритет: у программных сообщений он выше, чем у аппаратных.

Сообщение, в основном, состоит из полей wParam и lParam, также имеет заголовок. В сообщении, формируемом при нажатии любой кнопки мыши, младшее слово lParam содержит X – координату курсора, а старшее – Y – координату. Семь младших бит поля wParam содержит состояние кнопок мыши и клавиш Shift и Ctrl. Если кнопка или клавиша нажата, то соответствующий бит находится в состоянии 1.

typedef struct tagMSG

{

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

  1. Формирование сообщений, примеры. Очереди.

  2. typedef struct tagMSG

  3. {

  4. HWND hwnd;

  5. UINT message;

  6. WPARAM wParam;

  7. LPARAM lParam;

  8. DWORD time;

  9. POINT pt;

  10. } MSG;

Сообщение - это извещение о некотором имевшем место событии, посылаемое системой Windows – они информируют Windows или приложение, что произошло какое-то событие (например, произошло нажатие клавиши). Также сообщение может быть послано или получено от другого пользователя или Windows

Сообщения имеют приоритет: у программных сообщений он выше, чем у аппаратных.

В Win принята 2-х ступенчатая очередь обработки сообщений.

Прежде всего, сообщения попадают в системную очередь сообщений Windows. Системная очередь сообщений одна. {Для обработки сообщений существует флаг, получается 2 очереди сообщений – обычная и с флагами.}

Далее из нее сообщения распределяются в очереди сообщений приложений. Для каждого приложения создается своя очередь сообщений.

Очередь сообщения приложений может пополняться не только из системной очереди. Любое приложение может послать сообщение любому другому приложение, в том числе и само себе. Данного рода отправка сообщения осуществляется двумя функциями –

PostMessage(HWND hwnd (дескриптор, которому посылается сообщение), UINT MESSAGE (номер сообщения), WPARAM wParam, LPARAM lParam); - ставит в очередь приложения

SendMessage(--//--); - вызывает обработчик

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

Примеры сообщений:

  1. При сообщении WM_LBUTTONDOWN появляется диалоговая панель с кнопкой ОК.

case WM_LBUTTONDOWN:

{

MessageBox(NULL,"Нажата левая клавиша мыши", "Сообщение", MB_OK);

return 0;

}

2. Инициируем завершение работы приложения, помещая в очередь приложения сообщение WM_QUIT. Это приведет к завершению цикла обработки сообщений в функции WinMain

case WM_DESTROY:

{

PostQuitMessage(0);

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]