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

Windows Discussion :

Problème avec CB_SETITEMDATA et CB_GETITEMDATA


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut Problème avec CB_SETITEMDATA et CB_GETITEMDATA
    Bonjour,

    Je suis en train de faire un petit programme C API windows sans prétention.

    Je rencontre un problème avec les données complémentaires d'une combobox précise alors que tout se passe bien pour d'autre combobox pour lesquelles j'utilise exactement la même méthode, au noms de variables près.

    En gros, j'affiche des noms de parsonnes dans la combobox à l'aide de CN_ADDSTRING, depuis une lecture de table MySQL, mais, pour retrouver l'identifiant de chaque personne, je place cet identifiant en données complémentaires via CB_SETITEMDATA.

    Voici le code de chargement de la combobox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MYSQL_RES *resuti;
    MYSQL_ROW euti;
    char nomprenom[61];
    int newligne;
    
    resuti = SelectBase("SELECT * FROM USERS"); <= fonction pour encapsuler 'mysql_query'. Elle marche bien ; des 'MessageBox' pour vérifier ont été ok.
    while((euti = mysql_fetch_row(resuti)) != NULL) {
        sprintf(nomprenom, "%s %s", euti[2], euti[1]);
        newligne = SendDlgItemMessage(hwndDlg, IDC_LISTEUTICOM, CB_ADDSTRING, 0, (LPARAM)nomprenom);
        SendDlgItemMessage(hwndDlg, IDC_LISTEUTICOM, CB_SETITEMDATA, newligne, (LPARAM)euti[0]);
    }
    Le code pour récupérer (temporaire pour vérification car je pinaille depuis pas mal de temps sur ce problème) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Vérif contenu de ITEMDATA de la liste des users
    int nbuti, i;
    char r[1024];
    nbuti = SendDlgItemMessage(hwndDlg, IDC_LISTEUTICOM, CB_GETCOUNT, 0, 0);
    sprintf(r, "Nombre de users : %d \n", nbuti);
    for(i = 0; i < nbuti; i++)
        sprintf(r, "%svaleur %d => %s\n", r, i, SendDlgItemMessage(hwndDlg, IDC_LISTEUTICOM, CB_GETITEMDATA, i, 0));
    MessageBox(hwndDlg, r, "Users dans ITEMDATA", MB_OK);
    // Fin de vérif
    Ca me retourne n'importe quoi genre valeurs bidons. Toujours les mêmes, par contre !

    Comme précisé plus haut, j'effectue exactement la même chose avec d'autres combobox (dont une dans la même dialogbox) et ça marche nickel !!!

    Où est-ce que je me plante ? Est-ce que celles qui marchent marchent par chance ?

    Vous remarquerez qu'en tant qu'ancien adepte du C standard, j'ai du mal à utiliser les différents subterfuges et substitutions parfois inutiles, parfois fondamentales, que la programmation windows apporte par dessus le C.

    Merci pour votre aide !

  2. #2
    Membre du Club
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    Bonjour,

    Cherchez plus (pour ceux qui cherchaient... ) : j'ai trouvé !

    Le problème se situe dans la portée des valeurs des variables utilisées. J'utilisais directement les pointeurs MYSQL_ROW remplis par mysql_fetch_row dont le contenu "s'évaporait" lorsque je libérais la connexion à la base.

    Un passage par des variables intermédiaires de type tableaux de chaines déclarées au sommet de cette partie du programme et valorisées par un strncpy a résolu le problème.

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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