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 :

Probleme d'heritage Cbutton, et SetCheck


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 81
    Par défaut Probleme d'heritage Cbutton, et SetCheck
    Bonjour,
    Je suis actuellement en train de développez un projet sous VC++, plus précisément une interface graphique.
    Je suis face à un problème, d'héritage de classe a première vue, concernant la classe Cbutton et la fonction SetCheck, qui ne coche pas mon bouton.

    J'ai deux classe la première la classe "Texture" qui hérite de Cbutton, et la deuxième la classe "Fonction" qui hérite de Texture.
    Mes boutons check, appartiennent a la classe Fonction, afin d'hériter des fonctions de la classe Texture, Fonction et Cbutton.

    Voici une manière d'illustrer ce qui vient d'être dit :


    Mon probleme intervient lorsque j'essaye de cocher mes boutons dans ma classe Principale, et qui ne se coche pas.
    J'ai suivi en debug pas a pas ce qui se passait lorsque j'appui sur le bouton et tout se passe bien mon setcheck a l'air d'être effectué mais en faite il ne l'ai pas.
    Du coup j'ai essayé de faire hériter ma classe Fonction de bouton et non pas de texture, et de commenter les fonction de Texture appelées dans la class Principale, et dans ce cas le Setcheck s'effectue, et mon bouton est bien coché.
    J'ai fait de même en déclarent les bouton comme appartenant a la classe Texture, cela marche aussi.

    Je ne sais que faire pour garder cette heritage entre classe est pour que mes boutons se cochent.
    Merci de votre aide.

  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,
    l'héritage n'a rien a voir la dedans sauf si tu as implémenté une méthode SetCheck dans ta classe dérivée.
    le problème est plus du à mon avis à un problème d'initialisation graphique de ta variable.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 81
    Par défaut
    J'initialise mon bouton a Uncheck dan ma fonction OnInit de mon programme principal, et si ça venait de là, j'aurais le meme problème dans le cas ou je declare ma classe Fonction comme appartenant a CButton, ce qui n'est pas le cas.
    Quand a ma fonction SetCheck elle appartient a al class CButton je ne l'ai donc pas redeclarée.

    C'est pour cela que je pense que le sous heritage de Fonction est le probleme mais je ne sais pas pourquoi.
    Car lorsque Fonction herite directement de CButton mon Check Bouton fonctionne correctement.

  4. #4
    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
    Dans ce cas poste (avec la balise code) la définition de ta classe héritée de CButton.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 81
    Par défaut
    La classe texture qui herite de Cbutton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    class Texture : public CButton
    // Construction
    public : 
    	Texture();
    //Attributes
    private:
    // Operations
    public:
    //Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(Texture)
    	public:
    	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    	protected:
    	virtual void PreSubclassWindow();
    	//}}AFX_VIRTUAL
    // Implementation
    public:
    	void ChangeColor(Byte ColorR=0,Byte ColorB=0,Byte ColorG=0);
    	virtual ~Texture();
    protected:
    	bool	m_Checked;
    	bool	m_IsPushLike;
    //	afx_msg BOOL OnClicked();
    	//{{AFX_MSG(CxShadeButton)
    	afx_msg BOOL OnClicked();
    	//}}AFX_MSG
    };
    La classe Fonction qui herite de Texture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    class Fonction : public Texture
    {
    // Construction
    public:
    	Fonction ();
     
    // Attributes
    public:
     
    // Operations
    public:
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(Fonction)
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	virtual ~Fonction();
     
    	// Generated message map functions
    	//{{AFX_MSG(Fonction)
    	afx_msg void OnButCheck1();
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
    };

  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
    salut,
    que fait tu dans drawitem et PreSubclassWindow ?

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 81
    Par défaut
    DrawItem, redessine mon bouton avec les couleurs choisie
    Presubclassewindow detecte le type de bouton utilisé (button, check, radio)

    Je suis sure a 100% que ces fonctions marche j'ai eu l'occasion de les tester.

  8. #8
    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
    si tu as customisé le button , celui-ci doit aussi prendre en charge le dessin quand le statut cocher est activé.
    ce qui ne doit pas être le cas actuellement.

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 81
    Par défaut
    J'ai deja essayé la classe texture lors d'un precedent projet, à la difference que mes boutons appartenaient directement à la classe Texture et non pas à une sous classe tel que fonction.
    Dans ce cas mes boutons marchaient parfaitement, mais dans nouveau ce projet j'ai voulu séparer ce qui etait graphique de ce qui était calcul en créant la sous classe Fonction.
    (Dans mon precedent projet toutes les fonctions étaient dans la classe Cdialog de la fenetre contenant les boutons).
    Le fait d'avoir cette sous classe me creer le probleme de Check sur mes boutons, et je tiens a conservé cette sous classe.
    il y a-t-il un moyen de faire un double heritage ? pour que fonction herite de Texture et de CButton ?

  10. #10
    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
    tu as respecté dans ton code l'ordre d'héritage sur les macros: BEGIN_MESSAGE_MAP.

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 81
    Par défaut
    Je viens de verifier et l'odre est bien respecté.

  12. #12
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Prend ce petit projet comme source d'inspiration, compile le sous VS 2008 avec le Feature Pack,
    Jette un oeil sur la page des différents sortes de boutons avec des images et analyse bien le fichier Page1.cpp

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 81
    Par défaut
    J'ai trouvé mon erreur.
    J'ai reconstruit ma sous classe avec VC++ en precisant qu'elle heritait de Texture du coup ca marche. Contrairement a ce que j'avais fait avant cad construire moi meme cette sous classe, dans la quelle il devait manquer deux ou trois petit truc ...

    Merci pour votre aide.

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

Discussions similaires

  1. probleme d'heritage tform1
    Par nosfer dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/05/2006, 13h33
  2. Probleme d'heritage
    Par drcd dans le forum C++
    Réponses: 5
    Dernier message: 28/04/2006, 16h42
  3. [debutant] Probleme d heritage
    Par Treuze dans le forum Débuter
    Réponses: 20
    Dernier message: 21/04/2006, 12h46
  4. probleme d heritage.
    Par ceres02 dans le forum Langage
    Réponses: 11
    Dernier message: 30/03/2006, 14h54
  5. Probleme d'heritage curieux
    Par viddak dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/05/2005, 14h58

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