1

我有一个派生自 CView 的类,它调用 OnFilePrint(),但无论我在打印对话框中输入多少,似乎只有一个副本被打印。这是一个已知的错误,还是我做错了什么?

我可能会创建自己的 CPrintDialog,但我不太确定如何让它真正进行“打印”。类似于以下内容?

CString PrinterName;
CString SelectedPrinter;
CPrintDialog dlg(FALSE);

int nCopies = 1;
if( IDOK != dlg.DoModal())
    return;
nCopies = dlg.GetCopies();

for(int i=0;i<nCopies;i++)
    //do something??

我错过了什么?另外,如果用户选择 pdf 打印机,我将如何防止代码提示用户输入文件保存位置“nCopies”次?

谢谢您的帮助!

4

1 回答 1

1

我本来希望任何现代版本的 Windows 都能在打印处理器中处理副本并减轻程序的负担(就像它对带状打印机所做的那样)。但你的问题表明并非如此。

我的记忆已经生疏了,但我记得,一些打印机(或它们的驱动程序)会制作副本,但另一些则需要程序来完成。该对话框通过在 DEVMODE 中设置 dmCopies 字段来捕获用户的意图。

然后程序应检查驱动程序以查看它是否支持多个副本。如果是这样,只需传入 DEVMODE。如果没有,那么您需要一个像您展示的那样的循环(并且您将 DEVMODE dmCopies 字段重置为 1)。

我忘记了如何询问驱动程序是否支持副本。也许它与检查是否在默认 DEVMODE 的 dmFields 中设置了 DM_COPIES 位有关。我确实记得在糟糕的 16 位旧时代,许多驱动程序声称支持副本但实际上并没有这样做。我当时开发的应用程序有一个驱动程序列表,他们说他们可以复制但不能。

于 2011-12-05T22:18:56.603 回答