[MFC/VC++] CScrollView/Garder une taille de police constante

CScrollView/Garder une taille de police constante [MFC/VC++] - C++ - Programmation

Marsh Posté le 15-10-2004 à 07:52:54    

Bonjour,  
 
Voici mon probleme.  
 
Mon appli est basée sur une CScrollView, avec un zoom personnalisé.  
 
Pour la gestion du zoom, j'tilise entre autre dans mon OnPrepareDC ces appels:  
 
 

Code :
  1. pDC->SetMapMode(MM_ISOTROPIC);
  2. pDC->SetWindowExt(m_totalLog);
  3. pDC->SetViewportExt(m_totalDev);


 
En faisant grossir m_totalDev pour obtenir l'effet de zoom désiré.  
 
Seulement, lorsque dans mon OnDraw, je créée une police, la sélectionne et écrit avec, je n'obiens pas un effet constant, la taille logique de la chaine de caractere semblant changer legerement entre les differents niveaux de zoom.  
 
Ainsi, dans mon OnDraw(),  
 

Code :
  1. CFont fnt;
  2. fnt.CreateFont(45, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_SWISS+VARIABLE_PITCH, "Courrier" );
  3. CFont* pOldFont = pDC->SelectObject(&fnt);
  4. pDC->TextOut(0,0, "ppda" );
  5. CSize size = pDC->GetTextExtent("ppda" );


 
 
va me donner une taille oscillant legerement selon les niveaux de zoom,  
88,45 au début, puis 90.45, etc, etc...ce qui fait que mon affichage differe legerement selon le niveau de zoom (par exemple, le texte va sortir de son cadre, etc...)  
 
Est ce normal?

Reply

Marsh Posté le 15-10-2004 à 07:52:54   

Reply

Marsh Posté le 18-10-2004 à 09:02:47    

Choisi une autre fonte, où remplace OUT_DEFAULT_PRECIS par OUT_TT_PRECIS ou OUT_TT_ONLY_PRECIS pour forcer une fonte TrueType.

Reply

Marsh Posté le 18-10-2004 à 09:42:49    

dans a écrit :

Choisi une autre fonte, où remplace OUT_DEFAULT_PRECIS par OUT_TT_PRECIS ou OUT_TT_ONLY_PRECIS pour forcer une fonte TrueType.


 
Je viens d'essayer de renplacer OUT_DEFAULT_PRECIS par OUT_TT_PRECIS ou OUT_TT_ONLY_PRECIS, mais le "symptome" ne disparait pas, j'ai toujours des tailles changeantes...
 
Par quelle police pourrais je essayer de remplacer on "Courrier"?
 
Ca fait en tout cas plaisir de voir une reponse arriver...

Reply

Marsh Posté le 18-10-2004 à 10:40:10    

> Par quelle police pourrais je essayer de remplacer on "Courrier"?  
 
"Courier New" est TTF. Et la police Courier ne prend qu'un seul r au milieu.
A+,


Message édité par gilou le 18-10-2004 à 10:42:24

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-10-2004 à 10:52:11    

D'accord,
 
Meme en faisant :
 

Code :
  1. myFont.CreateFont(16, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET, OUT_TT_ONLY_PRECIS , CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_SWISS+VARIABLE_PITCH, "Courier" );


 
Ca ne change rien...

Reply

Marsh Posté le 18-10-2004 à 13:56:31    

Oui, Courier etant une fonte a taille(s) fixe c'est pas étonnant. Et si tu essayais ce que je t'ai dit: "Courier New"...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-10-2004 à 14:15:38    

Oups, je n'avais pas vu la nuance.
 
Je viens donc d'essayer avec "Courier News" et...le probleme reste le meme.
 
Pour info, voici ce que me donne ma fenetre de Debug :
 

Code :
  1. [904] Text Extent: <100 45>
  2. [904] Text Extent: <99 45>
  3. [904] Text Extent: <102 45>


 
lorsque je fais dans mon Ondraw:
 

Code :
  1. pDC->TextOut(0,0, "ppda" );
  2. CSize size = pDC->GetTextExtent("ppda" );
  3. TRACE("Text Extent: <%d %d>\n", size.cx, size.cy);


 
Et ce, apres trois zooms successifs.
 
Vous voyez donc, la meme chaine prends trois tailles logiques différentes alors qu'elle ne devrait pas...
Pour info, je sélectionne ma fonte dans mon DC lors du OnPrepareDC (mais je ne pense pas que ca change grand chose)

Reply

Marsh Posté le 18-10-2004 à 15:47:37    

Changes le parametre FF_SWISS par FF_MODERN dans ton code, car le Courier New est associe a ce parametre.  
Je ne pense pas que ca aie une grande influence, mais sait on jamais...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-10-2004 à 16:17:23    

Nan, tu l'as bien pressenti: ca n'a aucune influence.
 
Je suis vraiment étonné d'etre confronté a ce type de probleme! Je ne parviens pas a comprendre le pourquoi du comment...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed