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++
Učíme se Win API - uživatelsky kreslený ListBox II
winapi_logo
9. prosince 2002, 00.00 | V dnešním pokračování si vylepšíme "souborový" ListBox z minulého článku o následující: volbu zobrazení malé/velké ikony, umožníme přidávat soubory přetažením (Drag and Drop), otevírat soubory poklepáním na položku a trochu změníme vykreslování.
Uživatelsky kreslený ListBox IIV dnešním pokračování si vylepšíme "souborový" ListBox z minulého článku. Budeme implementovat následující:
- volbu zobrazení malé/velké ikony
- umožníme přidávat položky (soubory) přetažením (Drag and Drop)
- otevírat soubory poklepáním (dvojklikem) na položku
- zefektivníme (na námět čtenáře) vykreslování.
- zobrazování pouze názvů souborů bez cesty
Nastavení malé nebo velké ikony si budeme udržovat pro další použití v globální proměnné a dále si vytvoříme funkci pro změnu této volby, která zajistí okamžité překreslení ListBoxu.
|
Vytvoříme si novou funkci na přidání již vybraného souboru, kterou budeme volat ze dvou míst. Dále si změníme způsob získávání handle asociované ikony při vykreslování. Tento handle si uložíme do dat položky při jejím přidání a při vykreslování pak při jeho získání ušetříme nějaký ten takt procesoru.
|
Upravíme si také obsluhu zprávy WM_DRAWITEM. Nyní budeme zobrazovat pouze názvy souborů bez cesty, musíme vzít v úvahu aktuální nastavení malé-velké ikony a handle ikony nyní získáváme z dat položky, které dostaneme jako prvek itemData struktury DRAWITEMSTRUCT. Celá obsluha bude nyní vypadat takto:
|
Jak nyní na realizaci Drag and Drop způsobu přijímání souborů. Aby okno vůbec mohlo být cílem "puštění", musíme toto povolit pomocí funkce DragAcceptFiles, jejíž 2. parametr povolí nebo zakáže příjem položek pomocí Drag and Drop. Toto v našem případě nastavíme nejlépe v obsluze WM_INITDIALOG.
|
Od tohoto okamžiku bude okno dostávat při puštění položky zprávu WM_DROPFILES, jejímž parametrem wParam je handle interní struktury HDROP, ze které získáme potřebná data. Musíme ale nejprve na ListBox aplikovat již dříve probíraný subclassing, tady přesměrování jeho procedury okna na vlastní funkci, což provedeme opět v obsluze WM_INITDIALOG takto:
|
Vlastní procedura okna ListBoxu bude obsluhovat pouze zmíněnou zprávu WM_DROPFILES, při čemž si zavoláme vlastní funkci pro její zpracování. Obě funkce vypadají následovně:
|
Nyní zbývá ještě realizovat schopnost na poklepání (dvojklik) položky příslušný soubor otevřít stejným způsobem jako Průzkumník Windows, tedy v přidruženém programu, pokud takový existuje, nebo přímo spustit pokud jde o spustitelný soubor. Budeme tedy zachytávat v proceduře dialogu oznamovací zprávu LBN_DBLCLK a z ní volat vlastní funkci které předáme handle ListBoxu a která vypadá takto..
|
Pro úplnost si v části kódu procedury dialogu ukážeme její volání. Z procedury dialogu je ve výpisu pouze obsluha oznamovacích zpráv ListBoxu a CheckBoxu přepínajícího zobrazení na malé/velké ikony.
|
Doprovodný projekt včetně spustitelné release verze je ke stažení zde: uk_listbox_2.zip (36 kB)
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