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 :lol: ??) leurs formules.
Voici le dessin associ�:
http://www.ottet.ch/fiquet/images/Visual.gif
et le code de l'�venement OnPrint:
Code:
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... :D
J'esp�re ne pas avoir �t� trop long merci d'avance! 8)