Communication dynamique entre contrôles et fenêtre parent

Résolu
rachid1245 Messages postés 16 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 20 avril 2011 - 15 avril 2009 à 19:03
rachid1245 Messages postés 16 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 20 avril 2011 - 17 avril 2009 à 18:10
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2009 à 20:18
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++
3
rachid1245 Messages postés 16 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 20 avril 2011
16 avril 2009 à 12:39
Merçi beaucoup effectivement
c'est simple.
0
rachid1245 Messages postés 16 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 20 avril 2011
17 avril 2009 à 18:10
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;
0
Rejoignez-nous