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 :

ajouter icon dans ComboboxEX


Sujet :

MFC

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1
    Par défaut ajouter icon dans ComboboxEX
    Bonjour,

    J'essaye d'ajouter une icone dans ma combobox mais ca marche pas. Pour cela je me sert de la classe CComboboxEX mais à l'affichage j'ai seulement mon texte.
    voici le code :

    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
    	CImageList image;
    	image.Create(16,16,ILC_COLOR,2,2);
            image.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
    	m_ok.SetImageList(&image);
    	COMBOBOXEXITEM     cbi;
    cbi.mask =CBEIF_IMAGE|CBEIF_TEXT|CBEIF_OVERLAY| CBEIF_SELECTEDIMAGE;
     
           CString    str;
           str.Format("Item 1");
    	cbi.iItem = 0;
    	cbi.pszText = (LPTSTR)(LPCTSTR)str;
           cbi.cchTextMax =str.GetLength();
    	cbi.iImage = 0;
           cbi.iSelectedImage = 0;
           cbi.iOverlay =0; 
        m_ok.InsertItem(&cbi);
    Merci de votre aide

  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
    Par défaut
    salut,
    CImageList image; ne doit être locale à la fonction mais déclaré dans la classe pour être persistant. (sinon la liste est détruite quand on sort de la méthode ou elle est déclarée).
    comme indiqué dans la faq:
    http://cpp.developpez.com/faq/vc/?pa...oxAddImageList

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Bonjour,

    Bon, je ne vais pas ouvrir un nouveau sujet pour vous exposer mon problème car celui-ci est tout à fait à propos.
    J'ai absolument besoin de créer, dynamiquement (sinon c'est pas drole), une combobox incluant des icônes.

    Mon code existant est basé sur la création dynamique d'un objet CComboBox, mais en regardant le tuto de Farscape ( http://cpp.developpez.com/faq/vc/?pa...oxAddImageList ) j'ai tout passé en CComboBoxEx
    Par exemple le CComboBox::OnCreate est devenu CComboBoxEx::OnCreate

    Je n'ai rien changé au style utilisé auparavant ( CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE )

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    CMyComboBox::CMyComboBox(int iItemNumber,CString * sSelectableItems, CString sActivatedField)
    {
    	m_sSelectableItems = new CString [iItemNumber];
    	m_iActivatedIndex = 0;
     
    	for (int i=0;i<iItemNumber;++i)
    	{
    		if ( !strcmp(sActivatedField,sSelectableItems[i]) )
    			m_iActivatedIndex = i;
    		m_sSelectableItems[i] = sSelectableItems[i];
    	}
    }
     
    int CMyComboBox::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {	
    	if (CComboBoxEx::OnCreate(lpCreateStruct) == -1)
    		return -1;
     
    	// Set the proper font
    	CFont* font = GetParent()->GetFont();
    	SetFont(font);
     
    	SetImageList(&((CListCtrlEx*)GetParent())->m_CheckImageList);
    	COMBOBOXEXITEM     cbi;
    	cbi.mask = CBEIF_IMAGE|CBEIF_TEXT|CBEIF_OVERLAY| CBEIF_SELECTEDIMAGE;
    	CString    str;
     
    	for (int i=0;i<m_iItemNumber;++i)
    	{
    		cbi.iItem = 0;
    		cbi.pszText = (LPTSTR)(LPCTSTR)m_sSelectableItems[i];
    		cbi.cchTextMax = m_sSelectableItems[i].GetLength();
    		cbi.iImage = 0;
    		cbi.iSelectedImage = 0;
    		cbi.iOverlay =0; 
    		InsertItem(&cbi);
    	}
     
    	SetCurSel(m_iActivatedIndex);
           //Fonction de dimensionnement, en fonction du contenu, donnée par Farscape
    	set_DropDownSize(this,m_iItemNumber);
    	SetFocus();
     
    	return 0;
    }
    Ma classe CMyComboBox hérite bien de CComboBoxEx

    Mon élément est bien créé mais:
    - Mon élément est rempli, l'élément choisi est bien sélectionné par défaut, mais lorsque je click sur le bouton de dropdown, il ne se passe rien
    - Mon but est que, lorsque l'objet CComboBoxEx perd le focus, celui ci est détruit, mais le SetFocus semble appeler la méthode KillFocus, pour une raison que j'ignore totalement.

    En résumé : AU SECOURS!!!

  4. #4
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Citation Envoyé par fantomchris Voir le message
    le SetFocus semble appeler la méthode KillFocus, pour une raison que j'ignore totalement.
    Salut,

    Je n'interviens que sur un point de détail, mais comment sais-tu que SetFocus appelle KillFocus ? Si c'est en mettant un point d'arrêt dans ta méthode OnKillFocus, c'est normal car l'entrée dans le code par un point d'arrêt signifie la perte du focus de ton contrôle...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Mon raisonnement est simple:

    Mon objet n'est détruit qu'à le perte de focus, et lorsque j'ajoute l'appel à SetFocus, l'objet n'apparait même pas.

  6. #6
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    utilise plutot les notifications CBN_SETFOCUS et CBN_KILLFOCUS

    @+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Bon, j'ai trouvé!
    J'ai pas mal galéré, mais je suis basé sur ce code ci:
    http://www.codeproject.com/KB/combob...rComboBox.aspx

    En analysant, et en adaptant, je suis arrivé exactement au résultat que je cherchais...

Discussions similaires

  1. Ajout icone dans la barre d'outil de l'explorateur windows
    Par mr_keyser dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/02/2010, 12h25
  2. [VB6]Ajouter icone dans systray
    Par aurelien2723 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 10/04/2006, 16h52
  3. Ajouter des icones dans vos ressources
    Par Eric Boisvert dans le forum EDI
    Réponses: 1
    Dernier message: 24/05/2005, 20h02
  4. Ajouter une icone dans la barre des titres (cme emule)
    Par Crisanar dans le forum Windows
    Réponses: 7
    Dernier message: 12/12/2004, 12h08

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