Question

J'ai une classe qui dérive de CView qui appelle OnFilePrint (), mais il semble qu'une seule copie soit imprimée quel que soit le nombre que j'en saisis dans la boîte de dialogue d'impression.Est-ce un bug connu ou est-ce que je fais quelque chose de mal?

Je pourrais potentiellement créer mon propre CPrintDialog, mais je ne sais pas trop comment le faire faire "l'impression" pour ainsi dire.Quelque chose du genre de ce qui suit?

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??

Que me manque-t-il?De plus, si l'utilisateur sélectionne une imprimante PDF, comment pourrais-je empêcher le code de l'inviter à indiquer l'emplacement d'enregistrement du fichier "nCopies" fois?

Merci pour l'aide!

Était-ce utile?

La solution

Je me serais attendu à ce que n'importe quelle version moderne de Windows gère les copies dans le processeur d'impression et soulage le programme du fardeau (comme c'est le cas avec les imprimantes à bandes). Mais votre question suggère le contraire.

Ma mémoire est rouillée, mais, si je me souviens bien, certaines imprimantes (ou leurs pilotes) feront des copies, mais d'autres nécessitent le programme pour le faire. La boîte de dialogue capture l'intention de l'utilisateur en définissant le champ dmCopies dans DEVMODE.

Le programme doit ensuite vérifier auprès du pilote s'il prend en charge plusieurs copies. Si c'est le cas, passez simplement le DEVMODE. Si ce n'est pas le cas, vous avez besoin d'une boucle comme celle que vous avez affichée (et vous réinitialisez le champ DEVMODE dmCopies à 1).

J'oublie comment demander au pilote s'il prend en charge les copies. Cela a peut-être à voir avec la vérification si le bit DM_COPIES est défini dans les dmFields du DEVMODE par défaut. Je me souviens que dans le mauvais vieux temps 16 bits, beaucoup de pilotes prétendaient prendre en charge les copies mais ne le faisaient pas réellement. L'application sur laquelle je travaillais à l'époque contenait une liste de pilotes indiquant qu'ils pouvaient faire des copies mais qu'ils ne pouvaient pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top