我有一个类,它派生自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"的次数?
谢谢你的帮助!
我本来期望任何现代版本的Windows都能在打印处理器中处理副本,并减轻程序的负担(就像它在带状打印机上所做的那样)。但你的问题却暗示了另一种情况。
我的记忆生锈了,但是,据我回忆,一些打印机(或他们的驱动程序)可以复制,但其他的需要程序来做。对话框通过设置DEVMODE中的dmCopies字段来捕获用户的意图。
程序应该检查驱动程序,看看它是否支持多个副本。如果是,只需传入DEVMODE。如果没有,那么您需要一个像您所展示的那样的循环(并且您将DEVMODE dmCopies字段重置为1)。
我忘了如何询问驱动程序是否支持拷贝。也许它与检查DM_COPIES位是否在默认DEVMODE的dmFields中设置有关。我记得在糟糕的16位时代,很多驱动程序声称支持拷贝,但实际上并没有。我当时开发的应用程序有一个驱动程序列表,上面写着可以复制,但是不能。