Приложение может создать контекст устройства (DC) принтера в одним из двух способов:
Этот раздел содержит код, демонстрирующий последний метод.
Чтобы использовать текущий принтер, извлеките данные и проанализируйте соответствующую строку из файла Win.ini . Эта строка извлекается при помощи вызова функции GetProfileString и определение соответствующего раздела и названий записи. В случае текущего принтера, это данные сохраняются в разделе [windows] и идентифицируются записью названной устройством. Седьмая строка в ниже следующее отрывке из Win.ini файла показывает запись для принтера Kodak Diconix .
[windows]
load=
run=
Beep=yes
Spooler=yes
NullPort=None
device=Diconix,winspool,LPT1:
CoolSwitch=1
BorderWidth=3
KeyboardSpeed=31
InitialKeyboardIndicators=2
CursorBlinkRate=530
DoubleClickSpeed=686
Programs=com exe bat pif cmd
Documents=
DeviceNotSelectedTimeout=15
TransmissionRetryTimeout=45
swapdisk=
NetWarn=1
fPromptOnVerbose=FALSE
fPromptOnWarning=FALSE
fPromptOnError=TRUE
fPrintVerbose=FALSE
fPrintFileLine=FALSE
shell=
ScreenSaveTimeOut=300
ScreenSaveActive=0
DebugOptions=2048
Пример ниже показывает, как контекст устройства (DC) принтера был создан, используя данные из Win.ini.
HDC hdcPrint; // дескриптор DC принтера
char szDevString[120]; // массив для данных WIN.INI
char *szPrinter, *szDriver; // имена драйвера и принтера
char *szPort; // название порта
// Извлекаем данные о принтере, его драйвере, и
// название порта вывода из WIN.INI.
GetProfileString("windows", "device", ",,,",
szDevString, 120);
// Анализируем строку имен, устанавливаем ptrs как требуется
// Если строка содержит требуемые имена, используем их, чтобы
// создать контекст устройства.
if ((szPrinter = strtok(szDevString,
(const char *) ","))
&& (szDriver = strtok ((char *) NULL,
(const char *) ", "))
&& (szPort = strtok ((char *) NULL,
(const char *) ", ")))
{
hdcPrint = CreateDC(szDriver, szPrinter,
szPort, NULL);
}
// Печатаем пробную страницу, которая содержит строку
// "PRINTER TEST" в верхнем левом углу.
Escape(hdcPrint, STARTDOC, 8, "Test-Doc", NULL);
TextOut(hdcPrint, 50, 50, "PRINTER TEST", 12);
Escape(hdcPrint, NEWFRAME, 0, NULL, NULL);
Escape(hdcPrint, ENDDOC, 0, NULL, NULL);
// Удаляем DC принтера.
DeleteDC(hdcPrint);
|