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

Для временного хранения сообщений в Windows используется структура типа MSG. Переменная этого типа, в частности, используется в цикле обработки сообщения (здесь сообщений хранится до окончания обработки).

В файле windows.h структура MSG описана следующим образом:

typedef struct tagMSG

{

HWND hwnd; // Дескриптор приложения, которому отправлено сообщение

UINT message; // Номер (идентификатор) сообщения (какое сообщение послано)

WPARAM wParam; // Информационные поля -

LPARAM lParam; // содержат информацию. Какое событие произошло

DWORD time; // Время от запуска ОС до постановки в системную очередь сообщения

POINT pt; // Указатель на структуру с двумя полями x, y – координаты мыши

} MSG;

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

В Windows-приложении для обработки сообщений создается специальная функция:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{ // Идентификатор сообщения передается через параметр msg

wParam и lParam –информационные поля сообщения.

switch (msg)

{

case WM_DESTROY:

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

PostQuitMessage(0);

return 0;

}

default:

DefWindowProc(hwnd, msg, wParam, lParam);

// Все сообщения, которые не обрабатываются нашей функцией окна, ДОЛЖНЫ передаваться функции DefWindowProc

}

}

LRESULT – функция возвращает двойное слово.

CALLBACK – модификатор функции обратного вызова {передача исполняемого кода в качестве одного из параметров другого кода. Обратный вызов позволяет в функции исполнять код, который задаётся в аргументах при её вызове}

Функция WndProc НЕ ВЫЗЫВАЕТСЯ ни из одной функции приложения. Эту функцию вызывает Windows в процессе обработки сообщений. Для этого адрес функции WndProc указывается при регистрации класса окна. Функция выполняет обработку сообщений главного окна приложения.

В Windows также происходит обработка сообщений собственными обработчиками сообщений Windows по умолчанию.

  1. Средства обработки сообщений в приложении и windows.

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

В Windows-приложении для обработки сообщений создается специальная функция:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{ // Идентификатор сообщения передается через параметр msg

wParam и lParam –информационные поля сообщения.

switch (msg)

{

case WM_DESTROY:

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

PostQuitMessage(0);

return 0;

}

default:

DefWindowProc(hwnd, msg, wParam, lParam);

// Все сообщения, которые не обрабатываются нашей функцией окна, ДОЛЖНЫ передаваться функции DefWindowProc

}

}

LRESULT – функция возвращает двойное слово.

CALLBACK – модификатор функции обратного вызова {передача исполняемого кода в качестве одного из параметров другого кода. Обратный вызов позволяет в функции исполнять код, который задаётся в аргументах при её вызове}

Функция WndProc НЕ ВЫЗЫВАЕТСЯ ни из одной функции приложения. Эту функцию вызывает Windows в процессе обработки сообщений. Для этого адрес функции WndProc указывается при регистрации класса окна. Функция выполняет обработку сообщений главного окна приложения.

В Windows также происходит обработка сообщений собственными обработчиками сообщений Windows по умолчанию.

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