Fonte d'un contôle non ownerdraw

Résolu
rachid1245 Messages postés 16 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 20 avril 2011 - 18 août 2008 à 13:13
rachid1245 Messages postés 16 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 20 avril 2011 - 19 août 2008 à 11:26
Bonjour à tous



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Voilà, je dispose d’une formview  avec différents contrôles.


Je dispose également d’une classe Cresizer qui me permet de redimensionner les contrôles en fonction de la dimension de fenêtre parent (formview). Les contrôles sont redimensionnés parfaitement lorsque je change les dimensions de la formview.


Quand je maximise la fenêtre, les contrôles changent de dimensions et deviennent  "plus grands" et parfois la taille de la fonte utilisée n’est plus adaptée aux nouvelles dimensions.


Pour changer les fontes des contrôles qui peuvent être ownerdraw j’utilise la fonction DrawItem dans laquelle je change la taille de la fonte en fonction de la dimension du contrôle recupérée dynamiquement dans DrawItemStruct.


Mon problème c’est pour un CEdit, je trouve moyen de changer la taille de sa fonte, mais pas de façon dynamique.


Quel message dois-je récupérer pour modifier la fonte dans son handler de façon que la fonte colle parfaitement aux dimensions du contrôle de foçon dynamique.


Je travaille avec MFC.


Merçi d’avance


 

3 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
18 août 2008 à 20:12
Salut,

il suffit de stocker un CFont dans ta classe FormView et d'utiliser la méthode SetFont de CEdit :
CEdit::SetFont(pfont, TRUE);  // TRUE pour bRedraw

dans la classe FormView :
CFont* m_pfont;

Dans le OnSize du FormView :

Si dimention du controle Cedit > ratio
{
   if( m_pfont )
   {
      if( m_pfont->m_hObject ) m_pfont->DeleteObject();
      delete m_pfont;
   }
   m_pfont = new CFont;
   m_pfont->CreateFont(TAILLE_RATIO, ect...);
   m_edit.SetFont(m_pfont, TRUE);
}
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 août 2008 à 17:36
Salut,
En API (sans MFC) il suffit d'envoyer au controle le message WM_SETFONT avec le handle de la police voulue. Exemple:
HFONT police=CreateFont(......);
SendMessage(hwndedit,WM_SETFONT,(WPARAM)police,0);
0
rachid1245 Messages postés 16 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 20 avril 2011
19 août 2008 à 11:26
Salut et merçi beaucoup pour les tuyaux,


Pour Racpp je précise que le problème n’est pas de changer de font pour le contrôle edit,


J’ai une fonction « SetAdjustedFont() » qui va chercher les dimensions de l’edit et en fonction de la longueur maximale de la chaine de caractère qu’on compte y saisir, va calculer la bonne taille de fonte adaptée pour une très bonne harmonie du texte avec le contrôle.



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Le problème c’est qu’il faut que cette fonction soit appelée automatiquement à chaque fois que le contrôle est redimensionné.



 




Yann_lo_san a donné le bon tuyau il faut appelé cette fonction dans le OnSize de la fenêtre parent


Ca marche parfaitement



 




Merçi beaucoup.



 
0
Rejoignez-nous