Communication dynamique entre contrôles et fenêtre parent [Résolu]

Signaler
Messages postés
16
Date d'inscription
lundi 11 septembre 2006
Statut
Membre
Dernière intervention
20 avril 2011
-
Messages postés
16
Date d'inscription
lundi 11 septembre 2006
Statut
Membre
Dernière intervention
20 avril 2011
-
Voilà
j'ai une fenêtre qui contient 6 contrôles
le 6ème contrôle contient un résultat qui dépend des valeurs des cinq autres contrôles
je voudrais qu'au moindre changement sur l'un des cinq contrôles, le résultat dans le sixième contrôle est mis à jour de façon dynamique et automatique sans avoir à déclencher cette mis àjour.
en termes plus technique comment procéder pour la fenêtre parent soit informée du moindre changement sur ces contrôles.

Merçi d'avance

3 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
La fenetre parent est informée de tout ce qui se passe dans les controles 'child' par les messages systeme.
Suffit de les traiter.
Valeur change dans un EDIT -> parent reçoit un EN_CHANGE.

Voir les messages de notification de chaque controle dans MSDN.

ciao...
BruNews, MVP VC++
Messages postés
16
Date d'inscription
lundi 11 septembre 2006
Statut
Membre
Dernière intervention
20 avril 2011

Merçi beaucoup effectivement
c'est simple.
Messages postés
16
Date d'inscription
lundi 11 septembre 2006
Statut
Membre
Dernière intervention
20 avril 2011

Pour que d'autres en profitent:
j'explique le procès
mon contrôle child est de classe dérivée d'un Edit
la classe de ce contrôle traite un message réfléchis  =EN_CHANGE
dans le message map il donc la macro correspondante
ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
OnChange étant la fonction de traitement du message

pour que ma fenêtre parent réagit au changement dans le contrôle je dois traiter dans cette
fenêtre également le message EN_CHANGE
cela donne dans le message map de la fenêtre parent
ON_EN_CHANGE(IDC_CTRL, OnChangeControl)

alors pour que le message EN_CHANGE soit également traité par la fenêtre parent
il y'a quelque petites modifcations à apporter à tout cela
d'abord on remplace:
ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
par :
ON_CONTROL_REFLECT_EX(EN_CHANGE, OnChange)
quant à la fonction OnChange
qui était du type:
afx_msg void OnChange();
elle doit être du type
afx_msg BOOL OnChange();
de plus elle doit retourner FALSE pour que le message soit traité par la fenêtre parent.

il subsiste cependant un petit problème
comme je demande à ma fenêtre parent de vérifier les données du contrôle lorsqu'elle recoit le message
EN_CHANGE et d'afficher un message d'erreur au cas ou les données. j'ai l'impresson qu'elle vérifie ces données avant même que la fenêtre soit affichée.
il suffit pour éviter celà faire un test d'affichage de la fenêtre au début dans l'inpléméntation (parent ) de EN_CHANGEpar exemple if (!IsWindowVisible) return;