Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Dialog výběru složky a naplnění ListBoxu soubory
winapi_logo
18. prosince 2002, 00.00 | V tomto pokračování se dotkneme 2 témat. Využijeme ListBoxu z minulého dílu,
abychom si ukázali, jak jej lze naplnit soubory ze zvolené složky. V té
souvislosti se naučíme použít systémový dialog umožňující uživateli vybrat
složku.
V tomto pokračování se dotkneme 2 témat. Využijeme ListBoxu z minulého dílu, abychom si ukázali, jak jej lze naplnit soubory ze zvolené složky. V té souvislosti se naučíme použít systémový dialog umožňující uživateli vybrat složku.
Dialog výběru složkyNejprve si ukažme, jak vytvořit dialog pro výběr složky, aniž bychom museli použít běžný dialog pro výběr souboru (což by bylo poněkud křečovité, i když řešitelné), jehož ukázku vidíte na obrázku:
Jádrem je použití funkce SHBrowseForFolder, která je deklarovaná v hlavičkovém souboru shlobj.h, který si tedy musíme vložit do zdrojového kódu. Pro použití této funkce musíme vytvořit vlastní callback funkci, která má parametry jako procedura okna a do které jsou posílány určité zprávy v době kdy je zobrazen dialog výběru složky. Zpráva BFFM_SELCHANGED přijde, pokud uživatel změní aktuálně vybranou složku. My pak máme možnost vypsat tuto složku do stavového textu (nad oknem se stromem složek). Při zachycení zprávy BFFM_INITIALIZED, která přijde jednou bezprostředně po inicializaci dialogu, zase můžeme nastavit požadovanou počáteční složku procházení. Pokud bychom chtěli, můžeme také pomocí zprávy BFFM_SETOKTEXT nastavit vlastní text tlačítku OK. Kód této funkce může tedy vypadat následovně:
|
Nyní jak vypadá vlastní vyvolání dialogu. Vytvoříme si funkci, v jejích parametrech si budeme předávat požadovanou výchozí složku, okno vlastníka dialogu, vlastní titulek dialogu (který mám možnost změnit) a dále textový buffer, do kterého nám funkce naplní uživatelem vybranou složku. Návratová hodnota funkce nám bude říkat, zda uživatel složku skutečně vybral nebo zda ukončil dialog tlačítkem Storno. Celá funkce pak vypadá takto:
|
Nyní máme vybranou složku a chceme naplnit náš ListBox všemi soubory obsaženými ve vybrané složce. Vzhledem k tomu, že náš ListBox může být uživatelsky kreslený, musíme postupovat různým způsobem. Abychom měli funkci v run-timu univerzální, otestujeme si za běhu, zda je ListBox nastaven jako uživatelsky kreslený, a podle výsledku použijeme jednu nebo druhou variantu. Rozhodovací funkce bude testovat přítomnost jednoho ze stylu ListBoxu označujícího uživatelsky kreslený ListBox - LBS_OWNERDRAWFIXED a LBS_OWNERDRAWVARIABLE. Funkce bude vypadat takto:
|
Jak je vidět z výpisu, pro naplnění ListBoxu soubory z dané složky slouží zpráva LB_DIR. Do ListBoxu jsou jako položky přidána pouze jména souborů bez cesty. V parametru lParam je šablona, ve které s využitím běžně známých takzvaných "divokých znaků" (* a ?) specifikujeme, které soubory mají být přidány. V parametr wParam pak můžeme uvést kombinaci jedné nebo více hodnot, specifikujících, jaké další objekty chceme přidat. Úplný seznam cca 8 hodnot naleznete v popisu této zprávy v dokumentaci, jako příklad uveďme:
- DDL_DIRECTORY - zahrne také podsložky (jejich názvy jsou uvedeny v hranatých závorkách [] )
- DDL_HIDDEN - zahrne do seznamu také skryté soubory
V případě našeho uživatelsky kresleného ListBoxu nemůžeme tuto zprávu použít, neboť potřebujeme při každém jednotlivém přidání souboru nastavit data položky. V příštím pokračování si ukážeme, jak prohledávat obsah složky a získat výčet souborů.
Doprovodný projekt včetně spustitelné release verze si můžete stáhnout zde: dir_listbox.zip (39kB)
Obsah seriálu (více o seriálu):
- Učíme se Win API - motivační úvod
- Učíme se WinAPI - Začínáme
- Učíme se WinAPI - 3.
- Učíme se Win API - 4.
- Učíme se Win API - 5.
- Učíme se Win API - 6.
- Učíme se Win API - 7.
- Učíme se Win API - 8
- Učíme se Win API - 9.
- Učíme se Win API - 10.
- Učíme se Win API - 11.
- Učíme se Win API - 12.
- Učíme se Win API - 13.
- Učíme se Win API - 14.
- Učíme se Win API - 15.
- Učíme se Win API - 16.
- Učíme se Win API - 17.
- Učime se Win API - 18.
- Učime se Win API - 19.
- Učime se Win API - 20.
- Učime se Win API - 21.
- Učime se Win API - 22.
- Učime se Win API - 23.
- Učime se Win API - 24.
- Učíme se Win API - 25.
- Učíme se Win API - 26.
- Učíme se Win API - 27.
- Učíme se Win API - 28.
- Učíme se Win API - uživatelsky kreslený ListBox
- Učíme se Win API - uživatelsky kreslený ListBox II
- Dialog výběru složky a naplnění ListBoxu soubory
- Vyhledávání souborů - zjištění obsahu složky
- Pracujeme s ComboBoxem ve WinAPI
- Pracujeme s ComboBoxem II.
- Rozšířený prvek ComboBoxEx
- Ovládací prvek TrackBar
- Ovládací prvek Progress Bar
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007