Faire fonctionner une list box

Signaler
Messages postés
19
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
22 janvier 2009
-
Messages postés
13
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
25 avril 2004
-
c tout con ms jarive pas a faire fonctionner une list box
jarive pa a utiliser la fonction sendmessage
quelqun pourrai me faire un code pour exemple svp
qui rajoute des element ds la list en retire...
merci davance

4 réponses

Messages postés
45
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
6 décembre 2002

salut,
pas compliqué... voilà un exemple tout bête:

char szTmp[50];
UINT i;
RECT rc;
GetClientRect( hwnd, &rc );
hwndConn = CreateWindow( "LISTBOX",
"Connections",
WS_CHILD | WS_VISIBLE | WS_HSCROLL |
WS_VSCROLL | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_SORT,
0,
0,
rc.right,
rc.bottom,
hwnd,
(HMENU) IDL_CONN,
lpCreateStruct->hInstance,
NULL );

// ajout de 3 items
SendMessage(hwndConn, LB_ADDSTRING, (WPARAM) 0, (LPARAM) (LPTSTR) "item1") ;
SendMessage(hwndConn, LB_ADDSTRING, (WPARAM) 0, (LPARAM) (LPTSTR) "item2") ;
SendMessage(hwndConn, LB_ADDSTRING, (WPARAM) 0, (LPARAM) (LPTSTR) "item3") ;

// insertion d'un item en seconde position
wsprintf (szTmp, "item inséré", 1);
SendMessage (hwndConn, LB_INSERTSTRING, 1, (DWORD)(LPSTR)szTmp);

// sélection du second item
SendMessage(hwndConn, LB_SETCURSEL, (WPARAM) 2, (LPARAM) 0 ) ;

// récupération de la données associées par défaut à l'item d'indice 1 (2nde position)
i = SendMessage(hwndConn, LB_GETITEMDATA, (WPARAM)1, (LPARAM)0);

// affichae => valeur initiale de 0
sprintf(szTmp, "item %ld", i);
MessageBox(hwnd, (LPSTR)szTmp, "CB MSG", MB_OK);

// affectation d'une numérique 50
SendMessage (hwndConn, LB_SETITEMDATA, 1, (DWORD)50);

// récupération de la valeur numérique
i = SendMessage(hwndConn, LB_GETITEMDATA, (WPARAM)1, (LPARAM)0);
sprintf(szTmp, "item %ld", i);
MessageBox(hwnd, (LPSTR)szTmp, "CB MSG", MB_OK);

// affectation d'une chaîne de caractères
SendMessage (hwndConn, LB_SETITEMDATA, 2, (DWORD)(LPSTR)"toto");

// récupération de cette chaîne
MessageBox(hwnd, (LPSTR)(DWORD)SendMessage(hwndConn, LB_GETITEMDATA, (WPARAM)2, (LPARAM)0), "CB MSG", MB_OK);

// récupération de la sélection courante
index = SendMessage( hwndConn, LB_GETCURSEL,(WPARAM) 0, (LPARAM) 0 );

voilà... si tu veux + d'infos n'hésite pas!

shuss
l'lo
Messages postés
19
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
22 janvier 2009

Salut
Merci pour ta reponse
Ca ne fonctionne pas cher moi jai comme erreur la fonction sendmessage ne comporte pas 4 parametre
en effet kan je regarde les parametre de la fonction sendmessage il ni a ke 3 donne rekise:(UINT,lparam,wparam) un truc comme ca je croi
j ai pas msdn donc chui aller voir sur microsoft
et la il a 4 parametre pour sendmessage je compren pas vu que g bien visual c++ 6
porquoi c different cher moi chai pa....
Messages postés
45
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
6 décembre 2002

salut,
Si tu travaille avec les MFC alors les sendmessage ne nécessite que 3 paramètres sachant que le handle est implicite par rapport à la classe dans laquelle tu utilise cette fonction.... Le pb est que dans ton cas, le hwnd implicite doit être celui de la fenêtre et non de la liste.
Pour outrepasser cela, tu dois préfixer la fonction par ==> "::"

ex ==> "::SendMessage(HWND, UINT, WPARAM, LPARAM)

Dans ce cas, tu passes le HWND de la liste...
voilà
shuss

l'lo
Messages postés
13
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
25 avril 2004

Salut,

j'ai essaye d'utiliser les infos de lolman27 et en voici le code

//DEBUT CODE
LRESULT CALLBACK LCBoG5(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
DlgDirList(hDlg, "map/*.map", IDC_CARTECHOIX, 0, DDL_READONLY);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_B6VALID:
HWND hList = GetDlgItem(hDlg, IDC_CARTECHOIX);
if (hList)
{
int index = SendMessage(hList, LB_GETCURSEL,(WPARAM) 0, (LPARAM) 0 );
MessageBox(hDlg, (LPSTR)(DWORD)SendMessage(hList, LB_GETITEMDATA, (WPARAM)index, (LPARAM)0), "CB MSG", MB_OK);
}
break;
}
break;
default :
return(false);
}
return(true);
}
//FIN CODE

IDC_B6VALID est un bouton qui ouvre une messagebox qui doit afficher la selection de l'index de la listbox.
Si le messagebox s'affiche bien, il est vide :(

Pourriez-vous m'aider à voir l'erreur. J'ai pourtant bien envoyé un message indiquant la selection courant, non ?
merci
dom