View Full Version : [C con API] List Box
17Qwerty71
19-12-2005, 17:03
Come faccio a conoscere l'indice della stringa che la list box mostra?
Sò che esistono funzioni, ma esse mi restituiscono l'indice solo se mi muovo con i tasti direzionali.
E se uno scorre la lista con lo scroll?
Conosco che esiste il messaggio WM_VSCROLL ma devo abilitare in qualche modo l'invio di questo messaggio dalla list box?
Perchè a me non mi arriva stò messaggio :confused:
Un'esempio? :help:
Grazie :)
Come faccio a conoscere l'indice della stringa che la list box mostra?
Se vuoi sapere quale è l'indice dell'elemento selezionato nella list box (a singola selezione!), puoi usare il messaggio LB_GETCURSEL.
17Qwerty71
19-12-2005, 18:01
Se vuoi sapere quale è l'indice dell'elemento selezionato nella list box (a singola selezione!), puoi usare il messaggio LB_GETCURSEL.
Si, però questo mi restituisce l'indice solo se ci clicco sopra con il muose :p
Io volevo che me lo restituisse se mi muovevo con lo scroll. :)
Si, però questo mi restituisce l'indice solo se ci clicco sopra con il muose :p
Io volevo che me lo restituisse se mi muovevo con lo scroll. :)
Scusa .. ma se muovi la scrollbar della listbox non modifichi la selezione dell'elemento! Forse intendi dire che vuoi conoscere l'indice dell'elemento selezionato dopo che hai cambiato la selezione in un qualche modo (con i tasti di direzione, con il mouse, ecc...)
In questo caso dovresti gestire la notifica LBN_SELCHANGE (inviata attraverso il messaggio WM_COMMAND) e a quel punto usare il messaggio LB_GETCURSEL per conoscere quale è il nuovo elemento selezionato.
Nota: per usare LBN_SELCHANGE la listbox deve avere lo stile LBS_NOTIFY.
17Qwerty71
19-12-2005, 20:02
Scusa .. ma se muovi la scrollbar della listbox non modifichi la selezione dell'elemento! Forse intendi dire che vuoi conoscere l'indice dell'elemento selezionato dopo che hai cambiato la selezione in un qualche modo (con i tasti di direzione, con il mouse, ecc...)
In questo caso dovresti gestire la notifica LBN_SELCHANGE (inviata attraverso il messaggio WM_COMMAND) e a quel punto usare il messaggio LB_GETCURSEL per conoscere quale è il nuovo elemento selezionato.
Nota: per usare LBN_SELCHANGE la listbox deve avere lo stile LBS_NOTIFY.
Ma in questo caso non mi viene riconosciuto il cambiamento di indice se mi muovo con lo scroll. :mc:
Ma in questo caso non mi viene riconosciuto il cambiamento di indice se mi muovo con lo scroll. :mc:
E certo! ;) Quando muovi la scrollbar di una listbox, il messaggio WM_VSCROLL arriva solamente alla listbox, che provvede poi a scrollare "graficamente" il suo contenuto. Al massimo la listbox può inviare alla finestra padre qualche messaggio per richiedere delle info particolari sui colori, come ad esempio WM_CTLCOLORLISTBOX. Ma non c'è alcuna notifica al padre della listbox per quanto riguarda lo scrolling.
Non so ovviamente cosa devi fare di preciso e per quale motivo. Solitamente non è molto importante avere notifiche sullo scrolling di una listbox!
Comunque, per come la vedo io, una (forse l'unica) soluzione è quella di effettuare il subclassing della listbox, quindi catturare il messaggio WM_VSCROLL e a quel punto inviare un qualche messaggio custom al padre che notifichi lo scrolling. E a quel punto fai quello che vuoi.
17Qwerty71
19-12-2005, 22:09
E certo! ;) Quando muovi la scrollbar di una listbox, il messaggio WM_VSCROLL arriva solamente alla listbox, che provvede poi a scrollare "graficamente" il suo contenuto. Al massimo la listbox può inviare alla finestra padre qualche messaggio per richiedere delle info particolari sui colori, come ad esempio WM_CTLCOLORLISTBOX. Ma non c'è alcuna notifica al padre della listbox per quanto riguarda lo scrolling.
Non so ovviamente cosa devi fare di preciso e per quale motivo. Solitamente non è molto importante avere notifiche sullo scrolling di una listbox!
Comunque, per come la vedo io, una (forse l'unica) soluzione è quella di effettuare il subclassing della listbox, quindi catturare il messaggio WM_VSCROLL e a quel punto inviare un qualche messaggio custom al padre che notifichi lo scrolling. E a quel punto fai quello che vuoi.
Azzz... mi sa che ho fatto confusione con le ComboBox :doh:
Sono quelle che vorrei usare, ora stò provando ma non capisco come si fa a far apparire la tendina per la selezione :muro:
Non trovo nessuna documentazione sulle combobox in italiano :help:
Azzz... mi sa che ho fatto confusione con le ComboBox :doh:
Sono quelle che vorrei usare, ora stò provando ma non capisco come si fa a far apparire la tendina per la selezione :muro:
Beh, dipende. Una combobox ha 3 stili: "Simple", "Dropdown" e "Drop List". Con il primo stile la listbox è sempre visualizzata mentre negli altri 2 stili la listbox viene visualizzata manualmente cliccando sul box a destra con la freccia o eventualmente in modo programmatico inviando il messaggio CB_SHOWDROPDOWN.
Spero che sia questo che intendevi. ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.