Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
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;
}
Verwante onderwerpen