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

Материал из Весельчак У

Перейти к: навигация, поиск

Как вывести на печать то, что я нарисовал в контексте устройства (класс 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();
}
}
}