Миши дела
Завършване на историята
Гурметите имат златно правило - оставете най-вкусното за десерт. Няма да се отклоняваме от това правило и да говорим за програмиране на курсора на мишката. Две функции са отговорни за това, 09h и 0Ah, 33h прекъсвания от повече от тридесет. Първата функция ви позволява да програмирате изображението на курсора в графичен режим, втората - в текстов режим.
Преди да продължим с историята за тези функции, нека разберем как се създава изображение на екрана на монитора. Когато купувате монитор, вероятно сте обърнали внимание на такава характеристика на монитора като размер на точката. Който го е купил знае, който не е имал такава възможност - ще знае. Тези малки точки формират изображението на екрана на монитора.
Когато работи в графичен режим, програмистът има възможност да дефинира текста на всяка такава точка на екрана на монитора. Не е толкова лесно с текстовия режим. Тук програмистът има способността да има достъп само до група от точки, които формират едно познаване. Само един знак може да бъде показан на интервал от символи. Размерът на познанието зависи от избрания режим и обикновено е 8 на 8 точки.
Да се върнем към нашите овце, тоест към курсора. Манипулаторът за прекъсване в тестов режим 33h поддържа два типа курсор: твърд и програмируем. Твърдият курсор не променя текущата стойност на познаваемостта, а я подчертава с цвят. Курсорът заема изцяло един знак по ширина. Височината и местоположението на курсора в познатото място могат да се променят. За програмируем курсор програмистът има способността да дефинира формата и цвета.
За да програмирате твърд курсор в текстов режим, запишете стойността 0Ah в регистъра AX, 01h в регистъра BX и броя на горните и долните пикселни линии в познатостта, съответно, в регистрите CX и DX.
Цветът и формата, NewScr, на програмируемия курсор на екрана се определят в резултат на логическите битови операции И и ИЛИ на кода и символния атрибут, OldScr, в позицията на курсора и маските за цвят и форма, AndMask и OrMask, на курсора. Тези действия се описват с формулата:
NewScr = OldScr И AndMask ИЛИ OrMask
Можете сами да определите необходимите стойности за променливите AndMask и OrMask. Като отправна точка за вашето изследване можете да използвате следните често използвани стойности: AndMask = FFFFh и OrMask = 7700h. Такъв курсор измисля цвета на героя и фона. Следователно винаги ще се вижда на екрана. Друго предимство е, че не променя знака под курсора.
Ако искате да използвате конкретен знак, като например стрелка, като курсор на мишката, създайте го във втората половина на ASCII таблицата. След това използвайте курсора със следните стойности AndMask = 00FFh и OrMask = xx00h. Заменете знаците xx с кода на знака, в който се съхранява външният курсор.
Както при "твърдия" текстов курсор на мишката, функцията 0Ah се използва за дефиниране на програмируем курсор. Но трябва да запишете 0 в регистъра BX.Стойността на маската AndMask ще бъде записана в регистъра CX, а стойността на маската OrMask ще бъде записана в регистъра DX.
В началото на статията беше казано, че в графичен режим можете да определите цвета на всяка точка на екрана и това от своя страна ви позволява да зададете произволна форма на курсора. Но е твърде хубаво, за да е истина. Реалността е, че курсорът на мишката е 16 на 16 пиксела, а цветът е резултат от сливането на маски AndMask и XorMask. Както при създаването на програмируем текстов курсор, при генериране на графичен курсор, маската AndMask дефинира цвета, а маската XorMask определя формата на курсора.
AndMaskи XorMask трябва да се комбинират в един конструктивен елемент: масив, запис или структура. Размерът на този елемент ще бъде 64 байта. Първите 32 байта съставляват маската AndMask, следващите 32 байта образуват маската XorMask.
За да има курсор, видим на какъвто и да е фон, всички AndMask байтове на маската трябва да имат код FFh, а битовете, чиято стойност в XorMask е 1, формират формата на курсора. Нека да вземем снимка на курсор и неговото растерно изображение като пример.
При работа с графичен курсор, освен дефиниране на неговия цвят и форма, е необходимо да се посочи така наречената "гореща точка". „Горещата точка“ е точката, към която в момента сочи курсорът. Може да се намира навсякъде в маската на курсора. Позицията му е дадена в относителни координати. Координатите се броят от горния ляв ъгъл, който има относителна координата (0,0). Долният десен ъгъл има максималните координати (15,15).
За да програмирате курсора на мишката в графичен режим, трябва да използвате функцията за прекъсване 09h 33h. Както винаги, записваме номера на функцията в регистъра AX. В регистрите BX и CX съхраняваме информация за координатите на "горещата точка" съответно по хоризонтала и вертикала. В двойката регистри ES:DX трябва да посочите сегмента и отместването на комбинираната конструкция на маските AndMask и XorMask. Може да е масив или може да е структура. Кой какво харесва.
С това нека завърша описанието на функциите на 33h interrupt. Разгледахме малка част от тях. Ако някои от вас се нуждаят от по-пълно описание на възможностите на драйвера на мишката, използвайте документацията за DOS прекъсвания или в краен случай прочетете книгата на Р. Дънкан "Професионална работа в MS-DOS", издадена от издателство "Мир" през 1993 г.
И не забравяйте най-важното: уменията могат да дойдат само в процесаработа.