Zgłębianie indiańskiej duszy jest jak nurkowanie w kowadle – najczęściej boli od tego głowa.
5. Po kliknięciu karty Styks z widocznej tam listy View wybierz pozycję Report. Okno
dialogowe powinno wyglądać teraz dokładnie jak na rysunku 6.4.
Przydzielenie liście szczegółowej zmiennej CListCtrl
1. Jednym ze znanych już sposobów otwórz CIassWizard.
2. Kliknij kartę Member Yariables.
3. Wybierz pozycję CListsDlg spośród obecnych na liście Ciass Name.
4. Następnie zaznacz pozycję IDC_SELECTED_DIRS z listy Control IDs.
5. Kliknij Add Variable.
6. Upewnij się, że lista rozwijana Category wyświetla Control, a Variable Type pokazuje
pozycję CListCtri.
7. W polu Member Variable Name wpisz m_lcDirsDetails, a następnie kliknij OK.
8. Kliknij OK, aby zamknąć CIassWizard.
PATRZ TAKŻE
^ Więcej informacji o listach szczegółowych (kontrolkach list), ich stylach i wykorzystaniu
znajduje się w rozdziale 19.
Zapełnianie list
Ponieważ listy szczegółowe służą wyświetlaniu i dokonywaniu selekcji różnych ele-
mentów, należy tę listę nimi wypełnić. Każdy wpis wprowadzony na listę staje się jej
132 Poznaj Visual C++ 6
elementem. Jakkolwiek mechanizm ten jest podobny dla wszystkich typów list, to podczas
dalszej lektury przekonamy się, że każda z list posiada specyficzne właściwości.
Umieszczanie elementów na liście kombinowanej
Lista kombinowana jest jedyną spośród list, które można wypełniać za pośrednictwem
edytora zasobów. Przeprowadzamy ten proces, wykorzystując kartę Data w oknie dialogowym
właściwości listy. Przykład widoczny jest na rysunku 6.5. Każda pozycja listy może zostać
wprowadzona poprzez wpis w polu Enter Listbox Items. Jeśli zachodzi potrzeba dopisywania
kolejnych pozycji w ten sposób, należy wciskać kombinację CtH+Enter po każdym wpisie,
ponieważ naciśnięcie samego klawisza Enter spowoduje zamknięcie okna. Praktyka taka nie
jest jednakże stosowana. Zwykle listę wypełnia się w trakcie pracy programu, często poprzez
funkcję OninitDialog (). Osnowa MFC wywołuje tę funkcję przed otwarciem okna
dialogowego.
s® t
Entet
listboK
iterns:
Generał s Data i Slytes | Exlended Stytes
Disdnction *J „, Meri( ' Credit " :' Pass --Fail ::-
,., , , ,, , ^,tf|
Rysunek 6.5. Karta Data w oknie właściwości listy kombinowanej
Klasą MFC, obsługującą listy kombinowane jest CComboBox. Klasa ta posiada kilka
zaimplementowanych funkcji odpowiedzialnych za umieszczanie na liście nowych elementów i
usuwanie obecnych. Każdy nowo dodany element opatrzony zostaje numerem, który pozwala później na
odwoływanie się do niego.
Tabela 6.4. Funkcje klasy CComboBox związane z zawartością listy
Nazwa funkcji Opis
AddString Dodaje nowy element na końcu listy lub w miejscu wynikającym z ustalonego
porządku sortowania
DeleteString Usuwa element z listy
InsertString Umieszcza element w wybranym punkcie listy
ResetContent Usuwa całą zawartość listy
Dir Specjalny tryb służący umieszczaniu na liście nazw plików jako elementów listy
Używanie list_______________________________________ 133
W przykładowym programie Lists lista kombinowana zostanie wypełniona za pośrednictwem
funkcji okna dialogowego OninitDialog () wykazem katalogów pobranym za pomocą pewnych funkcji
globalnych systemu Windows. Najpierw musimy jednak zadeklarować nową zmienną
PopulateCombo()o typie zwracanej wartości void. Następnie należy zmodyfikować zawartość funkcji
poprzez wpisanie kodu zawartego na listingu 6. l, od linii 28. Na koniec będziemy musieli jeszcze
wpisać kod zawarty w liniach 34-53 tego samego listingu.
Listing 6. l. LST06_1 .CPP — wypełnianie listy kombinowanej
1 BOOL CListsDlg::OninitDialog()
2 (
3 CDialog::OninitDialog();
4
5 // Dodaj pozycję "About..." do menu systemowego.
6 // IDM ABOUTBOX musi pozostawać w zasięgu poleceń systemu. 1
ASSERTf(IDM_ABOUTBOX & OxFFFO) == IDM_ABOUTBOX);
8 ASSERT(IDM_ABOUTBOX < OxFOOO);
9
10 CMenu* pSysMenu = GetSystemMenu(FALSE);
11 if (pSysMenu != NULL)
12 (
13 CString strAboutMenu;
14 strAboutMenu.LoadString(IDS_ABOUTBOX) ;
15 if (!strAboutMenu