Sdílet prostřednictvím


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

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.
Styl tlačítka Návraty
BS_AUTOCHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_AUTORADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON
BS_CHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_DEFPUSHBUTTON DLGC_DEFPUSHBUTTON | DLGC_BUTTON
BS_GROUPBOX DLGC_STATIC
BS_PUSHBUTTON DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON
BS_RADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON

 

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í.

ovládacích zpráv