detectar item de lista con doble click y obtener id de elemento

Iniciado por dewolo, 4 Octubre 2011, 21:37 PM

0 Miembros y 1 Visitante están viendo este tema.

dewolo



Uploaded with ImageShack.us

esta en la parte de maindialog

case IDC_LIST2:
switch(HIWORD(wParam))
{
case LBN_SELCHANGE:
{
                               }
                       }


de esta forma detecta si hubo seleccion de items, pero yo quisiera saber de que item se trata, osea necesitaria una ID de elemento o algo que me diga cual elemento se ha seleccionado..


Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

dewolo

ai si gracias  ::)


case IDC_LIST2:
switch(HIWORD(wParam))
{
case LBN_SELCHANGE:
{
int dwSel = SendDlgItemMessage(hDlg, IDC_LIST2, LB_GETCURSEL, 0, 0);

int num = dwSel;
        char num_str[255];
        itoa(num,num_str,10);

if(dwSel != LB_ERR)
{
MessageBox(0,num_str,"TP2",0);
}



si conoces una mejor forma avisame XD



Eternal Idol

Supongo que podes usar esta macro para simplificar pero en definitiva es lo mismo:

ListBox_GetCurSel.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

dewolo

lo que si  que cuando hago click en un elemento se activa LBN_SELCHANGE , pero yo quisiera al hacer doble click asi puedo simular una seleccion de un elemento de la lista y luego hacer algo al respecto, por ejemplo "cargar articulo" que abra otro dialog para cargar un artivulo
en conclusion como activar con doble click XD


Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

dewolo

#6

case IDC_LIST2:
switch(HIWORD(wParam))
{
//case LBN_SELCHANGE:
case LBN_DBLCLK:
{
int dwSel = SendDlgItemMessage(hDlg, IDC_LIST2, LB_GETCURSEL, 0, 0);

int num = dwSel;
   char num_str[255];
   itoa(num,num_str,10);

if(dwSel != LB_ERR)
{
MessageBox(hDlg,num_str,"Final Lab2",0);
}


asi funciona, pero asi estaria bien? osea reemplazando el LBN_SELCHANGE por el LBN_DBLCLK, o hay otra forma mas profesional  :rolleyes:

pregunto porque se dan los dos casos, y es como que el GETCURSEL estaria suponiendo que se hizo una seleccion pero, en realidad se hizo dentro del mensaje de DBLCLK

Eternal Idol

Yo soy exporte en modulos de modo Kernel (drivers) para de Windows y no en su GUI asi que tomalo con pinzas lo que te diga, lo mejor que podes hacer es leer la documentacion (MSDN).

LB_GETCURSEL puede ser llamado hasta cuando no hay ningun elemento seleccionado, para eso comprabas dwSel, asi que es perfectamente valido llamarlo en LBN_DBLCLK. Es mas, imaginate que no hace falta cambiar de elemento seleccionado para hacer doble click infinitas veces en el mismo ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón