Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2050

.pdf
Скачиваний:
0
Добавлен:
15.11.2022
Размер:
1.12 Mб
Скачать

"Сообщение",MB_OK);

else if (result!=DISP_CHANGE_SUCCESSFUL)

MessageBox(NULL,"Не удалось изменить разрешение системы

!!!","Сообщение",MB_OK);

}

Установка режимов копирования изображения void main()

{

hDeskTop=GetDesktopWindow();

hCurWin=GetActiveWindow();

dcDeskTop=GetWindowDC(hDeskTop);

dcCurWin=GetWindowDC(hCurWin);

BitBlt(dcCurWin,0,0,100,100,dcDeskTop,0,0,SRCCOPY);

ReleaseDC(hDeskTop,dcDeskTop);

ReleaseDC(hCurWin,dcCurWin);

}

Вспомогательные или обслуживающие функции, такие как GetActiveWindow, GetDesktopWindow, GetDC, GetWindowDC и ReleaseDC имеют место так же, как и в файловой системе. В данном случае приведенные функции обслуживают процессы рисования, и процессы получения информации об области вывода графических данных (дисплей, принтер).

Например, перед выполнением функций рисования требуется получить идентификатор контекста устройства (GetActiveWindow, GetDC). Получение этого идентификатора связано с выделением памяти для его хранения, поэтому после завершения процесса рисования следует освободить память (ReleaseDC). Естественно, что включение вспомогательных функций в управляющие значительно упростило бы их использование. Однако при необходимости многократного использования контекста устройства подобное включение, а значит постоянное выделение и освобождение памяти для каждой функции было бы не рационально и внесло бы значительную задержку пропорциональную количеству функций рисования.

61

4. ОРГАНИЗАЦИЯ СВЯЗИ С ПРИНТЕРОМ ПО ПАРАЛЛЕЛЬНОМУ ИНТЕРФЕЙСУ

4.1.Назначение печатающих устройств

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

- матричные; - струйные; - лазерные.

Каждый принтер обладает своим набором свойств, при чем часть свойств уникальна, например, дуплексный режим обмена информации, многократное копирование. Поэтому каждое печатающее устройство имеет свой драйвер. По своему построению драйвер является сложным устройством обмена. Для упрощения взаимодействия пользовательских программ с драйвером в Win32 API реализованы соответствующие функции, которые обеспечивают получение информации о характеристиках принтера и вывод на печать требуемой информации.

62

4.2. Функции Win32 API для печатающих устройств

Информационные функции Win32 API позволяют получить необходимую информацию о печатающем устройстве. К ним относятся следующие функции:

GetProfileString;

DeviceCapabilities;

GetDeviceCaps.

GetProfileString дает возможность определить значение заданного ключа в заданной секции файла WIN.INI. В данном файле поддерживается следующий синтаксис: [секция] ключ = строка. Если указанная секция или ключ не найдены, то в буфер записывается строка, принятая по умолчанию. При корректном завершении функция возвращает число символов, скопированных в буфер (длина строки). Значения, соответствующие текущему принтеру, располагаются в WIN.INI следующим образом:

[windows] device=<имя>,<драйвер>,<порт>

Синтаксис: DWORD

GetProfileString(lpAppName,lpKeyName,lpDefault,lpReturnedString,nSize)

LPCTSTR lpAppName; // указатель на название секции LPCTSTR lpKeyName; // указатель на название ключа LPCTSTR lpDefault; // указатель на строку, возвращаемую по умолчанию

LPTSTR lpReturnedString; // указатель на буфер, принимающий запрашиваемую строку

DWORD nSize // размер принимающего буфера

DeviceCapabilities возвращает параметры, запрошенные у драйвера принтера.

Синтаксис: DWORD

DeviceCapabilities(pDevice,pPort,fwCapability,pOutput,pDevMode)

LPCTSTR pDevice; // указатель на строку имени принтера LPCTSTR pPort; // указатель на порт принтера

WORD fwCapability; // код запроса

63

LPTSTR pOutput; // выходной массив данных

CONST DEVMODE *pDevMode; // указатель на структуру

DEVMODE

fwCapability может принимать следующие значения:

DC_BINADJUST - только для Windows 95: возвращает позицию страницы на бумаге определенной структурой

DEVMODE,

DC_BINNAMES - копирует массив содержащий список имен "бумажных ящиков". Этот массив имеет форму char

PaperNames[cBinMax][cchBinName], где cchBinName – 24

символа.

DC_BINS - список доступных "бумажных ящиков". Копируется массив идентификаторов типа WORD .

DC_COPIES - количество копий, которое можно напечатать.

DC_DRIVER - версия драйвера принтера.

DC_DATATYPE_PRODUCED - только для Windows 95:

возвращает количество типов данных, поддерживаемых драйвером .

DC_DUPLEX - если возвращается 1, то поддерживается дуплексный режим .

DC_EMF_COMPLIANT - только Windows 95:

