Aracılığıyla paylaş


Basit Liste Kutusu Oluşturma

Bu konu başlığında, basit bir liste kutusundan öğelerin nasıl başlatılıp alınıyor olduğu gösterilmektedir.

Bu konudaki C++ kod örneği, bir spor takımındaki oyuncular hakkındaki bilgilerle bir liste kutusunu dolduran bir iletişim kutusu yordamı içerir. Kullanıcı listeden bir oyuncunun adını seçtiğinde, iletişim kutusunda oyuncu hakkındaki bilgiler görüntülenir. Liste kutusunun pencere stili LBS_SORTiçerir ve bu da öğelerin sıralanmış bir listesiyle sonuçlanır. Aşağıdaki ekran görüntüsü iletişim kutusunu gösterir.

Etiketli liste kutusu, seçili liste kutusu öğesiyle ilgili metin ve tamam düğmesi içeren iletişim kutusunun ekran görüntüsünü

Bilmeniz gerekenler

Teknolojileri

Önkoşullar

  • C/C++
  • Windows Kullanıcı Arayüzü Programlama

Talimatlar

Uygulamanın aşağıdaki liste kutusuyla ilgili görevleri gerçekleştirmesi gerekir:

  • Liste kutusunu başlatma
  • Liste kutusundan kullanıcının seçimini alma

Aşağıdaki C++ kod örneğinde, oyuncular hakkındaki bilgiler bir dizi yapıda depolanır. Başlatma sırasında iletişim kutusu yordamı, ekip üyelerinin adlarını liste kutusuna (IDC_LISTBOX_EXAMPLE) birer birer eklemek için LB_ADDSTRING iletisini kullanır. Ayrıca LB_SETITEMDATA iletisini kullanarak oynatıcının dizi dizinini liste kutusuna öğe verileri olarak ekler. Daha sonra, kullanıcı liste kutusundan bir oynatıcı seçtiğinde, iletişim kutusu yordamı ilgili dizi dizinini almak için LB_GETITEMDATA iletisini kullanır. Ardından dizi dizininden oyuncu bilgilerini almak için dizi dizinini kullanır.

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

Liste Kutusu Denetimi Referans

Liste Kutuları hakkında

Liste Kutularını Kullanarak