Освой компьютер
windopen: ;* открываем окно
move.l intbase(PC),A6 ;базовый адрес intuition
lea windowdefs(PC),A0 ;указатель на таблицу
;параметров окна
jsr OpenWindow(A6) ;открыть окно
move.l D0,windowhd ;сохраняем идентификатор окна
rts
windowclose:
move.l intbase(PC),A6 ;базовый адрес intuition
move.l windowhd(PC),A0 ;идентификатор окна
jsr CloseWindow(A6) ;закрыть окно
rts
...
windowhd: dc.l 0 ;идентификатор окна
Модифицируйте приведенную в предыдущем пункте программу работы с экраном,
добавив вызовы windopen и windclose после scropen и перед scrcloсe
соответственно. После запуска полученной программы на экране появится окно,
которое можно перемещать с помощью мыши (в пределах экрана).
Обратите внимание, что созданное окно имеет символ закрытия (close gadget)
в левом верхнем углу. Обычно, при нажатии на этот символ окно закрывается,
однако в нашем случае этого не произойдет. Реакция на любое событие (в
частности, на нажатие символа закрытия) должна быть запрограммирована
специальным образом. Об этом мы поговорим в следующих разделах. 7.3. Работа с реквестерами (requesters). Если Вам приходилось работать с компьютером без жесткого диска (HD), то Вам
наверняка знакомо сообщение \"Please insert volume xxx in unit 0\" (вставьте
диск xxx в устройство 0). Эта надпись появляется в специальном окне
операционной системы, которое также содержит поля (\"кнопки\") для выбора
дальнейших действий (Reset и Cancel). Подобные окна называются
реквестерами.
Для создания простого реквестера используется функция AutoRequest (смещение
-348 в intuition.library). Эта функция рисует кнопки реквестера и
обрабатывает события от мыши. Приведем список параметров этой функции: в A0 - указатель на блок данных, описывающий окно (возвращается функцией
OpenWindow)
в A1 - указатель на текст заголовка реквестера
в A2 - указатель на текст для левой кнопки реквестера
в A3 - то же, только для правой кнопки
в D0 - набор флагов, определяющих события для левой кнопки реквестера
(формат IDCMP, см.
AMIGA: ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ.
|