Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
14
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

П. 1.4 Сообщения от окна

Рассмотрим, каким сообщениям соответствуют некототые имена констант. В Windows описаны несколько сот кодов сообще­ний с префиксом WM_.

Код WM_CREATE поступает от функции CreateWindow (о ней речь пойдет ниже) перед созданием окна. Если после обработки этого сообщения функции CreateWindow возвращается значение -1, то окно не создается.

Код WM_SIZE функция окна получает после изменения размеров окна, a

WM_MOVE - после перемещения левого верхнего угла рабочей области окна. Если при изменении размеров окна изменились координа­ты левого верхнего угла рабочей области, то функция окна сначала по­лучает код WM_MOVE, а затем - WM_SIZE. После изменения режима отображения окна функция окна получает код WM_SIZE, а затем -WM_MOVE.

Код WM_COMMAND функция окна получает при поступлении ко­манды. Тогда младшее слово параметра wParam содержит код команды. Разработчик свои сообщения часто связывает с командами меню и опи­сывает идентификаторы для этих команд. Например, для идентификато­ра CM_FILE_EXIT команды меню текст приложения должен содержать макроопределение вида

#define CM_FILE_EXIT 3001

Код WM_DESTROY функции окна посылают перед разрушением окна.

Значение параметра lParam зависит от кода сообщения. При поступлении кода WM_MOVE параметр lParam содержит экран­ные координаты левого верхнего угла рабочей области. Например:

left=LOWORD(IParam); //Координата левого края рабочей области top=HIWORD(IParam); //Координата верхнего края рабочей области

Для кода WM_SIZE параметр lParam несет информацию о ширине сх и высоте су рабочей области:

cx=LOWORD(IParam); //Ширина рабочей области

cy=HIWORD(IParam); //Высота рабочей области

При поступлении любых сообщений от мыши расстояние курсора мыши от левого края рабочей области равно LOWORD(lParam), а от верхнего края - HIWORD(lParam).

Если хотят, чтобы какие-либо переменные сохраняли свои значения до следующего вызова функции окна, то их описывают с приставкой static. Например, если функция окна многократно использует ширину сх и высоту су ра­бочей области окна, то их описывают как static.

Вызов функции DefWindowProc означает, что необработанное сооб­щение возвращают операционной системе.

Если функция окна обрабатывает код сообщения, то на­стоятельно рекомендуется вернуть определенное системой для этого кода значение.

П. 1.5 Сообщения от мыши

Определить присутствие мыши можно с помощью функции GetSystemMetrics, передав ей в качестве параметра значение SM_MOUSEPRESENT. Если мышь есть, эта функция возвращает ненулевое значение.

Для определения количества кнопок можно использовать вызов GetSystemMetrics с параметром SM_CMOUSEBUTTONS.

Когда пользователь перемещает мышь, Windows перемещает по экрану растровую картинку, которая называется курсор мыши (mouse cursor). Курсор мыши имеет вершину (hot spot) размером в один пиксель, точно указывающий положение мыши на экране.

В драйвере дисплея содержатся несколько предопределенных курсоров мыши, которые могут использоваться в программах. Наиболее типичным курсором является наклонная стрелка, которая называется IDC_ARROW (вершина курсора – острие стрелки). Курсор IDC_WAIT в виде песочных часов обычно используется для индикации того, что программа чем-то занята.

Курсор, устанавливаемый по умолчанию для конкретного окна, задается при определении структуры класс окна:

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);