Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI_theory.doc
Скачиваний:
10
Добавлен:
14.11.2018
Размер:
852.48 Кб
Скачать

Сообщения от клавиатуры

1

WM_KEYDOWN

Нажата клавиша клавиатуры

2

WM_KEYUP

Отжата клавиша

3

WM_SYSKEYDOWN

Нажата системная клавиша

4

WM_SYSKEYUP

Отжата системная клавиша

5

WM_CHAR

Символьное сообщение

Таблица 6

Сообщения для управление окнами

1

WM_CREATE

Посылается после создания окна

2

WM_DESTROY

Окно будет уничтожено

3

WM_PAINT

Требуется перерисовка окна

4

WM_CLOSE

Окно будет закрыто

5

WM_MOVE

Посылается после перемещения окно

6

WM_SIZE

После изменения размеров окна

И др.

  1. Простейшая Windows программа

Приложение, которое реагирует на сообщения должно содержать, по крайней мере, 2 функции: WinMain() и WndProc().

    1. Функция WinMain()

Функции WinMain должна выполнить следующие действия:

  • зарегистрировать класс окна приложения (возможно и другие классы), здесь же указывается, какая функция будет обрабатывать сообщения этого окна;

  • создать главное окно, на основе созданного класса и отобразить его на экране (и другие, подчиненные окна);

  • запустить цикл обработки сообщений;

  • пока не получено сообщение WM_QUIT, отправлять сообщения на обработку в функцию окна;

  • по сообщению WM_QUIT завершить работу приложения.

    1. Функция окна

Вторая часть Windows программы – оконная процедура (функция окна). ОС Windows САМА вызывает ее при обработке сообщений, предназначенных для данного окна.

ВСЕ сообщения передаются в функцию окна, но не на все сообщения мы обязаны реагировать. Если в приложении планируется обрабатывать конкретное сообщение, то оно включается в оператор switch. Остальные сообщения обрабатываются по умолчанию. Для этого их пересылают на обработку в функцию DefWindowProc.

Только одно сообщение мы всегда обязаны перехватывать. Это WM_DESTROY, посылаемое самой Windows в тот момент, когда пользователь закрывает окно (нажимая кнопку закрытия в заголовке окна). Стандартный ответ на WM_DESTROY заключается в вызове функции PostQuitMessage(0). Это соответствует посылке сообщения о выходе из программы со значением нуля в качестве кода возврата.

В качестве параметров функции окна будут передаваться дескриптор текущего окна, код сообщения и его параметры (wParam и lParam). Мы эту функцию НЕ ВЫЗЫВАЕМ.

Вся функция окна в простейшем случае это оператор switch, который анализирует идентификатор сообщений (переменная message), например:

switch (message)

{

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

// TODO: добавьте любой код отрисовки...

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

Если тип сообщения не встретился, то такое сообщение отправляется на обработку по умолчанию в функцию DefWindowProc

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