Newsgroup: it.comp.programmare.win32
Titolo: [API] ComboBox in Dialog

Ho una Dialog con dentro una ComboBox. Come faccio a gestirla
(inserimento di elementi e controllo di quando sono cliccati). Ho
provato un po' a vedere l'SDK ma non ho capito molto ^^;;;
uso il C\C++ con le API.
Grazie
--
Messaggio di: Gordon 
presto avrete la mia homepage:D
<Gordon>Spiritto EVOLUTION!!!

 Grazie
C oppure C++? Non sono la stessa cosa :). Per inserire il testo usi una cosa
del genere (l'ho copiata da un progetto esistente, ovviamente dovrai
adattarla al tuo caso):
SendDlgItemMessage(hWnd, IDC_BITRATE, CB_ADDSTRING, 0,
(LPARAM)(LPCTSTR)TEXT("50 Mb/s"));
SendDlgItemMessage(hWnd, IDC_BITRATE, CB_ADDSTRING, 0,
(LPARAM)(LPCTSTR)TEXT("40 Mb/s"));
SendDlgItemMessage(hWnd, IDC_BITRATE, CB_ADDSTRING, 0,
(LPARAM)(LPCTSTR)TEXT("35 Mb/s"));
....
Poi puoi anche associare un valore ad ogni voce della combo box (spesso
molto utile):
SendDlgItemMessage(hWnd, IDC_BITRATE, CB_SETITEMDATA, (WPARAM)0,
(LPARAM)50000);
SendDlgItemMessage(hWnd, IDC_BITRATE, CB_SETITEMDATA, (WPARAM)1,
(LPARAM)40000);
SendDlgItemMessage(hWnd, IDC_BITRATE, CB_SETITEMDATA, (WPARAM)2,
(LPARAM)35000);
....
Quando l'utente seleziona una voce tu ricevi un WM_COMMAND:
case WM_COMMAND:
  switch(LOWORD(wParam))
  {
   case IDC_BITRATE:
    if(HIWORD(wParam) == CBN_SELCHANGE)
    {
      nBitrate = SendDlgItemMessage(hWnd, IDC_BITRATE, CB_GETITEMDATA,
(WPARAM)SendDlgItemMessage(hWnd, IDC_BITRATE, CB_GETCURSEL, (WPARAM)0,
(LPARAM)0), (LPARAM)0);
.....

 ovviamente dovrai adattarla al tuo caso):
Mi sono scordato di dirti (ma probabilmente lo sai gia') che l'inserimento
delle stringhe nella combobox vanno fatte durante il processamento del
messaggio WM_INITDIALOG (o WM_CREATE se hai una window normale). Io in
genere mi faccio una funzione InitGUI in cui imposto tutto quello che mi
occorre per l'interfaccia grafica (controlli, menu, immagini, brush...) una
DeinitGUI in cui dealloco quello che avevo allocato nella InitGUI (in genere
memoria, immagini...) e poi una SetGUIState(ID_QUALCOSA) in cui setto
l'interfaccia utente in base ad uno stato preciso del sistema (solotamente
basta disabilitare qualche controllo, qualche bottone delle toolbar o voce
dei menu...). Le funzioni poi sono sempre quelle, le riusi adattandole in
tutti i vari progetti. Le MFC sicuramente saranno piu' evolute da questo
punto di vista, se gia' usi il C++ magari dagli un'occhiata (non nel caso tu
usi il C).

(LPARAM)0), (LPARAM)0);
grazie:D


Le MFC sicuramente saranno piu' evolute da questo
a me le MFC non stanno simpatice ^^;;;;;


Riguarda sull'sdk!
Devi inviare al controllo COMBOBOX un messaggio CB_ADDSTRING.
Ciao.
Ph.

Ho provato a implementare il codice...
DialogBox proc
...
WM_INITDIALOG:
SendDlgItemMessage (hwnd, ID_NODOLIST, CB_ADDSTRING,
0,(LPARAM)(LPCTSTR) TEXT ("CIAO"));
...
dove ID_NODOLIST e' una combobox della mia dialog e hwnd l'HWND della
Dialog (e' una dialog modal).
ma non funziona: la combo box rimane vuota :(.


, /
*
cgo...@genie.com
*/ says...

Non e' che nel resource editor hai disegnato la combobox troppo bassa? 
Il rettangolo che tracci col mouse e' quello che indica le dimensioni 
con la "tendina" (la lista) aperta.
Luca

Assicurati che il combobox, nell'editor di risorse, abbia una
dimensione sufficiente (aperta) per leggere almeno una voce.
Vedi la dimensione di apertura della combo, cliccando sul 
suo pulsantino nell'editor di risorse.
Ciao
Ph.

0,(LPARAM)(LPCTSTR) TEXT ("CIAO"));
Credo che basti fare il cast a LPARAM...
Ciao
Ph.

, 
Phon...@dontsendme.spam says...

Si, lo so, e' una mia mania fare i cast in cascata... Lo faccio per 
ricordarmi i vari data type da passare, ma in effetti e' inutile, basta 
(LPARAM).
Luca

con la "tendina" (la lista) aperta.
non mi e' sembrava troppo bassa... cmq provo a vedere se ingrandendola
si vede qualcosa.


si vede qualcosa.
le ho ridisegnate ed ora funziona.
Grazie per l'aiuto!!!
