MFC CView::OnFilePrint не будет печатать более одной копии
У меня есть класс, производный от 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"?
Спасибо за помощь!
1 ответ
Я ожидал бы, что любая современная версия Windows будет обрабатывать копии в процессоре печати и избавит программу от нагрузки (так же, как это происходит с ленточными принтерами). Но твой вопрос говорит об обратном.
Моя память ржавая, но, насколько я помню, некоторые принтеры (или их драйверы) будут делать копии, но другие требуют, чтобы программа делала это. Диалог фиксирует намерение пользователя, устанавливая поле dmCopies в DEVMODE.
Затем программа должна проверить у драйвера, поддерживает ли он несколько копий. Если это так, просто перейдите в DEVMODE. Если это не так, то вам нужен цикл, подобный показанному (и вы сбрасываете поле DEVMODE dmCopies в 1).
Я забыл, как спросить драйвер, поддерживает ли он копии. Возможно, это связано с проверкой, установлен ли бит DM_COPIES в полях dmFM по умолчанию DEVMODE. Я помню, что в старые добрые 16-битные времена многие драйверы утверждали, что поддерживают копии, но на самом деле не делали этого. В приложении, над которым я работал в то время, был список драйверов, в которых говорилось, что они могут делать копии, но не могут.