IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC] mise en page d'une impression


Sujet :

MFC

  1. #1
    Membre régulier
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 85
    Points
    85
    Par défaut [MFC] mise en page d'une impression
    Bonjour,

    Dans une application de type WordPad, je tente de permettre à l'utilisateur de pouvoir régler le setup de l'imprimante et des pages.

    Pour cela, je fais appel à la classe CPageSetupDialog.

    Aussi quand l'utilisateur clic sur Fichier/Print Setup ....
    je fais appel à la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    void CEditPvApp::OnFilePrintSetup() 
    {
    	// TODO: Add your command handler code here
     
       CPageSetupDialog psd( PSD_INHUNDREDTHSOFMILLIMETERS | PSD_MARGINS,
    							AfxGetApp()->GetMainWnd());
     
       // Initialize margins
       // margeTop à margeBottom : variables de la classe principale
       psd.m_psd.rtMargin.top = margeTop ;
       psd.m_psd.rtMargin.left = margeLeft ;
       psd.m_psd.rtMargin.right = margeRight ;
       psd.m_psd.rtMargin.bottom = margeBottom ;
     
       if( IDOK == psd.DoModal() ) 
       {
    	  // Propagate changes to the app
          AfxGetApp()->SelectPrinter(psd.m_psd.hDevNames, psd.m_psd.hDevMode);
     
    	  // mémorisation des marges saisies par l'utilisateur
    	  margeTop = psd.m_psd.rtMargin.top ;
    	  margeLeft = psd.m_psd.rtMargin.left ;
    	  margeRight = psd.m_psd.rtMargin.right ;
    	  margeBottom = psd.m_psd.rtMargin.bottom ;	 
     
       }
       else
          TRACE("CommDlgExtendedError returned error %d from CPageSetupDialog::DoModal().\n",
             (int)CommDlgExtendedError() );
     
    }
    1- traitement des marges :
    Comme je le souhaitai, j'obtiens bien une boîte de dialogue me permettant de gérer les options telles que marges et orientation papier (+ imprimante bien sur).
    Quand la fonction est finie et que je lance soit une impression soit une prévisualisation je me rend compte que les marges ne sont pas prises en compte... Mais par contre on tient bien compte de l'orientation choisie.

    -> Auriez vous une idée sur le problème ?

    2- mémorisation de l'orientation papier choisie par l'utilisateur
    Autre disfonctionnement, quand je rentre dans cette boîte de dialogue c'est l'orientation portrait qui est choisie. Si je sélectionne l'orientation paysage pui que je sors et que je rerentre dans la boîte, c'est toujours l'orientation portrait qui est sélectionnée.

    -> comment puis je initialiser la sélection sur la dernière orientation sélectionnée par l'utilisateur ?

    (pour les marges, je mémorise leur valeur dans des variables de la classe puis j'initialise la boîte de dialogue avant de mettre DoModal. Je pensais faire de même mais je n'arrive pas à récupérer la variable qui me permettra de connaître le choix utilisateur.


    Merci beaucoup de votre aide

    Alice
    Alice

    A coeur vaillant, rien d'impossible !

  2. #2
    Membre régulier
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 85
    Points
    85
    Par défaut [MFC] - re impression et setup
    pour la 2nd partie de mon problème :

    j'ai réussi à récupérer la valeur de l'orientation du papier par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    psd.GetDevMode()->dmOrientation
    sachant que dmOrientation peut prendre soit la valeur DMORIENT_PORTRAIT soit la valeur DMORIENT_LANDSCAPE

    maintenant je recherche comment initialiser la boîte de setup avec une orientation papier soit portrait soit paysage et non pas par défaut portrait.

    Voilà si d'ici la prochaine vous auriez des infos à me soumettre je suis preneuse !!!

    Merci

    Alice
    Alice

    A coeur vaillant, rien d'impossible !

  3. #3
    Membre régulier
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 85
    Points
    85
    Par défaut suite et fin
    Pour la question 1,

    c'est résolu, la variable psd.m_psd est mise à jour dans doModal.

    Puis il faut passer les résultats des marges dans la partie View de l'application et plus précisemment dans la fonction commune à OnDraw et OnPrint :

    On prepareDc

    A +


    Alice
    Alice

    A coeur vaillant, rien d'impossible !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Définir la mise en page d'une impression
    Par jamesleouf dans le forum JSF
    Réponses: 1
    Dernier message: 13/02/2012, 15h37
  2. Mise en page avec une feuille de style
    Par leroivert dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/11/2005, 11h39
  3. Réponses: 2
    Dernier message: 20/09/2005, 15h10
  4. problème de mise en page d'une zone de liste
    Par audrey_desgres dans le forum Access
    Réponses: 26
    Dernier message: 24/06/2005, 09h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo