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 :

CComboxBox et SetItemData


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut CComboxBox et SetItemData
    Bonjour,

    Je veux cr�er une liste d�roulante avec 2 choix possibles: Blanc et Noir

    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
    17
    18
    19
     
     
     const char *  tableau_Choix[]= {"blanc", "noir"};
     
     std::vector<std::string> vect_Choix;  ;  	vect_Choix.push_back("blanc");   vect_Choix.push_back("noir");
     
     
    m_CouleurCombo = (CComboBox*) GetDlgItem(IDC_COMBO1);
     
    l_Index = m_CouleurCombo->AddString(_T("Blanc"))
     m_CouleurCombo ->SetItemData(l_Index,(DWORD_PTR)m_tableauChoix[0])
     
    l_Index = m_CouleurCombo->AddString(_T("Noir"))
     m_CouleurCombo ->SetItemData(l_Index,(DWORD_PTR)vect_Choix[0].c_str())
     
     
     
    l_Index = m_CouleurCombo->AddString(_T("Noir"))
     m_CouleurCombo ->SetItemData(l_Index, 2eme paramètre)

    la question:

    Qu'est ce que je dois mettre dans le 2eme param�tre de la fonction SetItemData ?

    1/ tableau_Choix[0] tableau_Choix[1] ou
    2/ 0 ou 1 ou
    3/ si j'utilise le Vect_Choix � la place de tableau_Choix (DWORD_PTR)vect_Choix[0].c_str()

    Sinon � vrais dire je n'ai pas bien compris l'utilit� de ce 2eme param�tre ? il doit �tre la chaine de caract�re qui doit �tre affich�e dans la liste d�roulante,
    ou la position de cette chaine dans le tableau qu'on doit le cr�er avant (tableau_choix) ou ... ?

    Quelqu'un peut me donner plus d'explication svp

    Merci

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    http://msdn.microsoft.com/fr-fr/library/0ekb53ey.aspx

    Tu comptes te trimballer ces chaines de caract�res "� la mode camembert" encore longtemps ?
    Tu fais comment quand tu devras faire une version multilingue ?

    On n'utilise pas des chaines de caract�res dans le code business mais des identifiants correspondants.

    Et comment qu'on fait le lien entre le choix de l'utilisateur et ces identifiants ?

    Bin oui, avec l'entier 32 bits mis dans "ItemData", qui lui ne sera pas fonction ni de la langue ni d'un tri quelconque pour l'ergonomie de l'IHM.

  3. #3
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     l_Index = m_CouleurCombo->AddString(_T("Blanc"))
     m_CouleurCombo ->SetItemData(l_Index,  LE ID );
    En fait si j'ai bien compris le Index repr�sente le classement de l'item ajout� dans le comboBox
    le 2 eme param�tre de SetItemData repr�sente le ID de l'item

    alors le probl�me je vois pas la relation entre le ID et l'item (chaine de caract�re) ? � quoi et comment va nous servir la combinaison (index, ID) ?
    par exemple si je veux r�cup�rer la chaine de caract�re de l'item s�lectionn� sans utiliser GetLBText comment je peux le faire en utilisant ID et GetItemData ?

    peux-tu me compl�ter ces 2 lignes: (pour le cas de 2 items par exemple blanc noir )

    1- Alimenter le comboBox :
    AddString ...
    SetItemData ...

    2-R�cup�rer la chaine de caract�re de l'item s�lectionn� actuellement en utilisant le GetItemData :

    GetItemData...
    ...


    Merci

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    L'index est le num�ro d'affichage dans la liste des choses � afficher, ce n'est pas une constante au cours du temps.
    Dans une comboBox tri�e par exemple, si vous ajoutez une chaine qui lexicalement est au d�but, tout se d�cale.
    L'index va de 0 au nombre de chaines � afficher -1.

    Les chaines en d�rs c'est mal.

    Si vous faites correctement votre architecture, vous n'aurez pas "Noir" et "Blanc" qui vont se balader dans toute votre application.
    Vous aurez des constantes pour traiter ce cas.
    Et la constante sera de type int car c'est bien plus simple pour les comparaisons.
    Et vous allez la mettre o� cette constantes ?

    Si vous n'avez plus de chaine en dur mais des fichiers de ressources pour g�rer les diff�rentes langues, vous n'aurez quasiment plus besoin de la string mais que de l'ItemDate.

    1-
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    String str = MyLoadRessourcesFromNimporteNawak(BLACK);
    l_Index = m_CouleurCombo->AddString(str);
    m_CouleurCombo ->SetItemData(l_Index,BLACK);
    ...
    2- Cela n'a aucun sens, vous ne travaillez jamais avec une chaine mais avec une constante (si on utilise que la dropdownlist)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    if-(m_CouleurCombo->GetItemData(m_CouleurCombo->GetCurSel())==BLACK){...} // Attention code non robuste
    Si vous voulez toujours avoir le texte pour continuer � avoir des chaines en dure :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    m_CouleurCombo->GetLBText(m_CouleurCombo->GetCurSel(),str) // Attention code non robuste
    http://msdn.microsoft.com/fr-fr/library/zcy9kze7.aspx

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Euh, je ne crois pas que la combobox inclue de quoi retrouver la string � afficher directement � partir de l'ItemData, si?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut
    En fait ce que je cherche � comprendre c'est la combinaison ( constantes , chaine en d�r) ex: (BLACK, "noir"), je veux savoir comment on les d�clare et dans quel fichier exactement ?
    On utilise des enum + structure o� ...? J'aimerai bien voir un exemple si c'est possible !

    Mercii

+ R�pondre � la discussion
Cette discussion est r�solue.

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