1

OnFilePrint() を呼び出す CView から派生したクラスがありますが、印刷ダイアログに入力した数に関係なく、1 つのコピーしか印刷されないように見えます。これは既知のバグですか、それとも何か間違っていますか?

独自の 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" 回要求しないようにするにはどうすればよいですか?

助けてくれてありがとう!

4

1 に答える 1

1

最近のバージョンのWindowsは、プリントプロセッサでコピーを処理し、プログラムの負担を軽減することを期待していました(バンディングプリンターの場合と同じように)。しかし、あなたの質問はそうではないことを示唆しています。

私の記憶はさびていますが、覚えているように、一部のプリンタ(またはそのドライバ)はコピーを作成しますが、他のプリンタはそれを実行するためにプログラムを必要とします。ダイアログは、DEVMODEのdmCopiesフィールドを設定することにより、ユーザーの意図をキャプチャします。

次に、プログラムはドライバーに複数のコピーをサポートしているかどうかを確認する必要があります。含まれている場合は、DEVMODEを渡すだけです。そうでない場合は、表示したようなループが必要です(そして、DEVMODE dmCopiesフィールドを1にリセットします)。

コピーをサポートしているかどうかをドライバーに尋ねる方法を忘れています。おそらく、デフォルトのDEVMODEのdmFieldsでDM_COPIESビットが設定されているかどうかを確認する必要があります。古き良き16ビット時代には、多くのドライバーがコピーをサポートしていると主張していましたが、実際にはサポートしていなかったことを覚えています。当時私が取り組んでいたアプリケーションには、コピーはできるができなかったというドライバーのリストがありました。

于 2011-12-05T22:18:56.603 に答える