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.

screen shot of a dialog box containing a labeled list box, text about the selected list box item, and an ok button

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

Referensi Kontrol Kotak Daftar

Tentang Kotak Daftar

Menggunakan Kotak Daftar