Faire fonctionner une list box

lolman27 Messages postés 19 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 22 janvier 2009 - 21 oct. 2002 à 20:08
sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004 - 23 févr. 2004 à 19:40
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

cs_llo Messages postés 45 Date d'inscription jeudi 10 octobre 2002 Statut Membre Dernière intervention 6 décembre 2002
23 oct. 2002 à 14:19
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
0
lolman27 Messages postés 19 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 22 janvier 2009
25 oct. 2002 à 00:31
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....
0
cs_llo Messages postés 45 Date d'inscription jeudi 10 octobre 2002 Statut Membre Dernière intervention 6 décembre 2002
25 oct. 2002 à 09:29
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
0
sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004
23 févr. 2004 à 19:40
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
0
Rejoignez-nous