Creazione di una casella di riepilogo semplice

Nell'esempio seguente viene illustrato come una routine di finestra di dialogo Crea una casella di riepilogo semplice e riempie i nomi di persone su una squadra di softball. Quando si seleziona un nome nell'elenco, informazioni aggiuntive sul giocatore viene visualizzati nella finestra di dialogo. L'illustrazione seguente mostra la finestra di dialogo.

Casella di riepilogo ha lo stile LBS_STANDARD, una combinazione di LBS_SORT, LBS_NOTIFY, WS_VSCROLL e WS_BORDER. Il codice inizializza la finestra di dialogo durante l'elaborazione del messaggio WM_INITDIALOG . Per ogni nome che viene visualizzato nella casella di riepilogo, il codice invia un messaggio LB_ADDSTRING alla casella di riepilogo. Elaborando il messaggio di notifica di LBN_SELCHANGE , il codice inoltre tiene traccia delle quando cambia la selezione.

#define BUFFER MAX_PATH 
 
#define NAMELENGTH 15 
#define POSITIONLENGTH 20 
#define TEAMSIZE 15 
 
typedef struct 
{ 
    TCHAR tchName[NAMELENGTH]; 
    TCHAR tchPosition[POSITIONLENGTH]; 
    int nGamesPlayed; 
    int nInningsPlayed; 
    double xBattingAverage; 
    TCHAR tchFoodName[NAMELENGTH]; 
} Player; 
 
Player Roster[] = 
{ 
        {"Alan", "Center field", 17, 56, .375, "Cannelloni"}, 
        {"Colin", "Pitcher", 26, 96, .456, "Lefse"}, 
        {"Cindy", "Second base", 13, 58, .207, "Tequila"}, 
        {"Dave", "First base", 28, 138, .508, "Suds"}, 
        {"David", "Center field", 18, 101, .612, "Bok Choy"} 
        {"Jack", "Pitcher", 27, 110, .542, "Animal Crackers"}, 
        {"Julie", "Right field", 22, 101, .509, "Mashed Potatoes"}, 
        {"Karen", "Second base", 26, 140, .238, "Pez"}, 
        {"Kathie", "Left field", 26, 127, .353, "Baba Ganouj"}, 
        {"Matt", "Shortstop", 24, 112, .579, "Oats"}, 
        {"Miriam", "Right field", 24, 112, .393, "Zotz"}, 
        {"Pete", "Shortstop", 26, 90, .608, "Beet"}, 
        {"Seth", "Center field", 20, 76, .407, "Otter Pop"}, 
        {"Suzanna", "Catcher", 16, 53, .286, "Toast"}, 
        {"Wendy", "Third base", 25, 154, .493, "Ham"}, 
    }; 
 
BOOL APIENTRY DlgTeamProc( 
    HWND hDlg,            // window handle to dialog box 
    UINT message,         // type of message 
    UINT wParam,          // message-specific information 
    LONG lParam)          // message-specific information 
{ 
    TCHAR tchBuffer[BUFFER]; 
    int nItem; 
    int i; 
    HWND hwndList; 
 
    switch (message) 
    { 
        case WM_INITDIALOG: 
        { 
            hwndList = GetDlgItem(hDlg, IDL_SOFTBALL); 
 
            // Initialize the list box (fill it with player names). 
 
            for (i = 0; i < TEAMSIZE; i++) 
            { 
                SendMessage(hwndList, LB_ADDSTRING, 0, 
                    (LPARAM) Roster[i].tchName); 
                SendMessage(hwndList, LB_SETITEMDATA, i, (LPARAM) i); 
            } 
            SetFocus(hwndList); 
            return FALSE; 
        } 
 
        case WM_COMMAND: 
            switch (LOWORD(wParam)) 
            { 
                case IDL_SOFTBALL: 
                    switch (HIWORD(wParam)) 
                    { 
                        case LBN_SELCHANGE: 
 
                           // Show the selected player's statistics. 
 
                           hwndList = GetDlgItem(hDlg, IDL_SOFTBALL); 
                           nItem = SendMessage(hwndList, LB_GETCURSEL, 
                               0, 0); 
                           i = SendMessage(hwndList, LB_GETITEMDATA, 
                               nItem, 0); 
 
                           SetDlgItemText(hDlg, IDS_POS, 
                               Roster[i].tchPosition); 
                           SetDlgItemText(hDlg, IDS_GAME, 
                               _itoa(Roster[i].nGamesPlayed, 
                               tchBuffer, 10)); 
                           SetDlgItemText(hDlg, IDS_INN, 
                               _itoa(Roster[i].nInningsPlayed, 
                               tchBuffer, 10)); 
                           SetDlgItemText(hDlg, IDS_BA, 
                               _gcvt(Roster[i].xBattingAverage, 
                               3, tchBuffer)); 
                           SetDlgItemText(hDlg, IDS_FOOD, 
                               Roster[i].tchFoodName); 

                           return TRUE; 
                   } 
                   break; 
 
                case IDOK: 
                case IDCANCEL: 
 
                  // Destroy the dialog box. 
 
                  EndDialog(hDlg, TRUE); 
                  return TRUE; 
 
                default: 
                  return FALSE; 
            } 
 
        default: 
            return FALSE; 
    } 
} 
 

Rimedio: Inserire il CD-ROM CD di MSDN Library.

Index