Bagikan melalui


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.

cuplikan layar kotak dialog yang berisi kotak daftar berlabel, teks tentang item kotak daftar yang dipilih, dan tombol ok

Apa yang perlu Anda ketahui

Teknologi

Prasyarat

  • C/C++
  • Pemrograman Antarmuka Pengguna Windows

Peraturan

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 pemain ke kotak daftar pilihan sebagai data item. Nantinya, saat 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 pemain 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;
}

Referensi Kontrol Kotak Daftar

Tentang Kotak Daftar

Menggunakan kotak daftar