определяет, поддерживает драйвер метафайлы (1) или нет (-1)

.

DC_ENUMRESOLUTIONS - возвращает список доступных разрешений, которые представляют пары значений

LONG .

DC_EXTRA - возвращает количество байт, которое необходимо заполнить в структуре DEVMODE .

DC_FIELDS - возвращает значение поля dmFields структуры DEVMODE .

DC_FILEDEPENDENCIES - возвращает список файлов, которые также нужно загрузить, когда драйвер инсталлирован. Имена файлов имеют формат char[chFileName, 64] .

64

DC_MAXEXTENT - возвращается структура POINTS, содержащая максимальные размеры бумаги .

DC_MINEXTENT - возвращается структура POINTS, содержащая минимальные размеры бумаги .

DC_ORIENTATION - возвращаются поддерживаемые повороты изображения:

0 - не поддерживается поворот

90 - поддерживается поворот на 90 градусов (Hewlett-

Packard PCL принтеры).

270 - поддерживается поворот на 270 градусов (матричные принтеры).

DC_PAPERNAMES - возвращает список поддерживаемых имен размеров бумаги (Letter, Legal и.т.д). Каждое имя строки длиной не более 64 символов.

DC_PAPERS - возвращает список поддерживаемых размеров бумаги. Копируется массив идентификаторов типа WORD. Если Output равен NULL, то функция возвращает количество поддерживаемых размеров .

DC_PAPERSIZE - копирует все поддерживаемые размеры (в миллиметрах) в массив структур POINT, на который указывает pOutput .

DC_SIZE - размер структуры DEVMODE для драйвера принтера .

DC_TRUETYPE - возвращает способ использования шрифтов TrueType. pOutput должен быть равен NULL. Функция возвращает одно из значений:

DCTT_BITMAP - устройство может напечатать шрифты TrueType как графику (матричные и PCL принтеры).

DCTT_DOWNLOAD - устройство может загрузить шрифты TrueType (PCL и PostScript принтеры).

DCTT_DOWNLOAD_OUTLINE - только для Windows 95: устройство может загрузить контуры шрифтов

TrueType.

DCTT_SUBDEV - устройство может заместить шрифты

TrueTypeDevice (PostScript принтеры).

DC_VERSION - дополнение к версии драйвера :

65

если pOutput NULL, то функция возвращает количество байт, необходимое для хранения выходных данных

если pDevMode NULL, то функция возвращает данные текущего принтера, иначе - данные в соответствии со структурой DEVMODE

GetDeviceCaps позволяет получить специфическую информацию о заданном устройстве. Контекст устройства получают функциями GetDC или GetWindowDC.

Синтаксис: int GetDeviceCaps(hdc, nIndex)

HDC hdc; // идентификатор контекста устройства (device context)

int nIndex; // индекс запроса

Индекс может принимать следующие значения: DRIVERVERSION - версия драйвера устройства. TECHNOLOGY - вид устройства

Возвращаемые значения: DT_PLOTTER - векторный плоттер; DT_RASDISPLAY - растровый дисплей; DT_RASPRINTER - растровый принтер; DT_RASCAMERA - растровая камера;

DT_CHARSTREAM - символьный поток;

DT_METAFILE - метафайл;

DT_DISPFILE - дисплейный файл.

HORZSIZE - ширина физического экрана в миллиметрах. VERTSIZE - высота физического экрана в миллиметрах. HORZRES - ширина экрана в пикселях.

VERTRES - высота экрана в растровых линиях. LOGPIXELSX - количество пикселей в логическом

дюйме вдоль ширины экрана.

LOGPIXELSY - количество пикселей в логическом дюйме вдоль высоты экрана.

BITSPIXEL - количество битов для отображения цвета каждой точки.

66

PLANES - количество цветовых плоскостей. NUMBRUSHES - количество специальных кистей

устройства.

NUMPENS - количество специальных перьев (карандашей) устройства.

NUMFONTS - количество специальных шрифтов устройства.

NUMCOLORS - количество цветов входящих в цветовую таблицу устройства, если устройство имеет глубину цвета не более 8 битов на пиксель, иначе возвращается -1.

ASPECTX - ширина пикселя устройства, использующаяся для рисования линии.

ASPECTY - высота пикселя устройства, использующаяся для рисования линии.

ASPECTXY - диагональная ширина пикселя, использующаяся для рисования линии.

PDEVICESIZE - зарезервировано.

CLIPCAPS - если устройство можно отобразить в виде прямоугольника (например, битовая поверхность), возвращается 1, иначе 0.

SIZEPALETTE - количество цветов, входящих в системную палитру, этот индекс является значимым, если драйвер устройства устанавливает бит RC_PALETTE при индексе RASTERCAPS.

NUMRESERVED - количество зарезервированных цветов в системной палитре, этот индекс является значимым, если драйвер устройства устанавливает бит RC_PALETTE при индексе RASTERCAPS.

