IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

MFC Tuto: modifier le comportent de OnChange pour CRichEditCtrl, CEdit...


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut MFC Tuto: modifier le comportent de OnChange pour CRichEditCtrl, CEdit...
    Bonjour,

    Voila, je cherche a modifier le comportement des classes CEdit/CRichEditCtrl (peu importe). Je bloque sur un point de comprehension:
    -je derive une classe CEdit, par exemple MonCEdit
    -je modifie le comportement de OnChange dans cette classe de sorte que la valeur "valide" de mon controle ne soit ok que quand j'ai tape "return". Alors j'aimerais que lorsque le 'return' est tape, alors il y ait un message (ou autre) qui permette de recuperer la valeur "valide".

    Ma question est: comment faire pour que dans mon appli qui utilise des instances de MonCEdit, je puisse recuperer la valeur valide seulement lorsque l'utilisateur a entre 'return'?... (je sais pas si je suis tres clair... )

    En gros je pensais a un truc du style: ma classe MonCEdit gere le OnChange() et un fois que le 'return' valide l'entree, alors il envoie un message a son parent (la ou j'ai mon instance de la classe) qui l'intercepte et qui execute une fonction OnChangeBlaBla. Je pense utiliser un truc du genre ON_NOTIFY, mais c'est pas tres clair pour moi comment ca marche...

    Merci d'avance pour votre aide!

  2. #2
    NairodDorian
    Invité(e)
    Par défaut
    Faut traité le message WM_CHAR.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Bon ca y est j'ai resolu mon probleme!!

    Voila comment j'ai fait (je precise je suis sous VC6):

    1/ Ajouter une nouvelle classe vaec le Class Wizard, par exemple CMonEdit, qui va etre derive de CRichEditCtrl par exemple.

    2/ Dans CMonEdit.h, aller a la fin de la definition de la classe et trouver ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    protected:
    	//{{AFX_MSG(CMonEdit)
    	//}}AFX_MSG
    ...et les remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected:
    	//{{AFX_MSG(CMonEdit)
    	afx_msg BOOL OnChange();
    	//}}AFX_MSG
    3/ Dans CMonEdit.cpp, trouver ces lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN_MESSAGE_MAP(CMonEdit, CRichEditCtrl)
    	//{{AFX_MSG_MAP(CMonEdit)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    ...et remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BEGIN_MESSAGE_MAP(CMonEdit, CRichEditCtrl)
    	//{{AFX_MSG_MAP(CMonEdit)
    	ON_CONTROL_REFLECT_EX(EN_CHANGE, OnChange)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    4/ Toujours dans CMonEdit.cpp, implementer la fonction OnChange():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    BOOL CMonEdit::OnChange() 
    {
    	...
    	if (...)
    	{
    		// si on veut mettre une condition speciale avant de
    		// notifier le parent du message EN_CHANGE
    		...
    		return FALSE;
    	}
    	...
    	return TRUE;
    }
    5/ Dans votre appli, creez une instance du controle (par ex. m_MonCEdit) en prenant soin qu'elle soit de la classe CMonEdit dans le Class Wizard.

    6/ Toujour dans le Class Wizard, mappez le message EN_CHANGE pour votre controle m_MonCEdit... Et voila!

    Bon j'ai ecrit ca au vol, donc je garantis pas tout l'exactitude des etapes, mais ca devrait marcher avec ce qui est ecrit.

    Derniere remarque: si vous mappez le message EN_CHANGE directement a partir du Class Wizard pour votre classe CMonEdit fraichement cree, vous verrez que dans CMonEdit.h, on trouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected:
    	//{{AFX_MSG(CMonEdit)
    	afx_msg void OnChange();
    	//}}AFX_MSG
    (notez la difference "void" et "BOOL" du retour de la fonction)

    ...et dans CMonEdit.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BEGIN_MESSAGE_MAP(CMonEdit, CRichEditCtrl)
    	//{{AFX_MSG_MAP(AS4_CommandConsole)
    	ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    (notez la difference entre 'ON_CONTROL_REFLECT' et 'ON_CONTROL_REFLECT_EX')

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser onchange pour modifier le formulaire
    Par zerros dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/11/2010, 13h38
  2. Modifier le PATH une fois pour toute
    Par elitost dans le forum Linux
    Réponses: 8
    Dernier message: 06/09/2009, 13h21
  3. MFC, tuto pour débutant
    Par Dralex dans le forum MFC
    Réponses: 18
    Dernier message: 16/02/2009, 10h30
  4. [D7] Modifier le comportement d'un FieldKind = fklookup
    Par Débéa dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/01/2006, 12h31
  5. Réponses: 3
    Dernier message: 19/08/2005, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo