Cara Membuat Kotak Daftar Sederhana
Topik ini menunjukkan cara menginisialisasi dan mengambil item dari kotak daftar sederhana.
Contoh kode C++ dalam topik ini menyertakan prosedur kotak dialog yang mengisi kotak daftar dengan informasi tentang pemain di tim olahraga. Ketika pengguna memilih nama pemutar dari daftar, informasi tentang pemutar ditampilkan dalam kotak dialog. Gaya jendela untuk kotak daftar menyertakan LBS_SORT, yang menghasilkan daftar item yang diurutkan. Cuplikan layar berikut ini memperlihatkan kotak dialog.
Apa yang perlu Anda ketahui
Teknologi
Prasyarat
- C/C++
- Pemrograman Antarmuka Pengguna Windows
Petunjuk
Aplikasi harus melakukan tugas terkait kotak daftar berikut:
- Menginisialisasi kotak daftar
- Mengambil pilihan pengguna dari kotak daftar
Dalam contoh kode C++ berikut, informasi tentang pemain disimpan dalam array struktur. Selama inisialisasi, prosedur kotak dialog menggunakan pesan LB_ADDSTRING untuk menambahkan nama anggota tim ke kotak daftar (IDC_LISTBOX_EXAMPLE) satu per satu. Ini juga menggunakan pesan LB_SETITEMDATA untuk menambahkan indeks array pemutar ke kotak daftar sebagai data item. Kemudian, ketika pengguna memilih pemutar dari kotak daftar, prosedur kotak dialog menggunakan pesan LB_GETITEMDATA untuk mengambil indeks array yang sesuai. Kemudian menggunakan indeks array untuk mengambil informasi pemutar dari array.
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;
}
Topik terkait