BeOS - статьи

Порно кастинги смотрите на сайте. | фото домашнего секса смотреть онлайн. |

Как написать драйвер принтера в BeOS - часть 3


В settings будут переданы настройки печати предыдущей страницы. Как минимум, ореинтация и размер бумаги.

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

Поле

Тип

Примечание

printable_rect B_RECT_TYPE размер печатаемой области в разрешении 72 пикселя на дюйм.
paper_rect B_RECT_TYPE размер бумаги в разрешении 72 пикселя на дюйм
orientation B_INT32_TYPE 0-портрет, 1-пейзаж
xres B_INT32_TYPE горизонтальное разрешение
yres B_INT32_TYPE вертикальное разрешение


Если конфигурирование было удачным, то драйвер принтера должен вернуть указатель на BMessage с новыми настройками, в противном случае NULL (например пользователь нажал на кнопку «Отменить» в диалоге настройки станицы).

Транспортный модуль

Для непосредственной передачи задания печати, драйвер принтера должен загрузить ассоциируемый с ним транспортный модуль. Имя транспортного модуля, как было оговорено выше, драйвер может получить из атрибута transport каталога спулера. Сначала драйвер должен поискать модуль в пользовательском каталоге (B_USER_ADDONS_DIRECTORY каталог Print/transport) и только в случае неудачи — в системном (B_SYSTEM_ADDONS_DIRECTORY каталог Print/transport).

Транспортный модуль экспортирует две функции:

BDataIO* init_transport(BMessage *settings);
void exit_transport(void);

Единственный параметр init_transport() — это BMessage с записью printer_file (B_STRING_TYPE) внутри. Эта запись должна указывать на каталог спулера. При нормальном завершении, функция вернет указатель на BDataIO объект, а в случае неудачи NULL. Полученый объект будет использоваться для записи данных в принтер.

Драйвер не должен удалять BDataIO объект. Удаление объекта происходит при вызове exit_transport() и выгрузке транспортного модуля.

Пример кода можно посмотреть в методе Open() класса PrinterTransport в каталоге



- Начало -  - Назад -  - Вперед -



Книжный магазин