COLORRES - актуальное цветовое разрешение устройства в битах на пиксель, этот индекс является значимым, если драйвер устройства устанавливает бит

RC_PALETTE при индексе RASTERCAPS.

PHYSICALWIDTH - для печатающих устройств: ширина физической страницы, в единицах устройства. Например, принтер, установленный на 600 dpi на бумаге 8.5"x11", имеет

67

физическую ширину 5100 единиц. Эта физическая страница больше либо равна площади, на которой возможна печать.

PHYSICALHEIGHT - для печатающих устройств: высота физической страницы, в единицах устройства. Например, принтер, установленный на 600 dpi на бумаге 8.5"x11", имеет физическую высоту 6600 единиц. Эта физическая страница больше либо равна площади, на которой возможна печать.

PHYSICALOFFSETX - для печатающих устройств: дистанция от левого края физической страницы до левого края площади, на которой возможна печать, в единицах устройства. Например, принтер, установленный на 600 dpi на бумаге 8.5"x11", который не может вести печать левее, чем 0.25" от края бумаги, имеет значение дистанции 150 единиц.

PHYSICALOFFSETY - для печатающих устройств: дистанция от верхнего края физической страницы до верхнего края площади, на которой возможна печать, в единицах устройства. Например, принтер, установленный на 600 dpi на бумаге 8.5"x11", который не может вести печать выше, чем 0.5" от края бумаги, имеет значение дистанции 300 единиц.

VREFRESH - только для Windows NT: для дисплея текущее вертикальное обновление устройства в циклах за секунду (Гц). Значение вертикального обновления равное 0 или 1 представляет аппаратное значение, принятое по умолчанию. Эта величина обычно устанавливается переключателями на видеокарте, материнской плате или программно, не используя функции Win32.

DESKTOPHORZRES - только для Windows NT: Ширина виртуального рабочего стола в пикселях. Это значение может быть больше значения HORZRES для многодисплейного режима.

DESKTOPVERTRES - только для Windows NT: Высота виртуального рабочего стола в пикселах. Это значение может быть больше значения HORZRES для многодисплейного режима.

RASTERCAPS - значение, показывающее растровую совместимость устройства.

68

Возвращаемые значения:

RC_BANDING - требует расширенную поддержку; RC_BITBLT - возможность переносить битовые поверхности;

RC_BITMAP64 - возможность поддержки битовых поверхностей более, чем 64K;

RC_DI_BITMAP - возможность поддержки функций

SetDIBits и GetDIBits;

RC_DIBTODEV - возможность поддержки функции

SetDIBitsToDevice;

RC_FLOODFILL - возможность поддержки сплошной заливки;

RC_GDI20_OUTPUT - возможность поддержки свойств

Windows 2.0;

RC_PALETTE - специфицирует основную палитру устройства;

RC_SCALING - возможность масштабирования; RC_STRETCHBLT - возможность выполнения функции

StretchBlt;

RC_STRETCHDIB - возможность выполнения функции

StretchDIBits.

CURVECAPS - значение, показывающее совместимость устройства с кривыми линиями.

Возвращаемые значения:

CC_NONE - устройство не поддерживает кривые; CC_CIRCLES - устройство может рисовать окружности; CC_PIE - устройство может рисовать углы; CC_CHORDустройство может рисовать дуги; CC_ELLIPSES - устройство может рисовать эллипсы;

CC_WIDE - устройство может рисовать широкие бордюры;

CC_STYLED - устройство может рисовать стилизованные бордюры;

CC_WIDESTYLED - устройство может рисовать широкие и стилизованные бордюры;

69

CC_INTERIORS - устройство может рисовать внутренности;

CC_ROUNDRECT - устройство может рисовать прямоугольники с закругленными краями.

LINECAPS - значение, показывающее совместимость устройства с прямыми линиями.

Возвращаемые значения:

LC_NONE - устройство не поддерживает прямые; LC_POLYLINE - устройство может рисовать полилинии; LC_MARKER - устройство может рисовать маркер; LC_POLYMARKER - устройство может рисовать множественный маркер;

LC_WIDE - устройство может рисовать широкие линии; LC_STYLED - устройство может рисовать стилизованные линии;

LC_WIDESTYLED - устройство может рисовать широкие и стилизованные линии;

LC_INTERIORS - устройство может рисовать внутренности.

POLYGONALCAPS значение, показывающее совместимость устройства с многоугольниками.

Возвращаемые значения:

PC_NONE - устройство не поддерживает многоугольники;

PC_POLYGON - устройство может рисовать многоугольники со смешанной заливкой; PC_RECTANGLE - устройство может рисовать прямоугольники;

PC_WINDPOLYGON - устройство может рисовать многоугольники с извивающейся заливкой; PC_SCANLINE - устройство может рисовать одиночную масштабируемую линию;

PC_WIDE - устройство может рисовать широкие бордюры;

PC_STYLED - устройство может рисовать стилизованные бордюры;

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]