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 :

sous-classage CEdit Control


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut sous-classage CEdit Control
    Bonjour,

    Ma question concerne le sous-classage "dynamique" de controle.

    Par ex :
    J'ai un CEdit dans une CDialog. Je veux (et ce n'est que pour illustrer ce que je veux réaliser) empêcher l'utilisateur de rentrer la lettre 'a' dans l'Edit Box.

    Pour ce faire, je dérive une classe CMyEdit de CEdit, dans laquelle il n'existe que la fonction membre OnChar( ), qui se contente de faire un test sur le charactere entré.

    Ensuite dans la fonction OnInitDialog( )de ma CDialog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //IDC_EDIT1 est un CEdit généré par ClassWizard
    BOOL ret = m_MyEdit.SubclassDlgItem(IDC_EDIT1, this);
    Le pb : A aucun moment, le traitement des messages n'est rerouté vers ma fonction OnCHar( ). Pourtant, d'apres ce que j'ai lu sur la gestion des messages en MFC ce code devrait fonctionner.

    Une Idée ??

    Fred

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    il y a plus simple ...
    tu attaches un contrôle edit a ta variable, et tu remplaces la classe CEdit par la classe CMyEdit.

    sinon ton subclass doit fonctionner à condition d'être placé au bon endroit:
    OnInitDialog ou OnInitialUpdate.
    le fait de faire un subclass manuel plutot que l'opération décrite en premier, te prive de l'utilisation de UpdateData...

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    Farscape,

    Aurais-tu quelques infos supplémentaires, je ne saisis pas ou je remplace la classe CEdit par CMyEdit.
    Et que signifie exactement "attacher" un contrôle Edit à ma variable ??
    Un CEdit membre de ma classe CMyEdit ??

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    ok autant pour moi ... c'est lundi matin ... je crois que je viens de saisir .. je test

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    Pas mieux en fait ...

    Je ne passe toujours pas par ma fonction OnChar( ).

    Via ClassWizard, j'ai attaché un control CEdit à mon Edit Box.
    Puis je change la déclaration de ce contrôle en CMyEdit m_MyEdit. Mais il s'en fout complètement ....

    comprends pas ....

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    ça veut dire que ta classe n'est pas correcte notamment au niveau du message map...
    voir faq: http://c.developpez.com/faq/vc/?page...EditFilterChar

  7. #7
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    Ca fonctionne !!! Merci Farscape !!

    J'avais oublié le BEGIN_MESSAGE_MAP !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
    	//{{AFX_MSG_MAP(CMyEdit)
    	ON_WM_CHAR() 
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()

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

Discussions similaires

  1. ActiveX et sous-classage de la fenetre du conteneur
    Par LEK dans le forum Visual C++
    Réponses: 0
    Dernier message: 06/12/2009, 16h49
  2. Cacher et afficher un CEdit Control
    Par A_B dans le forum MFC
    Réponses: 5
    Dernier message: 06/01/2009, 21h14
  3. Réponses: 2
    Dernier message: 13/10/2008, 15h02
  4. sous formulaire et controle
    Par mourly dans le forum VBA Access
    Réponses: 5
    Dernier message: 04/03/2008, 14h51
  5. controle des ports sous Delphi
    Par jakjoud dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 10/07/2005, 19h16

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