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

Tento ovládací prvek využíváme pomocí třídy CStatic, která je vytvořena ze struktury WNDCLASS "STATIC". Vyskytuje se ve třech verzích: text, rámeček a obrázek. Postupně si je všechny popíšeme.

Takhle vypadá static

Vytvoření ovládacího prvku

Ovládací prvky Static se vytváří pomocí funkce Create, která má pět parametrů.

CStatic m_static;
m_static.Create("Statický text",WS_VISIBLE | WS_CHILD | SS_LEFT,
  CRect(10,10,100,35),this,IDC_STATIC1);

Parametry tady popisovat nebudu, myslím, že už je každý zná. Ovšem těm, kteří je neznají doporučuji přečíst si nějaký ze starších článků a tam jsou popsané. Jediné, co nás zde bude zajímat, je styl ovládacího prvku, který určuje, co se vytvoří.

Statický text

Tento typ Staticu pouze zobrazuje text. Nejčastěji se používá k popisu jiných ovládacích prvků, protože k ničemu jinému se nehodí. Dají se k němu přidávat i další příznaky, které určují, jak bude text zarovnán, jestli se bude lámat atd. Některé tyto styly lze využít i u jiných typů staticu (rámeček, obrázek).

SS_LEFT - zarovná text doleva
SS_LEFTNOWORDWRAP - text se nebude zalamovat
SS_CENTER - text bude vycentrovaný
SS_RIGHT - zarovná text doprava
SS_SIMPLE - text bude možno měnit pomocí funkce SetWindowText
SS_SUNKEN - vykreslí kolem vtlačený okraj
SS_CENTERIMAGE - zarovná text svisle

Rámeček

Tento typ slouží pouze k vizuálnímu oddělení komponent a opět se u něho dá nastavit spoustu stylů. Důležité ovšem je, že rámeček nikdy nezobrazuje žádný text. I kdyby jste mu ho předali ve funkci Create, nic nezobrazí.

SS_BLACKFRAME - vtlačený obdélník vykreslený barvou COLOR_WINDOWFRAME (černá)
SS_BLACKRECT - obdélník vyplněný barvou COLOR_WINDOWFRAME (černá)
SS_ETCHEDFRAME - vtlačený obdelník
SS_ETCHEDHORZ - vtlačený obdélník s horním a dolním okrajem
SS_ETCHEDVERT - vtlačený obdélník s levým a pravým okrajem
SS_GRAYFRAME - vtlačený obdélník vykreslený barvou COLOR_BACKGROUND (šedá)
SS_GRAYRECT - obdélník vyplněný barvou COLOR_BACKGROUND (šedá)
SS_WHITEFRAME - vtlačený obdélník vykreslený barvou COLOR_WINDOW (bílá)
SS_WHITERECT - obdélník vyplněný barvou COLOR_WINDOW (bílá)

Obrázek

Zde máme na výběr tři různé styly:

SS_BITMAP - v ovládacím prvku se bude zobrazovat obrázek
SS_ICON - v ovládacím prvku se bude zobrazovat ikona nebo kurzor
SS_ENHMETAFILE - bude se zobrazovat metasoubor

Když už tedy máme ovládací prvek vytvořen, zbývá nám pouze nastavit obrázek, který se bude zobrazovat. To se provádí pomocí funkcí SetBitmap , SetIcon , SetCursor a SetEhnMetaFile . Ty požadují jediný parametr a to je manipulátor obrázku. Pokud tedy máme uložen obrázek ve zdroji pod jménem IDB_OBRAZEK, použijeme k získání manipulátoru funkci LoadBitmap .

HBITMAP hBit=LoadBitmap(AfxGetINstanceHandle(),IDB_OBRAZEK);
m_static.SetBitmap(nBit);

Hlášení staticu

Pokud z nějakého důvodu potřebujeme zachytit události, jako kliknutí na ovládací prvek, nemusíme hledat daleko. Stačí přidat ke stylu okna příznak SS_NOTIFY a pak pouze použít některé z těchto hlášení.

ON_STN_CLICKED - po kliknutí na ovl. prvek
ON_STN_DBLCLK - po dvojkliku na ovl. prvek
ON_STD_DISABLE - po zakázání ovl. prvku
ON_STD_ENABLE - po povolení ovl. prvku

Zde je příklad na reakci na kliknutí na ovl. prvek:

//mapa zpráv
ON_STN_CLICKED(IDC_STATIC1,OnStaticClicked)
...
void COkno::OnStaticClicked()
{
  MessageBox("Kliknuto!");
}

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