Программирование устройств в Windows: Методические указания к выполнению практических и лабораторных работ по курсу “Операционные системы, среды и оболочки”, страница 5

В одно и то же время окно могут бомбардировать много различных сообщений. Например, сообщение WM_PAINT говорит окну, что ему пора перерисоваться. Другие -  например, WM_MOUSEMOVE — сообщают о том, что мышь перемещается в таком-то направлении. Остальные сообщения говорят окну о происходящей минимизации, максимизации, изменении размеров, пульверизации и т.д. Правда, на самом деле не существует сообщения WM_PULVERIZE, хотя оно и могло бы быть — так много сообщений влетают в процедуру WndProc и вылетают обратно в течение жизни типичного окна.

Основные части программы для Windows:

1)  Во-первых, главная программа, содержащая Register, Create и цикл опроса сообщений.

2)  Далее, процедура WndProc, обрабатывающая любые сообщения, посылаемые окну.

Эти две функции являются основой структуры программы.

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

Рассмотрим два основных вопроса:

1)  Как Windows обрабатывает сообщения.

2)  Как отобразить текст на экране.

Многие основные черты Windows обязаны своей спецификой тому факту, что она является ориентированной на события, или основанной на сообщениях системой.

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

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

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

Этот вид, основанный на сообщениях системы дает высокую степень независимости от аппаратной части. Например, в архитектуре Intel обычно используется прерывание INT 33h, чтобы отметить движение мыши. Другая аппаратура может использовать совсем иные способы, но это не будет иметь значения для программ в Windows. Все, что нужно сделать, — это ответить на предварительно определенные сообщения.

Рассмотрим теперь, что именно функция WndProc делает с сообщениями:

1)  Первый шаг — запуск рабочего примера программы.

2)  Второй шаг — обсуждение  сообщений, которое концентрируется в основном на двух особенных сообщениях: WM_DESTROY и WMCREATE.

3)  Третий шаг — взгляд на то, как WINDOWS обращается с оконной процедурой, обрабатывающей сообщения по умолчанию.

Фактически большинство Windows-программ основывается на общем шаблоне, который мало меняется от программы к программе

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

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

При написании программы нужно найти время, чтобы сосредоточиться на сообщениях, которые явно обрабатываются внутри WndProc. Это сообщения WM_CREATE, WM_DESTROY и WM_PAINT.

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