1   2   3   4   5
Ім'я файлу: КеруванняЗвукомФедорів.docx
Розширення: docx
Розмір: 339кб.
Дата: 23.06.2020
скачати

2.2 Робота з маніпулятором миші



Для роботи з маніпулятором миші використовується вектор переривання INT 33h. Ця програма виконує всі операції, що пов’язані з обслуговуванням миші:

  • скидання параметрів миші та встановлення драйверу в вихідний стан;

  • ввімкнення та вимкнення курсору в зазначеному місці екрану;

  • визначення поточних координат курсору й поточного стану клавіш;

  • визначення координат курсору й стану клавіш в момент натискання на клавішу й в момент відпускання клавіші;

  • визначення області на екрані, в межах якої курсор може пересуватися;

  • визначення області на екрані, в межах якої курсор не буде видно;

  • зазначення форми графічного й текстового курсорів;

  • визначення величини пересування миші в сотих долях дюйма;

  • підключення до драйверу процедури, визначеної в програмі, що отримує керування при натисканні на задану клавішу або при пересуванні миші;

  • збереження та відновлення стану драйверу;

  • керування швидкістю руху курсору;

  • зазначення або визначення сторінки відеопам’яті, що використовується;

  • керування драйвером миші.

Ініціалізація миші
Для ініціалізації миші використовується функція з кодом 00h. Ця функція виконує апаратне скидання параметрів миші й програмне встановлення драйверу миші в початковий стан. За допомогою функції 21h можна виконати встановлення драйверу в початковий стан, не виконуючи апаратного скидання параметрів миші.

Регістри на вході:АX=0000h

Регістри на виході:AX = стан миші

BX = кількість клавіш у миші.
Якщо на виході з переривання регістр AX містить значення 0000h, це свідчить проте, що драйвер миші відсутній. Якщо значення змісту цього регістру рівне 0FFFFh, драйвер миші є й можна використовувати інші функції для роботи з мишею.

Вмикання(вимикання) курсору миші

Для вмикання курсору миші використовується функція 01h. Ця функція дозволяє вмикати або вимикати курсор миші:
Регістри на вході: АХ = 0001h

Регістри на виході: Регістри не використовуються.
Для керування видимістю курсору драйвер використовує внутрішній лічильник. Цей лічильник можна збільшувати, викликаючи функцію 01h переривання 33h, або зменшувати за допомогою функції 02h.

Після ініціалізації драйверу функцією 00h лічильник встановлюється рівним –1. Після першого виклику функції 01h лічильник стає рівним нулю. При цьому курсор миші стає видимим, його можна пересувати по екрану.

Якщо лічильник рівний нулю, то наступний виклик функції 01h ігноруються драйвером. Для того, щоб згасити курсор, використовується функція 02h, яка при виклику зменшує кожного разу зміст лічильника на одиницю.

Функція 01h скидає область, в якій курсор не відображається(Якщо така область була раніш встановлена функцією 10h).

Для вимикання курсору миші використовується функція 02h. Функція зменшує на одиницю лічильник видимості курсору. Якщо вміст лічильника стає рівним –1, зображення курсору зникає з екрану.
Регістри на вході: АХ = 0002h

Регістри на виході: Регістри не використовуються.

Якщо програма застосовує для виводу до екрану метод прямого запису до відеопам’яті, перед поновленням змісту екрану необхідно згасити курсор, а після завершення оновлення – відобразити його знову.

Це пов’язане з тим, що драйвер миші запам’ятовує старе значення атрибуту символу, на який посилався курсор до поновлення змісту відеопам’яті. Якщо змінити атрибут, записавши нове значення безпосередньо до екранної пам’яті, то якщо встановити курсор миші на інший символ, зображення старого символу буде зіпсовано – з’явиться прямокутник(наче б то ще одне зображення курсору миші).

Визначення положення курсору

Для визначення положення курсору використовується функція 03h. Ця функція повертає поточні координати курсору миші й стан клавіш.
Регістри на вході: АХ = 0003h

Регістри на виході: ВХ = стан клавіш миші;

СХ = X координата курсору;

DX = Y координата курсору;
Встановлення форми курсору в графічному режимі

За допомогою функції 09h програма, що працює в графічному режимі, може змінити форму курсору миші та положення точки в середині зображення курсору, координати якої використовуються в якості координат курсору іншими функціями.
Регістри на вході: АХ = 0009h

ВХ = номер позиції точки-покажчика графічного курсору (від -16 до 16);

DX = номер рядку точки-покажчика (від -16 до 16)

ES:DX = покажчик на растрове зображення курсору

Регістри на виході: Регістри не використовуються

Регістри ES:DX посилаються на область пам’яті розміром 64 байти. Ця область складається з двох масивів довжиною по 32 байти. Перший масив – логічна маска розміром 16х16 біт, яка накладається на ділянку відеопам’яті з використанням логічної операції "І". Другий масив – також маска розміром 16х16 біт, але вона накладається з використанням логічної операції "Виключного АБО", інвертуючи окремі точки зображення.

Номери позиції й рядку точки-покажчика, які задаються за замовчуванням, рівні нулю(ВХ = СХ = 0). Це відповідає верхній лівій точці в зображенні курсору. Значення ВХ = СХ = 15 відповідають ніжній правій точці.

Встановлення форми курсору в текстовому режимі

За допомогою функції 0Ah програма може змінити форму курсору миші в текстовому режимі.
Регістри на вході:AX = 000Ah

BX = тип курсору:

0 – задається програмно;

1 – задається апаратно;

СХ = маска екрану (для ВХ = 0) або кінцевий рядок курсору (для ВХ =

DX = маска курсору (для ВХ = 0) або кінцевий рядок курсору (для ВХ =

Регістри на виході: Регістри не використовуються
В залежності від змісту регістру ВХ драйвер миші використовує курсор, зазначений апаратними засобами, або курсор, що зазначено програмно. За замовчуванням використовується програмний курсор, який відображається у вигляді символу з інвертованим значенням атрибуту. Курсор, сформований апаратними засобами, має вигляд аналогічний звичайному текстовому курсору, його форма – прямокутник. Розмір прямокутника можні задавати за допомогою регістрів СХ та DX.

Для курсору, що зазначено програмно, спочатку виконується операція логічного "І" над вмістом відеопам’яті в тому місці, куди посилається курсор, та маскою екрану. Потім виконується операція "Виключного АБО" з маскою курсору.

Молодший байт масок, відповідає коду ASCII символу, старший – це байт атрибуту символу.

Значення, що використовується за замовчуванням, – ВХ = 7700h, CX = FFFFh.

Якщо треба змінити колір курсору, не змінюючи його форму, треба задати СХ = 00FFh, ВХ = хх00h, де хх зазначає колір.



1   2   3   4   5

скачати

© Усі права захищені
написати до нас