Taille d'un CView pour impression A4 [Résolu]

universaliss 5 Messages postés samedi 23 août 2008Date d'inscription 17 mars 2011 Dernière intervention - 15 mars 2011 à 17:23 - Dernière réponse : universaliss 5 Messages postés samedi 23 août 2008Date d'inscription 17 mars 2011 Dernière intervention
- 17 mars 2011 à 10:56
Bonjour,
Je suis actuellement bloqué dans le développement d'un petit programme en mode SDI.

Je suis actuellement face à mon CView sur lequel je peux dessiner, une sorte d'ersatz de paint qui me permet de sauvegarder mes dessins et de les rouvrir.

Au moment de l'imprimer : SURPRISE !!!! le dessin est tout petit j'ai un problème de dimensionnement de mon CView surement dans le oninitialupdate() (peut être que je me trompe complètement...)

Je souhaiterai savoir qu'elle est la démarche pour pouvoir afficher un mon CView et avoir entièrement mais uniquement ma page a4 (voir a4 ou a5).

je pensais passer par une fonction du style :
GetParentFrame()->SetWindowPos(NULL,0,0,200,300,SWP_NOZORDER|SWP_NOMOVE);
mais d'une part les dimensions sont bien entendus mauvaises mais cela ne redimensionne que le frame "conteneur" qui en plus est étirable à volonté donc cela ne résout en rien le problème.

Pour simplifier je souhaiterai obtenir ma page à l'écran telle qu'elle sortira à l'imprimante.
Comment faire ? Quelles valeurs utiliser? quelle fonction?

Merci d'avance aux pro de la sdi ^^
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
ed73 276 Messages postés lundi 8 septembre 2008Date d'inscription 15 avril 2013 Dernière intervention - 16 mars 2011 à 14:51
3
Merci
Bonjour,

Il est normal que ton dessin soit tout petit sur l'imprimante si tu raisonnes en pixels. Il faut dessiner en fonction de la résolution de ta page, résolution qui peut varier selon l'imprimante ou sa configuration. L'idéal étant d'avoir le même code pour dessiner et pour imprimer en tenant compte de la taille et de la résolution de la page ou de l'écran.

Tu peux regarder les fonctions :

SetWindowOrg
SetWindowExt
SetViewportOrg
SetViewportExt
SetMapMode

La classe CDC implémente la méthode IsPrinting() qui peut te servir pour savoir si ton code est en train de dessiner ou d'imprimer.

Merci ed73 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de ed73
Meilleure réponse
universaliss 5 Messages postés samedi 23 août 2008Date d'inscription 17 mars 2011 Dernière intervention - 17 mars 2011 à 10:56
3
Merci
merci pour votre aide j'ai trouvé mon bonheur en tombant sur ce site :
Creating Single Document Interface Applications
ainsi que :
Printing With the Document/View Architecture, CDocument, CView
Ces sont tous les deux des tutoriaux bien détaillés qui mont permis de résoudre mes problèmes.
Si ça peut servir à quelqu'un d'autres....

Merci universaliss 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de universaliss
universaliss 5 Messages postés samedi 23 août 2008Date d'inscription 17 mars 2011 Dernière intervention - 16 mars 2011 à 16:50
0
Merci
merci pour ta réponse mais ces fonctions ne me permettent pas d'arriver au résultat voulu (peut être que je les utilisent mal mais c'est pas encore ça)
ces fonctions m'ont permis de modifier l'orientation et le positionnement des axes de référence mais j'ai toujours le même petit résultat en impression donc j'ai fais machine arrière.
peut être devrai-je m'orienté vers :
OnPreparePrinting, on begin et on end printing
des fonction qui sont encore dépourvues de code ... mais qu'en faire?

De plus je n'arrive toujours pas a restreindre mon cview à une certaine dimension (une page a4) il est toujours infini...
toujours dans l'impasse...
Si quelqu'un a ne serait ce qu'un morceau de code qui dessine un cadre d'un format a4 ça serait idéal pour comprendre tout ça...
D'avance merci !
Commenter la réponse de universaliss
cs_louis14 788 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 17 mars 2011 à 09:51
0
Merci
Bonjour,
Il faut chercher de l'aide sur MSDN pour la fonction IsPrinting() qui 'il faut utiliser dasn la fonction OnDrw() de ta CView.
Voilà un morceau de code que j'ai dasn un de mes projet:
if (pDC->IsPrinting())
{
rect.left rect.top 0;
rect.right = pDC->GetDeviceCaps(HORZRES);
rect.bottom = pDC->GetDeviceCaps(VERTRES);
m_Graph.SetPrintScale(pDC->m_hDC, rect);
}
else
GetClientRect(rect);

Bon codage


louis
Commenter la réponse de cs_louis14

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.