Bonjour,
J'aimerais savoir comment faire pour imprimer une vue (et non un fichier image bmp).
Julien.
Version imprimable
Bonjour,
J'aimerais savoir comment faire pour imprimer une vue (et non un fichier image bmp).
Julien.
une CFormView ne s'imprime pas ,sauf à utiliser l'impression par un bitmap de la form comme dans la faq (c'est une dialog, mais c'est pareil):
http://c.developpez.com/faq/vc/?page...PrintDialgoBox
si c'est une CView, si tu sais la dessiner tu sais l'imprimer :
http://c.developpez.com/faq/vc/?page...HowToPrintView
C'est une view que je veux imprimer : je la dessine bien avec OnDraw mais lorsque j'utilise la fonction "imprimer" par défaut, Visual C++ m'imprime la view en tout petit et je la voudrais en plein écran.
En parcourant le forum et la faq, j'ai essayé de modifier les fonctions OnFilePrint et OnBeginPrinting et de rajouter cela
mais ça ne marche pasCode:
1
2
3 pInfo->m_rectDraw.SetRect(0, 0, pDC->GetDeviceCaps(HORZRES), pDC->GetDeviceCaps(VERTRES));
ton mapmode est bien MM_TEXT ?
je n'avais pas mis le SetMapMode à MM_TEXT, j'ai donc rajouté
dans OnDraw mais ça ne change rienCode:pDC->SetMapMode(MM_TEXT);
alors si tout est ok ,tu dois te planter dans ton dessin.
celui-ci ne tient pas compte de la surface disponible...
sans voir le code on ne peut rien dire de plus.
Pour tenir compte de la surface disponible, j'utilise GetClientRect et ensuite je dessine en utilisant lpRect
c'est bien ça qu'il faut faire ?Code:
1
2
3
4
5
6 CRect lpRect; this->GetClientRect(lpRect); // exemple de tracé dans le dessin pDC->MoveTo(2*lpRect.right/5,0); pDC->LineTo(2*lpRect.right/5,18);
Que vient faire "lp" dans le nom ? :roll:
lpRect c'est le nom de l'objet de type CRect, j'aurais pu l'appeler julienRect ou medinocRect ...
Sauf qu'en programmation sous Windows, la convention utilisée dit que "lp" signifie "long pointer" (même si en 32bits, tous les pointeurs sont "longs")...
Donc, tu peux appeler ça julienRect si tu veux, mais pas lpRect ou pRect...
c'est bien ce que je disais, GetClientRect donne la surface de la fenetre client, pas la surface d'impression de l'imprimante...
il faudra distinguer le cas du dessin à l'ecran et celui de l'edition....
:D
d'accord, et comment peut-on modifier la surface de l'impression de l'imprimante en faisant en sorte qu'elle coincide avec la surface de la fenêtre client ?
non ça ne marche pas comme ça;
c'est toi qui doit adapter ton dessin en fonction de la surface d'impression...
:D
Dans ce cas, il faudrait agrandir énormément la taille de mon dessin et ça ne tiendra pas sur mon petit écran 15 pouces : il faudra utiliser des barres de défilement => CScrollView, or moi j'aimerais que mon dessin tienne entièrement sur mon écran, dans la fenêtre client ...
peux-tu me donner davantage de détails, je ne vois pas comment faire.