Zprávy tlačítek
Tlačítko může posílat zprávy do nadřazeného okna a nadřazené okno může odesílat zprávy na tlačítko.
V této části jsou popsána následující témata.
- odesílání zpráv do tlačítek
- zpracování zpráv z tlačítka
- zprávy s oznámením z tlačítek
- barevných zpráv tlačítka
- Výchozí zpracování zpráv tlačítkem
- související témata
Odesílání zpráv do tlačítek
Nadřazené okno může odesílat zprávy na tlačítko v překrývajícím nebo podřízeném okně pomocí funkce SendMessage nebo může odesílat zprávy na tlačítko v dialogovém okně pomocí SendDlgItemMessage, CheckDlgButton, CheckRadioButtona IsDlgButtonChecked funkcí.
Aplikace může pomocí BM_GETCHECK zprávy načíst stav zaškrtnutí zaškrtávacího políčka nebo přepínače. Aplikace může také pomocí zprávy BM_GETSTATE načíst aktuální stavy tlačítka (stav kontroly, stav vložení a stav fokusu). Pokud chcete získat informace o určitém stavu, použijte bitovou masku na vrácené hodnotě stavu.
Zpráva BM_SETCHECK nastaví stav zaškrtnutí zaškrtávacího políčka nebo přepínače; zpráva vrátí nulu. Zpráva BM_SETSTATE nastaví stav stisknutí tlačítka; tato zpráva také vrátí nulu. Zpráva BM_SETSTYLE změní styl tlačítka. Je určen pro změnu stylů tlačítek v rámci typu (například změna zaškrtávacího políčka na automatické zaškrtávací políčko). Není určen pro změnu mezi typy (například změna zaškrtávacího políčka na přepínač). Aplikace by neměla měnit tlačítko z jednoho typu na jiný.
Tlačítko stylu BS_BITMAP nebo BS_ICON místo textu zobrazuje rastrový obrázek nebo ikonu. Zpráva BM_SETIMAGE přidruží úchyt k rastru nebo ikoně s tlačítkem. Zpráva BM_GETIMAGE načte úchyt na rastrový obrázek nebo ikonu přidruženou k tlačítku.
Aplikace může také použít DM_GETDEFID zprávu k načtení identifikátoru výchozího ovládacího prvku push button v dialogovém okně. Aplikace může použít DM_SETDEFID zprávu k nastavení výchozího tlačítka pro dialogové okno.
Volání CheckDlgButton nebo CheckRadioButton funkce je ekvivalentní odeslání zprávy BM_SETCHECK. Volání funkce IsDlgButtonChecked odpovídá odeslání zprávy BM_GETCHECK.
Zpracování zpráv z tlačítka
Oznámení z tlačítka se odesílají buď jako WM_COMMAND, nebo WM_NOTIFY zprávy. Informace o tom, která zpráva se používá, najdete na referenční stránce pro každé oznámení.
Další informace o zpracování zpráv naleznete v tématu Ovládací zprávy. Viz také Zprávy spouštěné tlačítkem.
Zprávy oznámení z tlačítek
Když uživatel klikne na tlačítko, změní se jeho stav a tlačítko odešle kódy oznámení ve formě WM_COMMAND zpráv do nadřazeného okna. Například ovládací prvek stisknutým tlačítkem odešle kód oznámení BN_CLICKED pokaždé, když uživatel tlačítko zvolí. Ve všech případech (s výjimkou BCN_HOTITEMCHANGE) obsahuje slovo wParam identifikátor ovládacího prvku, výraz wParam wParam obsahuje kód oznámení a parametr lParam obsahuje popisovač ovládacího okna.
Odpověď zprávy i nadřazeného okna závisí na typu, stylu a aktuálním stavu tlačítka. Následují kódy oznámení tlačítek, které by aplikace měla monitorovat a zpracovávat.
Kód oznámení | Popis |
---|---|
BCN_HOTITEMCHANGE | Myš byla zadána nebo opustila klientskou oblast tlačítka. |
BN_CLICKED | Uživatel klikl na tlačítko. |
BN_DBLCLK nebo BN_DOUBLECLICKED | Uživatel poklikal na tlačítko. |
BN_DISABLE | Tlačítko je zakázané. |
BN_PUSHED nebo BN_HILITE | Uživatel stiskl tlačítko. |
BN_KILLFOCUS | Tlačítko ztratilo fokus klávesnice. |
BN_PAINT | Tlačítko by mělo být namalováno. |
BN_SETFOCUS | Tlačítko získalo fokus klávesnice. |
BN_UNPUSHED nebo BN_UNHILITE | Tlačítko se už nenasunou. |
Tlačítko odešle BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUSa BN_UNPUSHED kódy oznámení pouze v případě, že má styl BS_NOTIFY. BN_DBLCLK kódy oznámení se automaticky odesílají pro tlačítka BS_USERBUTTON, BS_RADIOBUTTONa BS_OWNERDRAW. Ostatní typy tlačítek odesílají BN_DBLCLK jenom v případě, že mají styl BS_NOTIFY. Všechna tlačítka odesílají kód oznámení BN_CLICKED bez ohledu na jejich styly tlačítek.
U automatických tlačítek systém změní stav nabízení a nakreslí tlačítko. V tomto případě aplikace obvykle zpracovává pouze kódy oznámení BN_CLICKED a BN_DBLCLK. U tlačítek, která nejsou automatická, aplikace obvykle reaguje na kód oznámení odesláním zprávy, která změní stav tlačítka. Informace o odesílání zpráv na tlačítka naleznete v tématu Odesílání zpráv do tlačítek.
Když uživatel vybere tlačítko nakreslené vlastníkem, tlačítko odešle nadřazené okno WM_DRAWITEM zprávu obsahující identifikátor ovládacího prvku, který se má nakreslit, a informace o jeho rozměrech a stavu.
Barevné zprávy tlačítka
Systém poskytuje výchozí hodnoty barev pro tlačítka. Aplikace může načíst výchozí hodnoty pro tyto barvy zavoláním funkce GetSysColor nebo nastavením hodnot voláním SetSysColors funkce. V následující tabulce jsou uvedeny výchozí hodnoty barev tlačítek.
Hodnota | Barevný prvek |
---|---|
COLOR_BTNFACE | Tváře tlačítek. |
COLOR_BTNHIGHLIGHT | Oblast zvýraznění tlačítka (horní a levý okraj) |
COLOR_BTNSHADOW | Oblast stínu (dolní a pravé okraje) tlačítka |
COLOR_BTNTEXT | Běžný (negrayovaný) text v tlačítkách |
COLOR_GRAYTEXT | Zakázaný (šedý) text v tlačítkách Tato barva je nastavená na hodnotu 0, pokud aktuální ovladač zobrazení nepodporuje plnou šedou barvu. |
COLOR_WINDOW | Pozadí oken. |
COLOR_WINDOWFRAME | Rámečky oken. |
COLOR_WINDOWTEXT | Text v oknech |
Volání SetSysColors má vliv na všechny aplikace, takže byste tuto funkci neměli volat pro přizpůsobení tlačítek pro vaši aplikaci.
Systém před nakreslením tlačítka odešle zprávu WM_CTLCOLORBTN do nadřazeného okna tlačítka. Tato zpráva obsahuje popisovač kontextu zařízení tlačítka a popisovač podřízeného okna. Nadřazené okno může pomocí těchto úchytů změnit text a barvy pozadí tlačítka. Na nadřazené okno, které zprávu zpracovává, ale reagují pouze tlačítka nakreslená vlastníkem.
Výchozí zpracování zpráv tlačítkem
Procedura okna pro předdefinované tlačítko třídy okna okna provádí výchozí zpracování pro všechny zprávy, které ovládací procedura tlačítka nezpracová. Když ovládací procedura tlačítka vrátí FALSE pro libovolnou zprávu, předdefinovaná procedura okna zkontroluje zprávy a provede výchozí akce uvedené v následující tabulce.
Zpráva | Výchozí akce | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BM_CLICK | Odešle tlačítko WM_LBUTTONDOWN a WM_LBUTTONUP zprávu a pošle nadřazené okno BN_CLICKED kód oznámení. | ||||||||||||||||
BM_GETCHECK | Vrátí stav kontroly tlačítka. | ||||||||||||||||
BM_GETIMAGE | Vrátí popisovač rastrového obrázku nebo ikony přidružené k tlačítku nebo NULL, pokud tlačítko nemá žádný rastrový obrázek nebo ikonu. | ||||||||||||||||
BM_GETSTATE | Vrátí aktuální stav kontroly, stav vložení a stav fokusu tlačítka. | ||||||||||||||||
BM_SETCHECK | Nastaví stav zaškrtnutí pro všechny styly přepínačů a zaškrtávací políčka. Pokud je parametr wParam větší než nula přepínačů, zobrazí se tlačítko WS_TABSTOP styl. | ||||||||||||||||
BM_SETIMAGE | Přidruží zadaný rastrový obrázek nebo úchyt ikony k tlačítku a vrátí úchyt k předchozímu rastru nebo ikoně. | ||||||||||||||||
BM_SETSTATE | Nastaví stav stisknutí tlačítka. U tlačítek nakreslených vlastníkem se zpráva WM_DRAWITEM odešle do nadřazeného okna, pokud se změnil stav tlačítka. | ||||||||||||||||
BM_SETSTYLE | Nastaví styl tlačítka. Pokud je slovo lParam parametru nízkého pořadí TRUE, tlačítko se překreslí. | ||||||||||||||||
WM_CHAR | Zaškrtne políčko nebo automatické zaškrtávací políčko, když uživatel stiskne klávesy plus (+) nebo rovná se (=). Zruší zaškrtnutí nebo automatické zaškrtávací políčko, když uživatel stiskne klávesu minus (–). | ||||||||||||||||
WM_ENABLE | Nakreslí tlačítko. | ||||||||||||||||
WM_ERASEBKGND | Vymaže pozadí tlačítek nakreslených vlastníkem. Pozadí jiných tlačítek se vymažou jako součást WM_PAINT a zpracování WM_ENABLE. | ||||||||||||||||
WM_GETDLGCODE | Vrátí hodnoty, které označují typ vstupu zpracovávaného výchozí procedurou tlačítka, jak je znázorněno v následující tabulce.
|
||||||||||||||||
WM_GETFONT | Vrátí popisovač aktuálního písma. | ||||||||||||||||
WM_KEYDOWN | Stiskne tlačítko, pokud uživatel stiskne mezerník. | ||||||||||||||||
WM_KEYUP | Uvolní zachytávání myši pro všechny případy kromě klávesy TAB. | ||||||||||||||||
WM_KILLFOCUS | Odebere obdélník fokusu z tlačítka. U tlačítek push a výchozích tlačítek je obdélník fokusu neplatný. Pokud tlačítko obsahuje zachytávání myši, uvolní se zachytávání, tlačítko se neklikne a odebere se jakýkoli stav push. | ||||||||||||||||
WM_LBUTTONDBLCLK | Odešle kód oznámení BN_DBLCLK do nadřazeného okna pro přepínače a tlačítka nakreslená vlastníkem. U jiných tlačítek se dvojitým kliknutím zpracuje jako WM_LBUTTONDOWN zpráva. | ||||||||||||||||
WM_LBUTTONDOWN | Zvýrazní tlačítko, pokud je pozice kurzoru myši v obdélníku klienta tlačítka. | ||||||||||||||||
WM_LBUTTONUP | Uvolní zachytávání myši, pokud tlačítko obsahovalo zachycení myši. | ||||||||||||||||
WM_MOUSEMOVE | Provede stejnou akci jako WM_LBUTTONDOWN, pokud tlačítko obsahuje zachytávání myši. V opačném případě se neprovede žádná akce. | ||||||||||||||||
WM_NCCREATE | Změní libovolné tlačítko BS_OWNERDRAW na tlačítko BS_PUSHBUTTON. | ||||||||||||||||
WM_NCHITTEST | Vrátí hodnotu HTTRANSPARENT, pokud je ovládací prvek tlačítka skupinové pole. | ||||||||||||||||
WM_PAINT | Nakreslí tlačítko podle jeho stylu a aktuálního stavu. | ||||||||||||||||
WM_SETFOCUS | Nakreslí obdélník fokusu na tlačítko, na které je fokus. U přepínačů a automatických přepínačů se nadřazené okno odešle BN_CLICKED kód oznámení. | ||||||||||||||||
WM_SETFONT | Nastaví nové písmo a volitelně aktualizuje okno. | ||||||||||||||||
WM_SETTEXT | Nastaví text tlačítka. V případě skupinového pole se zpráva před překreslením pole skupiny novým textem přebarví přes existující text. | ||||||||||||||||
WM_SYSKEYUP | Uvolní zachytávání myši pro všechny případy kromě klávesy TAB. |
Předdefinovaná procedura okna předává všechny ostatní zprávy DefWindowProc funkce pro výchozí zpracování.
Související témata