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-битные времена многие драйверы утверждали, что поддерживают копии, но на самом деле не делали этого. В приложении, над которым я работал в то время, был список драйверов, в которых говорилось, что они могут делать копии, но не могут.

Другие вопросы по тегам