Ovládací prvek Progress (MFC a C++)

Pokud jste vytvořili nějakou hodně složitou aplikaci, určitě jste se setkali se situací, kdy aplikace provádí nějakou zdlouhavou operaci a vy potřebujete uživateli ukazovat její průběh. A právě od toho je tu ovládací prvek Progress neboli ukazatel průběhu.

Takhle vypadá Progress

Tento ovládací prvek má tvar malého protáhlého obdélníku vyplněného buď malými čtverečky nebo plně vybarveného barvou. V MFC ho zastupuje třída CProgressCtrl a k jeho užití potřebujeme hlavičkový soubor afxcmn.h . Nejprve tedy, jak se prvek vytvoří.

Vytvoření ukazatele průběhu

Jelikož každá komponenta v MFC je odvozena od třídy CWnd, tak jako vždy, tak i tentokrát použijeme k vytvoření členskou funkci Create. Zde je příklad:

CProgressCtrl m_ukazatel;
m_ukazatel.Create(WS_VISIBLE | WS_CHILD,CRect(10,10,400,70),this,0x100);

První parametr označuje styl okna a mimo ty základní (WS_něco) se používají tyto dva:

PBS_SHOOTH - Vytvořený ovl. prvek nebude složen z čtverečků, ale bude celistvý.
PBS_VERTICAL - Ovl. prvek bude vertikálně orientován

Zobrazování průběhu

U tohoto ovládacího prvku můžeme nastavit pouze rozsah a pozici. Výchozí hodnoty jsou pro rozsah 0-100 a pro pozici 0. Pro nastavení rozsahu slouží funkce SetRange a ještě funkce SetRange32 , kterou použijete pouze pokud budete používat čísla větší než 32768. Rozsah se dá samozřejmě i zpětně zjistit a to pomocí funkce GetRange , kterou můžete použit pro jakkoliv veliká čísla. Příklad:

m_ukazatel.SetRange(0,250);

//nebo také
m_ukazatel.SetRange32(0,94634);

Pro nastavení pozice, která bude zobrazena, slouží hned několik funkcí. Nejprve tedy SetPos , pomocí které určíte absolutní pozici, která bude zobrazena. (Pro opačný efekt slouží GetPos ) Další možnost je použít funkci OffsetPos , které se předá číselná hodnota určující relativní pozici vzhledem k té aktuální. Např. když je na ovl. prvku nastavena pozice 59 a zavolá se funkce OffsetPos(-6) , tak výsledná pozice bude 53. Poslední možnost spočívá v použití funkcí SetStep a StepIt . Nejprve pomocí SetStep nastavíte, o kolik se bude pozice zvětšovat (zmenšovat), a potom pořád dokola voláte StepIt a pozice se vždy buď zvýší nebo sníží o zadanou hodnotu. Souhrnný příklad:

m_ukazatel.SetRange(0,100);	   //Nastavení rozsahu
m_ukazatel.SetPos(48);		   //Absolutní pozice
m_ukazatel.OffsetPos(-14);	   //Relativní posun, výsledná pozice: 34

m_ukazatel.SetStep(3);		   //Nastavení kroku
m_ukazatel.StepIt();		   //Posun o krok, pozice bude 37

A to je pro tentokrát vše. Příště si popíšeme ovládací prvek Slider.

UPOZORNĚNÍ: Jedná se o archiv článků z let 2003 - 2005, uvedené technologie či postupy již mohou být neaktuální.