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.