zanrek
Messages postés25Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention26 septembre 2009
-
20 juil. 2007 à 12:47
zanrek
Messages postés25Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention26 septembre 2009
-
23 juil. 2007 à 12:12
Bonjour,
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?
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 20 juil. 2007 à 14:20
Salut,
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.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 23 juil. 2007 à 11:11
Salut,
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.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 23 juil. 2007 à 12:10
Salut,
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.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 20 juil. 2007 à 16:15
Salut,
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.
zanrek
Messages postés25Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention26 septembre 2009 20 juil. 2007 à 16:23
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...
zanrek
Messages postés25Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention26 septembre 2009 23 juil. 2007 à 10:09
Bon nouvelle semaine, nouveaux prolèmes :-)
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);
}
zanrek
Messages postés25Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention26 septembre 2009 23 juil. 2007 à 11:23
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.