【发布时间】:2022-10-19 02:48:10
【问题描述】:
我正在将 PRINTDLG 库用于旧的 Windows 应用程序,它必须打印一些文件。我将其配置为选择默认打印机并打印文档而不显示任何对话框。但是问题是当没有打印机并且默认打印机设置为保存到文件时,它会显示一个弹出窗口来保存文件并且应用程序最小化,这不应该发生。所以我想禁用打印到文件功能。我试图设置标志以禁用打印到文件,但它不起作用..任何人都知道解决方案或禁用系统弹出窗口的方法。 这是示例代码:
PRINTDLG pd;
memset(&pd, 0, sizeof(pd));
pd.lStructSize = sizeof(pd);
// Disable print to file flag
pd.Flags = PD_RETURNDEFAULT | PD_RETURNIC | PD_DISABLEPRINTTOFILE;
if (!PrintDlg(&pd))
{
MessageBox(NULL, _T("No printer found"), _T("Printer Error!"), MB_OK);
}
else
{
DOCINFO di;
memset(&di, 0, sizeof(di));
di.cbSize = sizeof(di);
StartDoc(pd.hDC, &di);
StartPage(pd.hDC);
// Drawing code begin
//
RECT rc;
rc.top = 100;
rc.left = 100;
rc.bottom = 300;
rc.right = 300;
HBRUSH greenBrush = CreateSolidBrush(RGB(0, 255, 0));
FillRect(pd.hDC, &rc, greenBrush);
DeleteObject(greenBrush);
//
// Drawing code end
EndPage(pd.hDC);
EndDoc(pd.hDC);
DeleteObject(pd.hDC);
}
【问题讨论】:
-
我还没有尝试过,但是 win32 EnumPrinters 功能是否会告诉您是否没有连接打印机? - learn.microsoft.com/en-us/windows/win32/printdocs/enumprinters
标签: c++ visual-studio visual-c++ printers