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 :

Calcul pour impression multipage


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �m�rite

    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2005
    Messages
    634
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par d�faut Calcul pour impression multipage
    Hello,

    J'ai h�sit� � post� ici ou sur le forum algorithmie mais comme c'est quand m�me au sujet des MFC.. J'ai une question assez bizarre j'esp�re que vous la comprendrez.

    Je suis en train d'apprendre les MFC avec le bouquin Visual C++ de Ivor Horton. Je fais donc un logiciel de dessin qui est comme exemple dans le bouquin. J'en suis � l'impression du document et je dois faire mes evenements pour imprimer sur plusieurs pages. Sauf que je ne comprends vraiment pas (c'est la 1�re fois que ca m'arrive , ou alors je suis vraiment endormi ??) leurs formules.

    Voici le dessin associ�:


    et le code de l'�venement OnPrint:
    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
    32
    33
    34
    // Imprime une page du document
    void CSketcherView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
    {
    	CPrintData* pPrintData = static_cast<CPrintData*>(pInfo->m_lpUserData);
     
    	// Sortie du nom de fichier du document
    	pDC->SetTextAlign(TA_CENTER);		// Centre le texte suivant
    	pDC->TextOut(pInfo->m_rectDraw.right/2, -20, pPrintData->m_DocTitle);
     
    	// Justifie le texte à gauche
    	pDC->SetTextAlign(TA_LEFT);
     
    	// Calcule l'origine de la page en cours
    	int xOrg = pPrintData->m_DocRefPoint.x +
                      600 * ((pInfo->m_nCurPage - 1)%
                          (pPrintData->m_nWidths));
    	int yOrg = pPrintData->m_DocRefPoint.y -
                      900 * ((pInfo->m_nCurPage - 1)/
                          (pPrintData->m_nWidths));
     
    	// Calcule le décalage par rapport à la zone de dessin centrale comme valeur positive
    	int xOffset = (pInfo->m_rectDraw.right - 600) / 2;
    	int yOffset = -(pInfo->m_rectDraw.bottom + 900) / 2;
     
    	// Remplace l'orgine de la fenêtre par celle de page en cours et enregistre l'ancienne origine
    	CPoint OldOrg = pDC->SetWindowOrg(xOrg - xOffset, yOrg + yOffset);
     
    	// Définit un rectangle de découpage de la taille de la zone imprimée
    	pDC->IntersectClipRect(xOrg, yOrg, xOrg + 600, yOrg - 900);
     
    	OnDraw(pDC);				// Dessine le document entier
    	pDC->SelectClipRgn(NULL);	// Supprime le rectangle de découpage
    	pDC->SetWindowOrg(OldOrg);	// Restaure l'ancienne origine de la fenêtre
    }
    Pourquoi pour trouver xOrg ils font un modulo avec le nombre de page-1 et pour yOrg une division?? J'ai copi� comme suis le code mais �a me tracasse le pourquoi du comment...

    J'esp�re ne pas avoir �t� trop long merci d'avance! 8)

  2. #2
    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
    int xOrg = pPrintData->m_DocRefPoint.x +
    600 * ((pInfo->m_nCurPage - 1)%
    (pPrintData->m_nWidths));

    ce code te donne la limite gauche de la zone que tu vas imprimer pour la page en cours. sachant que pPrintData->m_nWidths=4 ca donne

    (de 0 � 7) % 4 soit 0, 1, 2, 3, 0, 1, 2, 3 ou, apres multiplication,
    0 , 600, 1200, 1800, 0 , 600, 1200, 1800 .
    on a donc bien les differentes positions horizontales origines correspondants � chaque d�but de page.

    pour la coordonn�e verticale, elle represente l'origine haute de la zone a dessiner pour la page en cours.
    on a
    int yOrg = pPrintData->m_DocRefPoint.y -
    900 * ((pInfo->m_nCurPage - 1)/
    (pPrintData->m_nWidths));

    soit, entier( (de 0 � 7)/4) , ce qui donne 0 , 0, 0, 0, 1, 1, 1, 1
    c'est le resultat sous forme entiere de la division qui tronque ..

    donc, apres, multipli� par la hauteur de chaque page, ca te donne effectivement l'origine haute de la zone a dessiner pour la page actuelle..
    le probleme du dessin de ton bouquin, c'est qu'il a voulu expliquer plusieurs etapes sur le meme dessin, sans preciser vraiment ..

  3. #3
    Membre �m�rite

    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2005
    Messages
    634
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par d�faut
    Ah d'accord effectivement, merci je comprends beaucoup mieux comme �a .

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [VBA] Calcul pour ins�rer dans une textebox
    Par Yanmeunier dans le forum IHM
    R�ponses: 13
    Dernier message: 15/03/2006, 16h38
  2. [FPDF] G�n�ration d'un document pour impression
    Par Sandkura dans le forum Biblioth�ques et frameworks
    R�ponses: 11
    Dernier message: 13/02/2006, 15h06
  3. page pour impression
    Par maximenet dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 3
    Dernier message: 03/01/2006, 10h23
  4. Retourner de 90� contenu [Edit] ou [Label] pour impression
    Par Dro�de Syst�me7 dans le forum Composants VCL
    R�ponses: 13
    Dernier message: 05/11/2005, 23h10
  5. feuille pour impression
    Par Sha�na dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 7
    Dernier message: 06/06/2005, 16h21

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