Delen via


Hoe een eenvoudige keuzelijst te maken

In dit onderwerp ziet u hoe u items initialiseert en ophaalt uit een eenvoudige keuzelijst.

Het C++-codevoorbeeld in dit onderwerp bevat een dialoogvensterprocedure waarmee een keuzelijst wordt ingevuld met informatie over spelers in een sportteam. Wanneer de gebruiker de naam van een speler in de lijst selecteert, wordt informatie over de speler weergegeven in het dialoogvenster. De vensterstijl voor de keuzelijst bevat LBS_SORT, wat resulteert in een gesorteerde lijst met items. In de volgende schermafbeelding ziet u het dialoogvenster.

schermafbeelding van een dialoogvenster met een gelabelde keuzelijst, tekst over het geselecteerde keuzelijstitem en een knop ok

Wat u moet weten

Technologieën

Voorwaarden

  • C/C++
  • Programmeren van Windows-gebruikersinterface

Aanwijzingen

De toepassing moet de volgende taken uitvoeren die betrekking hebben op de keuzelijst:

  • De keuzelijst initialiseren
  • De selectie van de gebruiker ophalen uit de keuzelijst

In het volgende C++-codevoorbeeld wordt informatie over spelers opgeslagen in een matrix met structuren. Tijdens de initialisatie wordt in de dialoogvensterprocedure het LB_ADDSTRING bericht gebruikt om de namen van teamleden één voor één toe te voegen aan de keuzelijst (IDC_LISTBOX_EXAMPLE). Ook wordt het LB_SETITEMDATA bericht gebruikt om de matrixindex van de speler toe te voegen aan de keuzelijst als itemgegevens. Wanneer de gebruiker later een speler selecteert in de keuzelijst, gebruikt de dialoogvensterprocedure het LB_GETITEMDATA bericht om de bijbehorende matrixindex op te halen. Vervolgens wordt de matrixindex gebruikt om spelergegevens op te halen uit de matrix.

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

besturingselement keuzelijst

Over lijstvakken

Keuzelijsten gebruiken