FAQ:WinAPI VCPP:вывод на печать с помощью DCD

Материал из Весельчак У
Версия от 14:45, 30 июля 2008; RXL (обсуждение | вклад) (Новая: ===Как вывести на печать то, что я нарисовал в контексте устройства (класс CDC)?=== Надо нарисовать все тож...)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Как вывести на печать то, что я нарисовал в контексте устройства (класс CDC)?

Надо нарисовать все тоже самое в контексте принтера.

Пример:

//пытаемся получить хендл принтера, используемого по умолчанию
//(через стандартный диалог)
CPrintDialog dlg(FALSE);
dlg.GetDefaults();
HDC hdcPrinter = dlg.GetPrinterDC();
 
if (hdcPrinter == NULL)
{
	MessageBox("Принтер не установлен");
}
else
{
	// создаём контекст (CDC) и привязываем его к принтеру
	CDC dcPrinter;
	dcPrinter.Attach(hdcPrinter);
	// вызов StartDoc() для начала печати
	DOCINFO docinfo;
	memset(&docinfo, 0, sizeof(docinfo));
	docinfo.cbSize = sizeof(docinfo);
	docinfo.lpszDocName = "Важный документ :)";
 
	if (dcPrinter.StartDoc(&docinfo) < 0)
	{
		MessageBox("Не удалось инициализировать принтер");
	}
	else
	{
		//смотрим номер стартовой страницы
		if (dcPrinter.StartPage() < 0)
		{
			MessageBox("Не могу начать печатать страницу");
			dcPrinter.AbortDoc();
		}
		else
		{
			//производим отрисовку графики на контексте
 
			//начали рисовать
			{
				CGdiObject* pOldFont =
					dcPrinter.SelectStockObject(SYSTEM_FONT);
				dcPrinter.TextOut(50, 50, _T("Hello World!"), 12);
				dcPrinter.SelectObject(pOldFont);
 
				//рисование окончено
			}
 
			//финализируем распечатывание документа
			dcPrinter.EndPage();
			dcPrinter.EndDoc();
		}
	}
}