Приложение может создать контекст устройства (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); |