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.

screen shot of a dialog box containing a labeled list box, text about the selected list box item, and an ok button

Informazioni importanti

Tecnologie

Prerequisiti

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

Istruzioni

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 procedura della finestra di dialogo utilizza il messaggio LB_ADDSTRING per aggiungere i nomi dei membri del team alla casella di riepilogo (IDC_LISTBOX_EXAMPLE) uno alla volta. Usa inoltre il messaggio LB_edizione Standard TITEMDATA 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 utilizza il messaggio LB_GETITEMDATA per recuperare l'indice di matrice corrispondente. Usa quindi l'indice della matrice per recuperare le informazioni del lettore dalla matrice.

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;
}

Informazioni di riferimento sul controllo Casella di riepilogo

Informazioni sulle caselle di riepilogo

Utilizzo delle caselle di riepilogo