Condividi tramite


Come creare una casella di riepilogo semplice

In questo argomento viene illustrato come inizializzare e recuperare elementi da una casella di riepilogo semplice.

L'esempio di codice C++ in questo argomento include una procedura di dialogo che riempie una casella di riepilogo con informazioni sui giocatori di una squadra sportiva. Quando l'utente seleziona il nome di un giocatore dall'elenco, le informazioni sul giocatore vengono visualizzate nella finestra di dialogo. Lo stile della finestra per la casella di riepilogo include LBS_SORT, che restituisce un elenco ordinato di elementi. La schermata seguente mostra la finestra di dialogo.

schermata di una finestra di dialogo contenente una casella di riepilogo etichettata, il testo relativo all'elemento casella di riepilogo selezionato e un pulsante OK

Cosa è necessario sapere

Tecnologie

Prerequisiti

  • C/C++
  • Programmazione dell'interfaccia utente di Windows

Disposizioni

L'applicazione deve eseguire le attività correlate alla casella di riepilogo seguenti:

  • Inizializzare la casella di riepilogo
  • Recuperare la selezione dell'utente dalla casella di riepilogo

Nell'esempio di codice C++ seguente, le informazioni sui giocatori vengono archiviate in una matrice di strutture. Durante l'inizializzazione, la routine della finestra di dialogo usa il messaggio LB_ADDSTRING per aggiungere i nomi dei membri del team alla casella di riepilogo (IDC_LISTBOX_EXAMPLE) uno alla volta. Usa anche il messaggio LB_SETITEMDATA per aggiungere l'indice di matrice del lettore alla casella di riepilogo come dati dell'elemento. Successivamente, quando l'utente seleziona un lettore dalla casella di riepilogo, la procedura della finestra di dialogo usa il messaggio LB_GETITEMDATA per recuperare l'indice di matrice corrispondente. Usa quindi l'indice dell'array per recuperare le informazioni del giocatore dall'array.

typedef struct 
{ 
    TCHAR achName[MAX_PATH]; 
    TCHAR achPosition[12]; 
    int nGamesPlayed; 
    int nGoalsScored; 
} Player; 

Player Roster[] = 
{ 
    {TEXT("Haas, Jonathan"), TEXT("Midfield"), 18, 4 }, 
    {TEXT("Pai, Jyothi"), TEXT("Forward"), 36, 12 }, 
    {TEXT("Hanif, Kerim"), TEXT("Back"), 26, 0 }, 
    {TEXT("Anderberg, Michael"), TEXT("Back"), 24, 2 }, 
    {TEXT("Jelitto, Jacek"), TEXT("Midfield"), 26, 3 }, 
    {TEXT("Raposo, Rui"), TEXT("Back"), 24, 3}, 
    {TEXT("Joseph, Brad"), TEXT("Forward"), 13, 3 }, 
    {TEXT("Bouchard, Thomas"), TEXT("Forward"), 28, 5 }, 
    {TEXT("Salmre, Ivo "), TEXT("Midfield"), 27, 7 }, 
    {TEXT("Camp, David"), TEXT("Midfield"), 22, 3 }, 
    {TEXT("Kohl, Franz"), TEXT("Goalkeeper"), 17, 0 }, 
}; 


INT_PTR CALLBACK ListBoxExampleProc(HWND hDlg, UINT message, 
        WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
        {
            // Add items to list. 
            HWND hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE);  
            for (int i = 0; i < ARRAYSIZE(Roster); i++) 
            { 
                int pos = (int)SendMessage(hwndList, LB_ADDSTRING, 0, 
                    (LPARAM) Roster[i].achName); 
                // Set the array index of the player as item data.
                // This enables us to retrieve the item from the array
                // even after the items are sorted by the list box.
                SendMessage(hwndList, LB_SETITEMDATA, pos, (LPARAM) i); 
            } 
            // Set input focus to the list box.
            SetFocus(hwndList); 
            return TRUE;               
        } 

    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDOK:
        case IDCANCEL:
            EndDialog(hDlg, LOWORD(wParam));
            return TRUE;

        case IDC_LISTBOX_EXAMPLE:
            {
                switch (HIWORD(wParam)) 
                { 
                case LBN_SELCHANGE:
                    {
                        HWND hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE); 

                        // Get selected index.
                        int lbItem = (int)SendMessage(hwndList, LB_GETCURSEL, 0, 0); 

                        // Get item data.
                        int i = (int)SendMessage(hwndList, LB_GETITEMDATA, lbItem, 0);

                        // Do something with the data from Roster[i]
                        TCHAR buff[MAX_PATH];
                        StringCbPrintf (buff, ARRAYSIZE(buff),  
                            TEXT("Position: %s\nGames played: %d\nGoals: %d"), 
                            Roster[i].achPosition, Roster[i].nGamesPlayed, 
                            Roster[i].nGoalsScored);

                        SetDlgItemText(hDlg, IDC_STATISTICS, buff); 
                        return TRUE; 
                    } 
                }
            }
            return TRUE;
        }
    }
    return FALSE;
}

riferimento al controllo Casella di riepilogo

Informazioni sulle caselle di riepilogo

Uso delle caselle di riepilogo