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++
Ovládací prvek Progress Bar
winapi_logo
21. března 2003, 00.00 | V tomto článku si ukážeme práci s prvkem Progress Bar, kterému se česky říká indikátor průběhu.
Ovládací prvek Progress BarV tomto článku se podíváme na práci s ovládacím prvkem Progress Bar Control.
Ovládací prvek Progress Bar Control se běžně používá jako indikátor průběhu nějaké obvykle déletrvající akce. K běžnému uživatelskému folklóru sice patří vtipkování na téma "plynulosti" tohoto zobrazení při kopírování velkého množství souborů nebo různých instalacích. Zde však není na vině Progress Bar, ale obtížnost nebo praktické nemožnost správného algoritmu výpočtu aktuálního řekněme procenta prováděné akce.
K základním úkonům, které se musíme naučit s tímto prvkem provádět, patří následující akce a jim odpovídající zprávy Windows:
- nastavení logického rozsahu - PBM_SETRANGE32
- nastavení aktuální logické pozice - PBM_SETPOS
- zjištění aktuální logické pozice - PBM_GETPOS
V ukázkovém projektu máme ukazatel průběh (Progress Bar). Na stisk tlačítka nastavíme logický rozsah na 20. Znamená to, že indikátor průběhu bude moci nabývat dvacet různých logických pozic. Spustíme časovač (Timer), na který budeme každou sekundu zvětšovat logickou pozici Progress Baru a při zjištění konce zastavíme časovač a pozici vrátíme na počátek (hodnota 0).
Spouštění průběhu budeme volat v obsluze příkazu tlačítka IDC_SPUSTIT (zpráva WM_COMMAND, jak čtenáři seriálu již určitě vědí):
|
V obsluze zprávy WM_TIMER budeme pak volat následující funkci, která zvýší pozici o 1 logickou jednotku a bude hlídat dosažení konce (pozice 20):
|
Dále si ukážeme, jak lze "animovat" prvek Progress Bar ve Windows XP. Abychom mohli následující kód přeložit, musíme nastavit verzi cílové platformy na Windows XP a mít k dispozici dostatečně aktuální verzi Windows SDK. Pokud vám nepůjde z uvedeného důvodu přeložit doprovodný projekt, musíte kód který si nyní ukážeme zapoznámkovat nebo odstranit. Před vložením hlavičkových souborů nastavíme cílovou verzi Windows.
|
Samozřejmě že tento kód můžete přeložit a sestavit na jakékoli platformě, ale vlastní spuštění musíte provést pouze ve Windows XP (nebo vyšších...).
Animaci budeme spouštět a zastavovat na změnu zaškrtnutí Check Boxu (IDC_ANIMOVAT), kterou zachytíme v proceduře dialogu, kterou si nyní ukažme celou i s dříve uvedenými obsluhami zpráv.
|
Funkce pro spuštění a zastavení animace vypadají takto:
|
Jak vidíte v kódu, před spuštěním animace musíme oknu prvku Progress Bar přidat styl PBM_SETMARQUEE, který po zastavení animace opět odebereme - vše pomocí funkce SetWindowLongPtr.
Zde si můžete stáhnout ukázkový projekt včetně spustitelného sestavení release (pro Windows XP) winapi_progressbar.zip (33 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
Diskuse k článku
-
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