Здравствуйте,
Помогите, пожалуйста, с печатью прямо на принтер, без вызова диалога.
Если вызвать диалог печати (установив Regime = MPR_PRINT и File = 1), печать выполняется нормально.
Если поменять Regime = MPR_PRINTONLY и File = 0, то появляется на небольшое время сообщение, что идет печать(файл с расширением .tmp), но на принтер ничего не уходит.
Принтер по умолчанию в Windows 10 установлен .
Код ниже:
HPRINTER printer = 0;
MAPPRINTPARMEX printparm;
memset(&printparm,0,sizeof(printparm));
printparm.Length = sizeof(MAPPRINTPARMEX);
printparm.Regime = MPR_PRINTONLY;
printparm.Handle = hWnd;
printparm.File = 0;
printparm.PlaneFrame = dfarme;
printparm.TypeOutput = MPT_NORMAL;
printparm.FitToPage = (ui->printMode_split->isChecked()) ? MPF_SPLITTOPAGES : MPF_FITTOPAGE;
printparm.Preview = MPV_MAP;
printparm.Scale = scale;
printparm.FieldLTmm = ui->fldLeft->text().toInt();
printparm.FieldUPmm = ui->fldTop->text().toInt();
printparm.FieldRTmm = ui->fldRight->text().toInt();
printparm.FieldDNmm = ui->fldBut->text().toInt();
printparm.PaperWidth = static_cast<int>(paperW * 1000.);
printparm.PaperHeight = static_cast<int>(paperH * 1000.);
HINSTANCE libinst = nullptr;
HPRINTER (WINAPI * prnLoadPrinter)() = nullptr;
long int (WINAPI * prnMapPrintEx)(HMAP hmap, HPRINTER printer, MAPPRINTPARMEX* printparm,TASKPARM* taskparm, char* title) = nullptr;
long int (WINAPI * prnFreePrinter)(HPRINTER printer) = nullptr;
prnLoadPrinter = (HPRINTER (WINAPI * )()) mapLoadLibrary("gisu64forms.dll",&libinst,"prnLoadPrinter");
prnMapPrintEx = (long int (WINAPI * )(HMAP hmap, HPRINTER printer, MAPPRINTPARMEX* printparm, TASKPARM* taskparm, char* title)) ::mapGetProcAddress(libinst,"prnMapPrintEx");
prnFreePrinter = (long int (WINAPI * )(HPRINTER printer)) ::mapGetProcAddress(libinst,"prnFreePrinter");
if (prnLoadPrinter)
printer = prnLoadPrinter();
if (printer == 0) {
if (libinst)
FreeLibrary(libinst);
return;
}
TASKPARM parm;
memset(&parm, 0, sizeof(parm));
if (prnMapPrintEx && hMap)
prnMapPrintEx(hMap, printer, &printparm, &parm, "");
Спасибо
С уважением,
Сергей Подолян
Помогите, пожалуйста, с печатью прямо на принтер, без вызова диалога.
Если вызвать диалог печати (установив Regime = MPR_PRINT и File = 1), печать выполняется нормально.
Если поменять Regime = MPR_PRINTONLY и File = 0, то появляется на небольшое время сообщение, что идет печать(файл с расширением .tmp), но на принтер ничего не уходит.
Принтер по умолчанию в Windows 10 установлен .
Код ниже:
HPRINTER printer = 0;
MAPPRINTPARMEX printparm;
memset(&printparm,0,sizeof(printparm));
printparm.Length = sizeof(MAPPRINTPARMEX);
printparm.Regime = MPR_PRINTONLY;
printparm.Handle = hWnd;
printparm.File = 0;
printparm.PlaneFrame = dfarme;
printparm.TypeOutput = MPT_NORMAL;
printparm.FitToPage = (ui->printMode_split->isChecked()) ? MPF_SPLITTOPAGES : MPF_FITTOPAGE;
printparm.Preview = MPV_MAP;
printparm.Scale = scale;
printparm.FieldLTmm = ui->fldLeft->text().toInt();
printparm.FieldUPmm = ui->fldTop->text().toInt();
printparm.FieldRTmm = ui->fldRight->text().toInt();
printparm.FieldDNmm = ui->fldBut->text().toInt();
printparm.PaperWidth = static_cast<int>(paperW * 1000.);
printparm.PaperHeight = static_cast<int>(paperH * 1000.);
HINSTANCE libinst = nullptr;
HPRINTER (WINAPI * prnLoadPrinter)() = nullptr;
long int (WINAPI * prnMapPrintEx)(HMAP hmap, HPRINTER printer, MAPPRINTPARMEX* printparm,TASKPARM* taskparm, char* title) = nullptr;
long int (WINAPI * prnFreePrinter)(HPRINTER printer) = nullptr;
prnLoadPrinter = (HPRINTER (WINAPI * )()) mapLoadLibrary("gisu64forms.dll",&libinst,"prnLoadPrinter");
prnMapPrintEx = (long int (WINAPI * )(HMAP hmap, HPRINTER printer, MAPPRINTPARMEX* printparm, TASKPARM* taskparm, char* title)) ::mapGetProcAddress(libinst,"prnMapPrintEx");
prnFreePrinter = (long int (WINAPI * )(HPRINTER printer)) ::mapGetProcAddress(libinst,"prnFreePrinter");
if (prnLoadPrinter)
printer = prnLoadPrinter();
if (printer == 0) {
if (libinst)
FreeLibrary(libinst);
return;
}
TASKPARM parm;
memset(&parm, 0, sizeof(parm));
if (prnMapPrintEx && hMap)
prnMapPrintEx(hMap, printer, &printparm, &parm, "");
Спасибо
С уважением,
Сергей Подолян