本文整理汇总了C++中BaseEngine::IsPrintingAllowed方法的典型用法代码示例。如果您正苦于以下问题:C++ BaseEngine::IsPrintingAllowed方法的具体用法?C++ BaseEngine::IsPrintingAllowed怎么用?C++ BaseEngine::IsPrintingAllowed使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BaseEngine
的用法示例。
在下文中一共展示了BaseEngine::IsPrintingAllowed方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PrintFile
bool PrintFile(const WCHAR *fileName, const WCHAR *printerName, bool displayErrors, const WCHAR *settings)
{
if (!HasPermission(Perm_PrinterAccess))
return false;
ScopedMem<WCHAR> fileName2(path::Normalize(fileName));
BaseEngine *engine = EngineManager::CreateEngine(!gUseEbookUI, fileName2);
if (!engine || !engine->IsPrintingAllowed()) {
if (displayErrors)
MessageBox(NULL, _TR("Cannot print this file"), _TR("Printing problem."), MB_ICONEXCLAMATION | MB_OK | (IsUIRightToLeft() ? MB_RTLREADING : 0));
return false;
}
HANDLE printer;
bool ok = OpenPrinter((WCHAR *)printerName, &printer, NULL);
if (!ok) {
if (displayErrors)
MessageBox(NULL, _TR("Printer with given name doesn't exist"), _TR("Printing problem."), MB_ICONEXCLAMATION | MB_OK | (IsUIRightToLeft() ? MB_RTLREADING : 0));
return false;
}
// get printer driver information
DWORD needed = 0;
GetPrinter(printer, 2, NULL, 0, &needed);
ScopedMem<PRINTER_INFO_2> infoData((PRINTER_INFO_2 *)AllocArray<BYTE>(needed));
if (infoData)
ok = GetPrinter(printer, 2, (LPBYTE)infoData.Get(), needed, &needed);
if (!ok || !infoData || needed <= sizeof(PRINTER_INFO_2)) goto Exit;
LONG structSize = DocumentProperties(NULL,
printer, /* Handle to our printer. */
(WCHAR *)printerName, /* Name of the printer. */
NULL, /* Asking for size, so */
NULL, /* these are not used. */
0); /* Zero returns buffer size. */
if (structSize < sizeof(DEVMODE)) {
// If failure, inform the user, cleanup and return failure.
if (displayErrors)
MessageBox(NULL, _TR("Could not obtain Printer properties"), _TR("Printing problem."), MB_ICONEXCLAMATION | MB_OK | (IsUIRightToLeft() ? MB_RTLREADING : 0));
goto Exit;
}
LPDEVMODE devMode = (LPDEVMODE)malloc(structSize);
if (!devMode) goto Exit;
// Get the default DevMode for the printer and modify it for your needs.
LONG returnCode = DocumentProperties(NULL,
printer,
(WCHAR *)printerName,
devMode, /* The address of the buffer to fill. */
NULL, /* Not using the input buffer. */
DM_OUT_BUFFER); /* Have the output buffer filled. */
if (IDOK != returnCode) {
// If failure, inform the user, cleanup and return failure.
if (displayErrors)
MessageBox(NULL, _TR("Could not obtain Printer properties"), _TR("Printing problem."), MB_ICONEXCLAMATION | MB_OK | (IsUIRightToLeft() ? MB_RTLREADING : 0));
goto Exit;
}
ClosePrinter(printer);
printer = NULL;
{
Print_Advanced_Data advanced;
Vec<PRINTPAGERANGE> ranges;
ApplyPrintSettings(settings, engine->PageCount(), ranges, advanced);
PrintData pd(engine, infoData, devMode, ranges, advanced);
ok = PrintToDevice(pd);
if (!ok && displayErrors)
MessageBox(NULL, _TR("Couldn't initialize printer"), _TR("Printing problem."),
MB_ICONEXCLAMATION | MB_OK | (IsUIRightToLeft() ? MB_RTLREADING : 0));
}
Exit:
free(devMode);
if (printer)
ClosePrinter(printer);
delete engine;
return ok;
}