HDC hDC = CreateDC(NULL, pPI->pPrinterName, NULL, pPI->pDevMode);
// Работаем со структурой
LPPRINTER_INFO_2 pPI = (LPPRINTER_INFO_2)pBufpi;
if(dwLastErr == ERROR_SUCCESS)
pBufpi = new BYTE[dwSzNeeded];
if(dwLastErr == ERROR_INSUFFICIENT_BUFFER)
while(!GetPrinter(hPrinter, 2, pBufpi, dwSzNeeded, &dwSzNeeded))
// Получение структуры PRINTER_INFO_2 для данного хэндла
if(dwLastErr == ERROR_SUCCESS && OpenPrinter(pBuf, &hPrinter, NULL))
if(dwLastErr == ERROR_INSUFFICIENT_BUFFER)
while(!GetDefaultPrinter(pBuf, &dwSz))
//Получение хэндла принтера по умолчанию
Вот примерный код того, как это может быть сделано:
Помимо имени принтера, функция CreateDC принимает в качестве параметра указатель на специальную структуру DEVMODE, которая содержит информацию об окружении и настройках принтера. В нее входят упоминавшиеся уже параметры бумаги, количество копий документа, коэффициент масштабирования и т.д. Получить эту структуру можно с помощью функции GetPrinter со вторым информационным уровнем (information level). Информационный уровень определяет тип информации о принтере, получаемой с помощью функции GetPrinter.
Кроме этого, все доступные принтеры могут быть перечислены с помощью функции EnumPrinters.
GetProfileString(_T("Windows"),_T("Device"),_T(",,,"),szName,
Для печати создается специальный контекст принтера (printer device context). Создать контекст принтера можно с помощью функции CreateDC, которой передается имя принтера. Имя принтера, выбранного текущим пользователем в качестве «принтера по умолчанию», можно получить, воспользовавшись функцией GetDefaultPrinter, пример использования которой будет приведен ниже. К сожалению, функция GetDefaultPrinter доступна только в операционных системах Windows 2000/XP и старше. Поэтому в версиях ОС Windows 9х и NT 4.0 приходится пользоваться функцией GetProfileString, получающей принтер по умолчанию из системного ini-файла:
Одним из основных достоинств вывода графической информации под Windows является абстрагирование от конкретного устройства вывода, будь то монитор, принтер или, скажем, какой-нибудь другое «экзотическое» устройство. С помощью одних и тех же функций GDI вы можете «рисовать» на любом устройстве. Однако сам процесс «рисования» при этом существенно различается. Это связано с тем, что при печати вы должны учитывать некоторые особенности принтера (например, разрешение), параметры бумаги (ориентация, размер) и проч.
Печать в WTLПечать документов с использованием библиотеки WTLАвтор: The RSDN GroupИсточник: Опубликовано: 09.11.2003Исправлено: 13.03.2005Версия текста: 1.0 Архитектура печати в Win32 API
Печать в WTL P PP PP P PP PP PPPОценить P
Комментариев нет:
Отправить комментарий