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 :

CComboBox dans une classe utilitaire


Sujet :

MFC

  1. #1
    Membre averti Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Points : 437
    Points
    437
    Par défaut CComboBox dans une classe utilitaire
    Bonjour,

    voilà, je ne sais clairement pas un pro des MFC , et donc je patauge dans un truc surement tout bête : j'ai plusieurs dialog avec des combobox dont je doit sélectionner automatiquement une ligne en fonction d'une valeur de data.

    Or pour ce faire j'ai codé une méthode simple :

    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
    void CMMIGroup::SelectCBItem(int nID, long nData)
    {
        CComboBox* pComboBox = static_cast<CComboBox*>(GetDlgItem(nID));
     
        if ( NULL != pComboBox )
        {
            int nCount = pComboBox->GetCount();
     
            for (int i=0; i<nCount; i++)
            {
                if ( nData == pComboBox->GetItemData(i) )
                {
                    if (CB_ERR == pComboBox->SetCurSel(i))
                    {
                        infolog << "CMMIGroup::SelectCBItem -> ERROR : SetCurSel returns CB_ERR " << endlog;
                    }
                }
            }
        }
    }
    utilisé comme çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectCBItem(IDC_GROUP_TYPE_VALUE, m_stGroupData.Identifier);
    Bon donc ce code fonctionne très bien, mais jusqu'à présent c'est du code dupliqué car mis dans le code de chaque dialog. Je veux donc mettre le code dans une classe utilitaire, et j'ai donc fait çà :

    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
    void CMMITools::SelectCBItem(CWnd hNd, long nData)
    {
        CComboBox* pComboBox = static_cast<CComboBox*>(hNd);
     
        if ( NULL != pComboBox )
        {
            int nCount = pComboBox->GetCount();
     
            for (int i=0; i<nCount; i++)
            {
                if ( nData == pComboBox->GetItemData(i) )
                {
                    if (CB_ERR == pComboBox->SetCurSel(i))
                    {
                        infolog << "CEpidMMITools::SelectCBItem -> ERROR : SetCurSel returns CB_ERR " << endlog;
                    }
                }
            }
        }
    }
    utilisé dans mes dialogs comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMMITools::SelectCBItem(GetDlgItem(IDC_GROUP_TYPE_VALUE), m_stGroupData.Identifier);
    Mais à la compilation j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x:\mmi\project\emmitools.cpp(469) : error C2440: 'type cast' : cannot convert from 'class CWnd' to 'class CComboBox *'
            No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    Quelqu'un peut-il me dire où çà coince ? merci beaucoup.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    ça serait plutôt ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void CMMITools::SelectCBItem(CWnd *pWnd, long nData)

  3. #3
    Membre averti Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Points : 437
    Points
    437
    Par défaut
    Bon ba comme quoi, je suis encore plus débutant en pointeurs qu'en MFC

    Ce qui m'énerve c'est que j'arrive pas à associer le code d'erreur à la bonne correction de code.


    Merci beaucoup, tout fontionne bien maintenant.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    dans ton cas le compilateur te donne la réponse:
    error C2440: 'type cast' : cannot convert from 'class CWnd' to 'class CComboBox *
    CWnd n'est pas declarée comme pointeur alors que CComboBox oui ,la différence des types manipulés devrait te faire réagir.
    de plus les objets fenêtres MFC doivent être passés en argument soit par référence ou par pointeur ,pas par valeur comme tu l'as fait ici: la classe CWnd n'a pas de constructeur de copie.

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

Discussions similaires

  1. [Portlet] Récuperation du PortletContext dans une classe "utilitaire"
    Par Jaxofun dans le forum Portails
    Réponses: 2
    Dernier message: 18/05/2011, 16h28
  2. Réponses: 8
    Dernier message: 09/07/2005, 23h10
  3. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15
  4. Thread dans une classe ?
    Par Sephi dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 07/03/2004, 18h16
  5. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 11h42

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