MFC CView :: OnFilePrint не будет печатать более одной копии - PullRequest
1 голос
/ 06 декабря 2011

У меня есть класс, производный от 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 Ответ

1 голос
/ 06 декабря 2011

Я бы ожидал, что любая современная версия Windows будет обрабатывать копии в процессоре печати и избавит программу от бремени (так же, как это происходит с ленточными принтерами).Но ваш вопрос говорит об обратном.

Моя память ржавая, но, насколько я помню, некоторые принтеры (или их драйверы) будут делать копии, но другим для этого требуется программа.Диалог фиксирует намерение пользователя, установив поле dmCopies в DEVMODE.

Затем программа должна проверить у драйвера, поддерживает ли он несколько копий.Если это так, просто перейдите в DEVMODE.Если это не так, то вам нужен цикл, подобный показанному (и вы сбрасываете поле DEVMODE dmCopies на 1).

Я забыл, как спросить драйвер, поддерживает ли он копии.Возможно, это связано с проверкой, установлен ли бит DM_COPIES в полях dmFM по умолчанию DEVMODE.Я помню, что в старые добрые 16-битные времена многие драйверы утверждали, что поддерживают копии, но на самом деле не делали этого.В приложении, над которым я работал в то время, был список драйверов, в которых говорилось, что они могут делать копии, но не могут.

...