Appliquer Font a toutes les fenetres filles

Signaler
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Bonsoir,

Je me pose une question : Est il possible d'appliquer une police similaire a toutes les fenetres filles en ne faisant appel qu'a une seule fonction ? Je m'explique : pour le moment, je dois envoyer le message WM_SETFONT a tous les controles, et juste par curiosité, j'aurais aimé savoir si une fonction permettait de faire ceci toute seule..

Merci a tous

+2(p - n)

4 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Salut,
Tu peux utiliser EnumChildWindows, et dans EnumChildProc tu envoie WM_SETFONT à la fenêtre. Ca t'évite au moins de modifier ton code à chaque fois que tu ajoute/supprime un controle
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
Moi aussi je cherchais une telle fonction mais sans rien trouver. Ce serait très pratique si Microsoft l'ajoutait. Pour appliquer une police à tous les controles d'une fenêtre d'un seul coup, il y'a deux solutions en plus de celle proposée par vecchio56.
1- Les handles de tous les controles sont mis dans un tableau à leur création. Ca rend le code moins lisible mais permet d'envoyer le message à tous ces controles en une seule ligne:
for (int i=0; i<n;i++) SendMessage(hnd[i],WM_SETFONT,.....

n est le nombre total des controles (hdn[n])
2- L'emploi de la fonction GetWindow:
HWND hnd[10];
hnd[0]=GetWindow(hWnd,GW_CHILD);
SendMessage(hnd[0],WM_SETFONT,.......
for (int i=1;i<10;i++)
{
hnd[i]=GetWindow(hnd[i-1],GW_HWNDNEXT);
if (hnd[i]) SendMessage(hnd[i],WM_SETFONT,.......
}  

Selon MSDN, EnumChildWindows() est péférable car GetWindow() risque de boucler à l'infini dans certains cas. Ca ne m'est pas encore arrivé donc je ne connais pas ces cas.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
J'ai oublié d'ajouter qu'on peut remplacer GetWindow() par FindWindowEx() comme ceci:
hnd[0]=FindWindowEx(hWnd,0,0,0);//1er_appel
hnd[i]=FindWindowEx(hWnd,hnd[i-1],0,0);//dans_boucle
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ok merci a tt les 2, mais pour un peu plus d'une demi douzaine de controles, jvais continuer l'envoi systématique de WM_SETFONT, ou je verrais ca ptet plus tard..

Merci encore

+2(p - n)