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

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

  7. #7
    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
    Je viens de tenter en utilisant GetTotalSize, aucune am�lioration.

    En fait, le soucis ne provient pas de la d�finition de la zone � imprimer, mais � priori de la taille de cette zone sur la feuille. En effet, un composant plac� trop � droite n'apparaitra pas � l'impression, mais si l'on passe l'impression en mode paysage, s'il n'est pas trop sur la droite, il apparaitra.

    Il y'a donc selon moi 2 solutions � envisager :
    - permettre � l'impression de s'effectuer sur plusieurs pages
    - r�duire la taille du document sur la feuille qui sera imprim�e de telle fa�on qu'il s'y repr�sente en totalit�



    Si jamais aucune de ces solutions ne pouvait �tre envisag�e, l'utilisation �ventuelle du mode paysage pourrait �tre une issue de secours satisfaisante.

  8. #8
    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
    le multi page pourrait �tre une bonne solution .

  9. #9
    Membre tr�s actif
    Profil pro
    D�veloppeur ind�pendant
    Inscrit en
    Ao�t 2004
    Messages
    374
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur ind�pendant
    Secteur : Transports

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 374
    Par d�faut bug,...
    bonjour,
    j'ai un systeme d'impression multi pages qui fonctionne, sous visualC++6,
    et en regardant le code post� par farscape, je me suis dit que l'exemple onprepareDC post� par farscape pourrait me sortir d'une bizarrerie ponctuelle..
    hors, lors de la compilation, j'ai ce message d'erreur.
    'SetViewPortExt' : is not a member of 'CDC'
    C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE\afxwin.h(636) : see declaration of 'CDC'
    mais j'utilise le CDC partout dans le code d'impression, pour dessiner, creer des fonts GDI, etc.., sauf cette fameuse fonction 'SetViewPortExt' ,
    d'ou ma grosse interrogation, est-ce que je n'utilise pas depuis longtemps la mauvaise librairie ou les mauvais include.?

    mon soucis est que j'ai un GROS projet qui inclut des librairies comme libmysql, ENET, chilkatlib et autres, et j'ai envisag� de passer en visual 2005, mais le travail est monstrueux..
    donc, est-ce qu'il existe un moyen ou des resources centralis�es pour avoir des includes et librairies � jour pour visualC++6 ??

    parceque sur ma machine de dev, bien sur, j'ai install�e aussi le visual 2005 et 2008...
    donc je me demande aussi si ces installations n'ont pas pourries les includes..
    voila..
    Merci � tous ceux qui voudront bien reflechir � ce probleme,
    j'ai vraiment besoin d'aide sur ce coup la, j'arrive pas � trouver de solution..

  10. #10
    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,
    alors pour visual 6.0 il faut le dernier service pack 6 (si je ne me trompe pas).
    apr�s il faut installer le dernier sdk pour visual 6.0
    faq: http://cpp.developpez.com/faq/vc/ind...age=IDE#SDKVC6
    logiquement il n'y a pas de m�lange possible en vc6 et visual 2005 ; j'ai travaill� comme �a pendant des ann�es .
    si il y a m�lange c'est qu'il y a eu un mauvais r�glage manuel (intentionnel)

    mais bon c'est reculer pour mieux sauter:
    xp arrive en fin de support en juillet 2010 ,
    pour avoir fait l'essai visual6.0 ne tourne plus sous seven , ni sous le mode xp mode.
    Visual 2010 pointe son nez vers fin avril (j'ai d'ailleurs un article en cours sur le sujet ) ...
    il est temps de passer � autre que vc6.0
    si tu n'utilises pas trop la STL dans ses subtilit�s la transition est assez indolore : http://farscape.developpez.com/tutor...on-vc6-vc2005/

    @+

  11. #11
    Membre tr�s actif
    Profil pro
    D�veloppeur ind�pendant
    Inscrit en
    Ao�t 2004
    Messages
    374
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur ind�pendant
    Secteur : Transports

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 374
    Par d�faut alors, avec un peu de recul
    ben en fait, je suis sous seven depuis un moment, et en fait, j'ai toujours visualC++6, oui je sais, masi probleme d'evolution des sources trop gigantesque.
    donc, le truc, c'est d'installer seven en 32 bits..
    la on peut installer tout.
    et en particulier visualc++6 .
    on pourrait croire que c'est limitatifs, mais je n'ai trouve aucun programme soi disant 64 bits qui ne puisse fonctionner.

    et au moins je conserve la compatibilite totale, meme pour des programmes susceptibles de devoir tourner sur des vieux windows3.1 comme sur les derniers seven.
    vala..

+ 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