Освой компьютер
Обработка событий. Представьте, что Вы создали окно с символом закрытия и хотите обрабатывать
событие, соответствующее \"нажатию\" этого символа. Для этого в Intuition
используется механизм сообщений: если пользователь \"нажимает\" (с помощью
мыши) на какой-либо символ (gadget) окна, то программе, создавшей это окно,
посылается соответствующий сигнал. Этот сигнал называется сообщением
(message).
В предыдущем пункте мы рассматривали таблицу параметров окна, одним из
полей которой является так называемое IDCMP-слово. Это слово определяет
события, которые могут вызывать посылку сообщений данному окну. Например,
если в IDCMP-слове установлен бит WINDOWCLOSE (см. п. 7.2), то окно сможет
\"узнать\" о нажатии символа закрытия.
Чтобы получить сообщение, программа должна вызвать функцию GetMsg (смещение
-372 в exec.library). Параметром этой функции является адрес специальной
структуры, которая после вызова GetMsg будет содержать информацию о
событии, вызвавшем посылку сообщения. Эта структура называется
пользовательским портом (user port).
Адрес пользовательского порта можно узнать, используя идентификатор окна.
На самом деле идентификатор окна - это указатель на специальную структуру,
которая содержит всю информацию об окне, и в частности, адрес
пользовательского порта (смещение 86 относительно начала структуры).
Извлечь этот адрес можно, например, так: move.l windowhd(PC),A0 ;идентификатор окна - адрес
;блока данных окна
move.l 86(A0),A0 ;извлекаем адрес
;пользовательского порта После этого можно вызывать функцию GetMsg: GetMsg = -372
...
move.l ExecBase,A6 ;база exec.library
jsr GetMsg(A6) ;получаем сообщение Функция GetMsg возвращает в D0 указатель на специальную структуру - IMS
(Intuition Message Structure), содержащую информацию о полученном
сообщении, либо ноль, если сообщения не было.
AMIGA: ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ.
|