Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Принтеры. Работа с мышью организуется через механизм прерываний

Мышь

 

Работа с мышью организуется через механизм прерываний. Прикладная программа вызывает прерывание 33h, передавая в регистрах необходимые параметры и получая через регистры возвращаемые драйвером значения. Существуют различные стандарты работы с мышью. Наиболее распространены стандарты IBM и Microsoft. Из драйверов наиболее известны mouse.com и gmouse.com. Они поддерживают множество функций мыши, связанных с внешним видом, положением и перемещением курсора, а также с определением состояния кнопок мыши. Для программирования той или иной функции мыши требуется только знать ее номер и параметры, заносимые в регистры перед вызовом прерывания. Обычно номера функций драйвера заменяются их мнемоническими именами в заголовочном файле (например, mouse.h), сами тексты функций собираются в отдельном файле (например, mouse.cpp). Такая пара (mouse.h и mouse.cpp) ориентируется на конкретный драйвер. В [ 1,4 ] приводятся варианты программного обеспечения - для драйверов mouse.com и gmouse.com.

Любая библиотека обычно содержит следующие функции:

· проверка наличия мыши;

· показ/сокрытие курсора мыши (при сокрытии драйвер мыши продолжает отслеживать ее перемещение);

· чтение состояния мыши (ее координат и состояния кнопок - нажато/отжато);

· передвижение курсора мыши в заданную точку;

· установка области перемещения курсора мыши.

По умолчанию форма курсора мыши определяется оборудованием и драйвером. Ее можно изменить.

В текстовом режиме курсор мыши отображается на экране совместно с текстовым курсором и представляет собой прямоугольник размером в один символ. Вид изображения при перекрытии курсором мыши чего-либо на экране определяется параметрами, передаваемыми функции изображения курсора мыши для текстового режима. Эти параметры (маска экрана и маска курсора) состоят из 16 бит и задают мерцание, цвет и фон, а также изображаемый при наложении курсора символ. Маска экрана участвует в логической операции AND с атрибутами перекрытого участка экрана, далее выполняется операция XOR с маской курсора. Например, для инвертирования изображения маска экрана - 0xFFFF, маска курсора - 0x770.

В графическом режиме также имеется курсор по умолчанию (от драйвера). Обычно это небольшая стрелка. Вид курсора также можно изменить. Над маской экрана и маской курсора выполняются аналогично текстовому режиму операции AND и XOR. Но под каждую маску отводится не 16 бит, а по 16 16-битовых величин (int mask[1][15]). Для создания собственного курсора полезна таблица взаимодействия масок:

 

Маска экрана Маска курсора Рез-т на экране Маска экрана Маска курсора Рез-т на экране
          Не измен.
          Инверсия

 

Следует обратить внимание на рациональную реализацию обработки событий от мыши. Не требуется все время опрашивать драйвер мыши. Ему передается адрес функции, которую следует вызвать при наступлении заданного события. Это производится при использовании функции SetMouseHandler() из файла mouse.cpp. Первый параметр - указатель на функцию, второй параметр - маска событий. Это битовая маска, каждое событие описывается соответствующей константой в файле mouse.h (MOUSE_MOVE_MASK - 0x01, MOUSE_LBUTTON_PRESS - 0x02 и т.д.). События соединяются побитовой операцией ИЛИ. Функция, которая обрабатывает событие, получает маску вызывающего события, маску состояния кнопок мыши, координаты курсора мыши. Пример применения обработчика событий - программа MOUSE\example1.cpp из [ 1 ]:

 

#include <bios.h>

#include <conio.h>

#include "Mouse.h"

 

/* курсор мыши */

CursorShape c = { 0x0FFF, 0x07FF, 0x01FF, 0x007F, 0x801F, 0xC007,

0xC001, 0xE000, 0xE0FF, 0xF0FF, 0xF0FF, 0xF8FF,

0xF8FF, 0xFCFF, 0xFCFF, 0xFEFF, 0x0000, 0x6000,

0x7800, 0x3E00, 0x3F80, 0x1FE0, 0x1FF8, 0x0FFE,

0x0F00, 0x0700, 0x0700, 0xFFFF, 0xFFFF, 0xFFFF,

0xFFFF, 0xFFFF, 1, 1 };

int DoneFlag = 0;

void SetVideoMode (int mode)

{

asm {

mov ax, mode

int 10h

}

}

#pragma argsused

void WaitPress (int mask, int button, int x, int y)

{

if (mask & MOUSE_RBUTTON_PRESS)

DoneFlag = 1;

}

main ()

{

SetVideoMode (0x12);

ResetMouse ();

ShowMouseCursor ();

SetMouseShape (c);

SetMouseHandler (WaitPress); /* обработчик события */

/* "Нажатие клавиши" */

MoveMouseCursor (0, 0);

while (!DoneFlag)

;

HideMouseCursor ();

RemoveMouseHandler ();

SetVideoMode (3); }

Основные компоненты программы - функция WaitPress, устанавливающая флаг события «Нажатие клавиши», и цикл ожидания нажатия while(!DoneFlag);). По окончании работы следует обязательно убрать обработчик событий (функция RemoveMouseHandler).

 

 

Принтеры очень хорошо приспособлены для вывода графики, т.к. строят изображение по точкам. Наиболее часто используются 9- и 24-игольчатые матричные принтеры, лазерные принтеры, струйные принтеры.

Принтером управляет специальный набор команд, описываемый в документации на принтер. Эти команды отражают аппаратные особенности принтера. Однако есть достаточно общий набор команд, реализованный для большинства принтеров. Это команды управления прогоном бумаги, плотностью печати, шрифтом (если принтер имеет возможность работы с различными шрифтами, они зашиваются в ПЗУ) и т.д.

Каждая команда является набором символов (имеет символическое имя) или цифр (кодов). Коды просто посылаются на принтер во входном потоке. Чтобы отличить команды от того, что следует напечатать, они предваряются неотображаемым символом, т.е. символом с кодом, меньшим 32. Такому коду не соответствует ни один символ кода ASCII. Обычно в качестве символа начала управляющей последовательности выступает Esc (код 27). Поэтому говорят об Esc-последовательностях управления принтером.

При работе на языке С Esc-последовательности записываются в операторе вывода. Символ Esc выглядит как '\x1B'. Послать его можно в любой функции вывода, переключив поток вывода с экрана на принтер, или непосредственно в принтерный порт с помощью функции

 

int biosprint(int cmd, int byte, int port);

где cmd: 0 - печать символа byte,

1 - инициализация порта принтера,

2 - чтение статуса принтера;

byte - от 0 до 255 (что выводим/посылаем на принтер);

port - определение принтерного порта: 0 - LPT1;

1 - LPT2 и т.д.

int byte='\x1B';

biosprint(0,byte,0);

24-игольчатые (или LQ) принтеры включают (расширяют) язык управления 9-игольчатых принтеров. Большинство струйных принтеров по языку управления совместимо с LQ-принтерами.

Среди лазерных принтеров наиболее распространены HP LaserJet фирмы Hewlett Packard. Они управляются языком PCL. Большинство лазерных принтеров других фирм тоже поддерживает этот язык. Для выделения управляющей информации также используются Esc-последовательности, но кодовая строка длиннее, т.к. эти принтеры предоставляют больше возможностей по управлению.

 

<== предыдущая лекция | следующая лекция ==>
Видеокарты EGA, VGA и SVGA | Тема 5. Особенности работы в MS Windows
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 457; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.