Accéder à une variable dans une focntion static de ma classe

aabhanane Messages postés 34 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 28 juillet 2005 - 18 juil. 2005 à 11:13
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006 - 18 juil. 2005 à 14:40
Bonjour à tous,

je programme avec VC++ et j'ai une fonction définie comme suit:

static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport);

J'ai une variable " CComboBox m_comboBox " associée à un ComboBox.

Je veux accéder à cette variable dans ma fonction DriverEnumProc.

Quand je mets " m_comboBox.AddString("toto") " dans le focntion
DriverEnumProc ceci me donne l'erreur de compilation suivante: " error
C2228: left of '.AddString' must have class/struct/union type "

Je crois comprendre que je ne peux pas accéder à ma variable m_comboBox dans une fonction static.

Est ce que quelqu'un aurait une solution pour résoudre ce problème?

Merci,

Hanane

9 réponses

BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
18 juil. 2005 à 11:46
Si ta CallBack ne fait pas partie de la classe qui contient la combo, tu es obligé de la spécifier:

Classe::m_comboBox

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
0
aabhanane Messages postés 34 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 28 juillet 2005
18 juil. 2005 à 11:55
resalut,

Si ma fonction callback fait partie de ma classe, et j'ai pensé malgré
ça à ajouter Classe::m_comboBox mais ca ne marche pas aussi, même
erreur.

Merci,

Hanane
0
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
18 juil. 2005 à 12:02
Fait donc voir ton bout de code s'il te plait

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
0
aabhanane Messages postés 34 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 28 juillet 2005
18 juil. 2005 à 13:35
Re,

En fait c'est un bout de code que j'ai trouvé sur msdn pour lister les
codecs installés sur la machine et que j'ai adapté à mon problème:

dans le fichier .h:

static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport);



// Dialog Data

//{{AFX_DATA(CCodecConf)

enum { IDD = IDD_CODECCONFDLG };

CComboBox m_comboBox;

//}}AFX_DATA



et dans le .cpp:



BOOL CALLBACK CCodecConf::DriverEnumProc(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport)

{

// Get some details.

ACMDRIVERDETAILS dd;

dd.cbStruct = sizeof(dd);

MMRESULT mmr = acmDriverDetails(hadid, &dd, 0);

if (mmr)

{

printf(" ");

} else

{

/// Le problème est là

m_comboBox.AddString(dd.szLongName);

}



// Open the driver.

HACMDRIVER had = NULL;

mmr = acmDriverOpen(&had, hadid, 0);

if (mmr) {

printf(" ");

} else

{

DWORD dwSize = 0;

mmr = acmMetrics((HACMOBJ)
had,
ACM_METRIC_MAX_SIZE_FORMAT, &dwSize);


acmDriverClose(had, 0);

}



return TRUE; // Continue enumeration.

}



BOOL CCodecConf::OnInitDialog()

{

CDialog::OnInitDialog();

DWORD dwACMVer = acmGetVersion();

DWORD dwCodecs = 0;

MMRESULT mmr = acmMetrics(NULL, ACM_METRIC_COUNT_CODECS, &dwCodecs);



// Enumerate the set of enabled drivers.

mmr = acmDriverEnum(DriverEnumProc, 0, 0);



return TRUE;

}



Hanane
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
18 juil. 2005 à 13:42
Est-ce que tu as inclu afxwin.h? Il contient la définition de la ComboBox
0
aabhanane Messages postés 34 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 28 juillet 2005
18 juil. 2005 à 13:54
Non ca ne marche pas même si j'inclus le afxwin.h ce qui n'est pas nécessaire (je crois) puisque je travailles avec les mfc.

Hanane
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006 1
18 juil. 2005 à 13:57
Esseye avec un extern devant ta variable :



extern CComboBox m_comboBox;
0
aabhanane Messages postés 34 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 28 juillet 2005
18 juil. 2005 à 14:22
Non ca ne marche pas, mais je crois que je vais faire autrement.
Comme le but est de remplire la combobox avec la liste des codecs. J'ecris cette derniere dans un fichier et après je lis le fichier ligne par ligne pour remplir la comboBox.
C'est un peu chercher midi à 14h mais bon ca marche en attendant de trouver une solution.
Merci,
Hanane
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006 1
18 juil. 2005 à 14:40
Poste ton code complet si il est pas long sinon tu l'upload quelque part.



Sinon tu peux utiliser SendMessage() avec le HWND du combobox pour ajouter une ligne:



SendMessage(ComboBoxWnd, CB_INSERTSTRING, -1, (LPARAM)"une ligne");



Mais c'est pas du MFC..
0
Rejoignez-nous