Windows - печать из C/C++ приложения
Печать в Borland CBuilder
Процесс печати в CBuilder сводиться к вызову трех четырех функций. И рисованию в Canvas принтера.
Пример:
TPrinter *Prntr = Printer(); //Взять текущий принтер
Prntr->Title = "PrintPosters task"; //Назвать задучу (для менеджера печати)
Prntr->BeginDoc(); //Открыть принтер
Prntr->TextOut(10,10, "LALALAL");
Prntr->NewPage(); //Если надо вызываем перевод страницы
Prntr->EndDoc(); //Закрываем принтер
Примечание. Только после команды EndDoc подготовленное задание реально передается принтеру
Вызов диалога печати
Часто возникает необходимость обеспечить возможность выбора принтера и его настройки пользователем
Примечание если некорректно указаны параметры nToPage, nMinPage, nMaxPage то диалог просто не появиться на экране и вернет неудачу
Пример:
PRINTDLG prn_dialog;
ZeroMemory(&prn_dialog, sizeof(PRINTDLG));
// Заполняем структуру PRINTDLG
prn_dialog.lStructSize = sizeof(PRINTDLG);
prn_dialog.hwndOwner = Handle;
prn_dialog.nCopies = 1;
prn_dialog.nFromPage = 0xFFFF;
prn_dialog.nToPage = 0xFFFF;
prn_dialog.nMinPage = 1;
prn_dialog.nMaxPage = 0xFFFF;
prn_dialog.Flags = 0;
if (PrintDlg(&prn_dialog)) { // Здесь выполняем действия для печати
//...
if (prn_dialog.hDevMode)
GlobalFree(prn_dialog.hDevMode);
if (prn_dialog.hDevNames)
GlobalFree(prn_dialog.hDevNames);
}
Вызов диалога печати VCL версия
Для Delphi и CBuilder-а есть компонент PrintDialog1. Все параметры те же что и выше, но чтобы использовать переменную Printer использовать необходимо его.
Пример:
PrintDialog1->MinPage = 1;
PrintDialog1->ToPage = fPrintPageFrame1->GetNumPages();
PrintDialog1->MaxPage = fPrintPageFrame1->GetNumPages();
if (PrintDialog1->Execute()) { // Здесь выполняем действия для печати
//...
}