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 :

Problème d'impression MFC : échelle et résolution [FAQ]


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Par défaut Problème d'impression MFC : échelle et résolution
    Bonjour,

    je suis confronté à un soucis assez embêtant. J'ai une application MFC (type document vues) en C++ qui a pour principe de représenter des circuits hydrauliques.

    Le plan de travail à imprimer est composé de texte, d'éléments spécifiques à MFC (traits faisant office de liaisons) et de bitmaps (les composants).

    Le soucis, c'est que lors de l'impression (ou de l'aperçu avant impression) la résolution ne convient pas. En effet, la taille de la police est convenable, mais les caractères sont rapprochés et se superposent. Aussi, les bitmaps et les liaisons sont réduit à une taille exagérée rendant l'identification des composants impossible.
    De plus, lors de l'aperçu, l'ensemble de mon plan de travail (1600x1200 pixels) se situe dans le coin supérieur gauche de la page et occupe moins d'un quart de celle-ci.

    Voici le code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void OnBeginPrinting(CDC *pDC, CPrintInfo* pInfo)
    {
        pInfo.m_rectDraw.SetRect(0,0, 
                                dc.GetDeviceCaps(HORZRES), 
                                dc.GetDeviceCaps(VERTRES));
     
        pDC->DLtoLP(&pInfo->m_rectDraw);
        POINT ptmargins;
        pDC->Escape(GETPRINTINGOFFSET, 0, NULL, &ptmargins);
     
        CScrollView::OnBeginPrinting(pDC, pInfo);
    }
    D'autres fonctions sont gérées automatiquement par MFC (OnPreparePrinting(...) et OnEndPrinting(...)).



    Auriez-vous des solutions ?
    Si oui, lesquelles ?

    Merci d'avance à tous ceux et toutes celles qui répondront

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    est ce que ton dessin tient bien compte de la surface de travaille (distinction entre le mode écran et impression) ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Par défaut
    Si j'ai bien compris la question, je pense pouvoir y répondre par ceci :

    Lorsque je redimensionne mon espace de travail en 100x100 pixels, et que je tente d'imprimer un seul composant, la taille d'impression n'est pas modifiée et le rendu est toujours aussi petit.


    Sinon, peux-tu me reformuler la question afin que j'y apporte la réponse qui va bien

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    en génénal on prepare l'echelle d'impression dans OnPrepareDC
    http://c.developpez.com/faq/vc/?page...HowToPrintView
    exemple de traitement:
    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
     
    void CSampleView::OnPrepareDC(CDC *pDC,CPrintInfo *pInfo)
    {
          int nScale=1;
          CScrollView::OnPrepareDC(pDC,pInfo);
          CMyDoc *pDoc=GetDocument();
          pDC->SetMapMode(MM_ANISOTROPIC);
          CSize DocSize=pDoc->GetDocSize();// la taille de ton document 
         DocSize.cy=-DocSize.cy;
         pDC->SetWindowExt(DocSize); // dimension de la fenetre.
        // nb pixels par pouce
        int xlgPix= pDC->GetDeviceCaps(LOGPIXELSX);
        int ylgPix= pDC->GetDeviceCaps(LOGPIXELSY);
        // calcul du viewport
        long xExt=static_cast<long>(DocSize.cx*nScale*xlgPix/100L);
        long yExt=static_cast<long>(DocSize.cy*nScale*ylgPix/100L);
     
       // dimension viewport.
       pDC->SetViewPortExt(static_cast<int>(xExt),
                                     static_cast<int>(yExt));
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Par défaut
    Merci beaucoup, le code était ce qu'il me fallait et l'application fonctionne parfaitement.

    Seul bémol : le plan de travail n'est pas imprimé en totalité. On ne peut imprimer que le contenu de ce qui apparait, à taille d'impression, sur la premire page.

    Ce qui revient à dire que tout élément représenté au dela d'une certaine abscisse n'apparaitra pas au moment de l'impression.

    On pourrait corriger cela en permettant l'impression sur plusieurs pages. Mais l'idéal serait de réduire légèrement le rendu de l'impression. J'ai tenté d'apporter quelques modifications, mais sans réel succès (les composants ne peuvent plus être disposés sur le plan).

    Je vais continuer à chercher, mais si quelqu'un a une solution à me proposer, je suis preneur !!

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    dans ce cas GetDocSize() devrait renvoyer la taille totale du plan de travail et pas uniquement la taille de la fenêtre (GetTotalSize() dans la scrollview ?)...

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

Discussions similaires

  1. [C#] Problème d'impression en échelle de gris
    Par ClaudeBg dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/04/2009, 12h56
  2. MFC : Problèmes d'impression...
    Par Sojiro dans le forum MFC
    Réponses: 3
    Dernier message: 10/04/2006, 22h47
  3. Réponses: 16
    Dernier message: 17/03/2005, 13h54
  4. [Rave] problème d'impression
    Par romstarr dans le forum Rave
    Réponses: 2
    Dernier message: 09/06/2004, 15h48
  5. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37

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