我有一个派生自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”?
感谢您的帮助!
答案 0 :(得分:1)
我原本预计任何现代版本的Windows都会处理打印处理器中的副本并减轻程序负担(就像使用条带打印机一样)。但你的问题不然。
我的记忆很生疏,但是,我记得,有些打印机(或其驱动程序)会复制,但其他人需要程序才能复制。该对话框通过在DEVMODE中设置dmCopies字段来捕获用户的意图。
然后程序应该与驱动程序一起检查它是否支持多个副本。如果是,只需传入DEVMODE。如果它没有,那么你需要一个像你所示的循环(并将DEVMODE dmCopies字段重置为1)。
我忘记了如何询问驱动程序是否支持副本。也许它与检查DM_COPIES位是否在默认DEVMODE的dmFields中设置有关。我确实记得,在16世纪糟糕的日子里,很多司机声称支持副本,但实际上并没有这样做。我当时工作的应用程序有一份驱动程序列表,表示可以复制但不能复制。