CreŽren van een eenvoudige keuzelijst

In het volgende voorbeeld demonstreert hoe een dialoogvenster vak procedure maakt u een keuzelijst met eenvoudige en vult deze met de namen van mensen op een softbalteam. Als een naam in de lijst is geselecteerd, wordt in het dialoogvenster extra informatie over de speler weergegeven. De volgende afbeelding ziet u het dialoogvenster.

De keuzelijst heeft de LBS_STANDARD stijl, een combinatie van LBS_SORT, LBS_NOTIFY, WS_VSCROLL en WS_BORDER. De code initialiseert het dialoogvenster tijdens het verwerken van het WM_INITDIALOG bericht. Voor elke naam die wordt weergegeven in de keuzelijst, stuurt de code een LB_ADDSTRING -bericht naar de keuzelijst. Door de LBN_SELCHANGE melding te verwerken, of de code ook controleren de selectie wordt gewijzigd.

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

Index