voilà je fais face à un petit souci concernant les combo box. (Je n'ai en fait encore jamais utilisé ce type de contrôle).
Donc j'ai placé une Combo box sur me boîte de dialogue CSetup que j'ai nommé IDC_COMBO_CATEGORY à laquelle j'ai associé une variable de type CComboBox: m_Combo_Category
Je voudrais qu'à l'affichage de cete fenêtre, il y ait un certain nombre de lignes déjà remplies dans cette comboBox, et lorsque je clique sur un bouton, récupérer l'élément sélectionné.
J'ai déjà essayé danc un premier lieu de faire
m_Combo_Category.AddString ("ma chaine");
La compilation passe, mais des qu'il s'agit d'executer cette ligne (placée dans CSetup::CSetup (CWnd*pParent)), il me sort une erreur "debug assertion failed...".
Quelle peut en être la cause? Celà vient-il d'une mauvaise utilisation de la variable CComboBox?
Logiquement, j'aurais plutot mis le code d'initialisation du combo dans
le OnInitDialog(), car a mon avis au moment de l'appel du constructeur
de CSetup ta dialog n'est pas encore crée, et ton combobox aussi.
Moi je reste sur mon OnInitDialog() de la semaine derniere ;)
C'est dans cette fonction que tu dois initialiser tout les controles de
ta dialog. D'apres msdn, OnInitDialog est une methode virtuelle qu'il
suffit d'implementer dans ta classe, au même titre que OnOK ou OnCancel.
En général les methodes du style 'OnQuelqueChose' sont des réponses a
des evenement, donc tu n'a pas a les appeler, c'est la dialog qui les
appelera au bon moment.
Oui ben c'est ce que je dis, au moment de l'appel du constructeur ton
combobox n'existe pas encore (je parle bien de la fenêtre windows, pas
de l'instance du CComboBox). Pour etre sur que le probleme vient bien
de la, tu peux rajouter un
ASSERT(::IsWindow(m_Combo_Category.GetSafeHwnd())) dans ton
constructeur, et voir si ca échoue en debug.
Pour le OnInitDialog(), doit forcement y avoir un moyen de le rajouter, mais la je ne peux pas t'aider.
En effet, si je place ce code ailleurs (dans une fonction membre, par exemple, çà passe sans soucis... a ceci près que lq liste ne se déroule pas sur 5 ou 6 lignes, mais seulement sur une seule...
Donc j'ai créé ma combo Box , et les éléments de celle ci se mettent à jour lorsque j'appuie sur un bouton. Celle-ci se déroule normalement, bref dans la situation actuelle, tout est OK.
Maintenant, j'aimerais que cette combo box ne s'initialise aps lorsque j'appuie sur le bouton, mais directement lors de l'affichage de la fenêtre "Setup".
Seul souci, je ne peux pas le faire depuis CSetup::Csetup.
Voici les autres méthodes qui sont dispo dans ma classe :
DoDataExchange, GetMessageMap, GetThisMessageMap, OnClickedDelete, OnClickedOverwrite, OnCheckfile (ces 3 dernières méthodes sont des méthodes que j'ai cré pour les boutons).
voici le code que je souhaiterais mettre pour initialiser mon combo box.:
Voici aussi le code qui me sert à afficher ma fenêtre... c'est peut-être utile pour trouver une solution...
Csetup *psetup = new Csetup;
if (psetup!=NULL)
{
BOOL ret = psetup-> Create(IDD_SETUP);
if (!ret)
AfxMessageBox ("erreur");
psetup->ShowWindow(SW_SHOW);
}
Je vais essayer cette méethode... En fait à la base jou voulais utiliser un autre moyen , car je n'ai jamais implémenté OnInitDialog par moi même (c'est otujours lors de la création du projet que çà se faisait).
Je vais essayer de voir comment ils font dans MSDN.