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