Schaltflächenmeldungen

Eine Schaltfläche kann Nachrichten an das übergeordnete Fenster senden, und ein übergeordnetes Fenster kann Nachrichten an eine Schaltfläche senden.

Die folgenden Themen werden in diesem Abschnitt erläutert.

Senden von Nachrichten an Schaltflächen

Ein übergeordnetes Fenster kann nachrichten an eine Schaltfläche in einem überlappenden oder untergeordneten Fenster senden, indem es die SendMessage-Funktion verwendet, oder es kann Nachrichten an eine Schaltfläche in einem Dialogfeld senden, indem es die Funktionen SendDlgItemMessage, CheckDlgButton, CheckMessageButtonund IsDlgButtonChecked verwendet.

Eine Anwendung kann die BM _ GETCHECK-Nachricht verwenden, um den Überprüfungszustand eines Kontrollkästchens oder Optionsfelds abzurufen. Eine Anwendung kann auch die BM _ GETSTATE-Nachricht verwenden, um die aktuellen Zustände der Schaltfläche (den Überprüfungszustand, den Pushzustand und den Fokuszustand) abzurufen. Um Informationen zu einem bestimmten Zustand zu erhalten, verwenden Sie eine Bitmaske für den zurückgegebenen Zustandswert.

Die BM _ SETCHECK-Meldung legt den Überprüfungsstatus eines Kontrollkästchens oder Optionsfelds fest. Die Meldung gibt 0 (null) zurück. Die BM _ SETSTATE-Nachricht legt den Pushzustand einer Schaltfläche fest. Diese Meldung gibt ebenfalls 0 (null) zurück. Die BM _ SETSTYLE-Meldung ändert den Stil einer Schaltfläche. Er ist für das Ändern von Schaltflächenstilen innerhalb eines Typs konzipiert (z. B. das Ändern eines Kontrollkästchens in ein automatisches Kontrollkästchen). Er ist nicht für das Ändern zwischen Typen konzipiert (z. B. ändern eines Kontrollkästchens in ein Optionsfeld). Eine Anwendung sollte eine Schaltfläche nicht von einem Typ in einen anderen ändern.

Eine Schaltfläche im Stil BS _ BITMAP oder BS _ ICON zeigt eine Bitmap oder ein Symbol anstelle von Text an. Die BM _ SETIMAGE-Nachricht ordnet einer Bitmap oder einem Symbol ein Handle mit einer Schaltfläche zu. Die BM _ GETIMAGE-Nachricht ruft ein Handle für die Bitmap oder das Symbol ab, die einer Schaltfläche zugeordnet ist.

Eine Anwendung kann auch die DM _ GETDEFID-Nachricht verwenden, um den Bezeichner des standarden Pushschaltfläche-Steuerelements in einem Dialogfeld abzurufen. Eine Anwendung kann die DM _ SETDEFID-Nachricht verwenden, um die Standardschaltfläche für ein Dialogfeld festlegen.

Das Aufrufen der CheckDlgButton- oder CheckKündigungButton-Funktion entspricht dem Senden einer BM _ SETCHECK-Nachricht. Das Aufrufen der IsDlgButtonChecked-Funktion entspricht dem Senden einer BM _ GETCHECK-Nachricht.

Behandeln von Nachrichten über eine Schaltfläche

Benachrichtigungen über eine Schaltfläche werden entweder als WM _ COMMAND- oder WM _ NOTIFY-Nachrichten gesendet. Informationen dazu, welche Nachricht verwendet wird, finden Sie auf der Referenzseite für jede Benachrichtigung.

Weitere Informationen zum Behandeln von Nachrichten finden Sie unter Control Messages. Siehe auch Schaltflächenmeldungen.

Benachrichtigungsmeldungen von Schaltflächen

Wenn der Benutzer auf eine Schaltfläche klickt, ändert sich der Zustand, und die Schaltfläche sendet Benachrichtigungscodes in Form von WM _ COMMAND-Meldungen an das übergeordnete Fenster. Beispielsweise sendet ein Pushschaltfläche-Steuerelement den BN CLICKED-Benachrichtigungscode, _ wenn der Benutzer die Schaltfläche auswählt. In allen Fällen (mit Ausnahme von BCN _ HOTITEMCHANGE)enthält das low-order-Wort des wParam-Parameters den Steuerelementbezeichner, das obere Wort von wParam enthält den Benachrichtigungscode und der lParam-Parameter enthält das Steuerelementfensterhandl.

Sowohl die Nachricht als auch die Antwort des übergeordneten Fensters hängen vom Typ, Stil und aktuellen Zustand der Schaltfläche ab. Im Folgenden finden Sie die Schaltflächenbenachrichtigungscodes, die eine Anwendung überwachen und verarbeiten sollte.

Benachrichtigungscode BESCHREIBUNG
BCN _ HOTITEMCHANGE Die Maus hat den Clientbereich einer Schaltfläche eingegeben oder verlassen.
BN _ GEKLICKT Der Benutzer hat auf eine Schaltfläche geklickt.
BN _ DBLCLK oder BN _ DOUBLECLICKED Der Benutzer hat auf eine Schaltfläche doppelklickt.
BN _ DISABLE Eine Schaltfläche ist deaktiviert.
BN _ PUSHED oder BN _ HILITE Der Benutzer hat eine Schaltfläche gedrückt.
BN _ KILLFOCUS Die Schaltfläche hat den Tastaturfokus verloren.
BN _ PAINT Die Schaltfläche sollte gestrichen werden.
BN _ SETFOCUS Die Schaltfläche hat den Tastaturfokus erlangt.
BN _ UNPUSHED oder BN _ UNHILITE Die Schaltfläche wird nicht mehr gedrückt.

Eine Schaltfläche sendet die Benachrichtigungscodes BN _ DISABLE, BN _ PUSHED, BN _ KILLFOCUS, BN _ PAINT, BN _ SETFOCUSund BN _ UNPUSHED nur dann, wenn sie den Stil BS _ NOTIFY haben. BN _ DBLCLK-Benachrichtigungscodes werden automatisch für die Schaltflächen BS _ USERBUTTON, BS _ RADIOBUTTONund BS _ OWNERDRAW gesendet. Andere Schaltflächentypen senden BN _ DBLCLK nur, wenn sie den Stil BS _ NOTIFY haben. Alle Schaltflächen senden den BN _ CLICKED-Benachrichtigungscode unabhängig von ihren Schaltflächenstilen.

Bei automatischen Schaltflächen ändert das System den Pushzustand und zeichnet die Schaltfläche. In diesem Fall verarbeitet die Anwendung in der Regel nur die Benachrichtigungscodes BN _ CLICKED und BN _ DBLCLK. Bei Schaltflächen, die nicht automatisch sind, antwortet die Anwendung in der Regel auf den Benachrichtigungscode, indem sie eine Nachricht sendet, um den Zustand der Schaltfläche zu ändern. Informationen zum Senden von Nachrichten an Schaltflächen finden Sie unter Senden von Nachrichten an Schaltflächen.

Wenn der Benutzer eine vom Besitzer gezeichnete Schaltfläche auswählt, sendet die Schaltfläche dem übergeordneten Fenster eine WM _ DRAWITEM-Meldung, die den Bezeichner des zu zeichnenden Steuerelements sowie Informationen über seine Dimensionen und seinen Zustand enthält.

Schaltflächenfarbmeldungen

Das System stellt Standardfarbwerte für Schaltflächen zurVerfeinern. Eine Anwendung kann die Standardwerte für diese Farben abrufen, indem sie die GetSysColor-Funktion aufruft, oder die Werte durch Aufrufen der SetSysColors-Funktion festlegen. In der folgenden Tabelle sind die Standardwerte für Schaltflächenfarben aufgeführt.

Wert Element farbig
FARBE _ BTNFACE Schaltflächengesichter.
FARBE _ BTNHIGHLIGHT Hervorhebungsbereich (oberer und linker Rand) einer Schaltfläche.
FARBE _ BTNSHADOW Schattenbereich (der untere und rechte Rand) einer Schaltfläche.
FARBE _ BTNTEXT Regulärer (nicht begrabter) Text in Schaltflächen.
COLOR _ GRAYTEXT Deaktivierter (grauer) Text in Schaltflächen. Diese Farbe wird auf 0 festgelegt, wenn der aktuelle Anzeigetreiber keine Volltongraufarbe unterstützt.
_FARBFENSTER Fensterhintergrund.
COLOR _ WINDOWFRAME Fensterrahmen.
COLOR _ WINDOWTEXT Text in Fenstern.

Der Aufruf von SetSysColors wirkt sich jedoch auf alle Anwendungen aus, daher sollten Sie diese Funktion nicht aufrufen, um Schaltflächen für Ihre Anwendung anzupassen.

Das System sendet vor dem Zeichnen einer Schaltfläche eine _ WM-CTLCOLORBTN-Nachricht an das übergeordnete Fenster einer Schaltfläche. Diese Meldung enthält ein Handle für den Gerätekontext der Schaltfläche und ein Handle für das untergeordnete Fenster. Das übergeordnete Fenster kann diese Handles verwenden, um den Text und die Hintergrundfarben der Schaltfläche zu ändern. Allerdings reagieren nur vom Besitzer gezeichnete Schaltflächen auf das übergeordnete Fenster, das die Nachricht verarbeitet.

Standardnachrichtenverarbeitung der Schaltfläche

Die Fensterprozedur für die vordefinierte Schaltflächen-Steuerelementfensterklasse führt die Standardverarbeitung für alle Nachrichten aus, die von der Schaltflächen-Steuerelementprozedur nicht verarbeitet werden. Wenn die Schaltflächen-Steuerelementprozedur false für jede Nachricht zurückgibt, überprüft die vordefinierte Fensterprozedur die Meldungen und führt die in der folgenden Tabelle aufgeführten Standardaktionen aus.

`Message` Standardaktion
BM_CLICK Sendet der Schaltfläche eine WM_LBUTTONDOWN und eine WM_LBUTTONUP und sendet dem übergeordneten Fenster einen BN_CLICKED Benachrichtigungscode.
BM_GETCHECK Gibt den Überprüfungszustand der Schaltfläche zurück.
BM_GETIMAGE Gibt ein Handle für die Bitmap oder das Symbol zurück, die der Schaltfläche zugeordnet ist, oder NULL, wenn die Schaltfläche keine Bitmap oder kein Symbol enthält.
BM_GETSTATE Gibt den aktuellen Überprüfungs-, Push- und Fokuszustand der Schaltfläche zurück.
BM_SETCHECK Legt den Überprüfungszustand für alle Stile von Optionsfeldern und Kontrollkästchen fest. Wenn der wParam-Parameter für Optionsfelder größer als 0 (null) ist, erhält die Schaltfläche den WS_TABSTOP Format.
BM_SETIMAGE Ordnet der Schaltfläche das angegebene Bitmap- oder Symbolhand handle zu und gibt ein Handle zur vorherigen Bitmap oder dem vorherigen Symbol zurück.
BM_SETSTATE Legt den Pushzustand der Schaltfläche fest. Bei vom Besitzer gezeichneten Schaltflächen wird WM_DRAWITEM nachricht an das übergeordnete Fenster gesendet, wenn sich der Zustand der Schaltfläche geändert hat.
BM_SETSTYLE Legt das Schaltflächenformat fest. Wenn das niedrige Wort des lParam-Parameters TRUEist, wird die Schaltfläche neu gezeichnet.
WM_CHAR Überprüft ein Kontrollkästchen oder automatisches Kontrollkästchen, wenn der Benutzer die Plustasten (+) oder gleich (=) drückt. Setzt ein Kontrollkästchen oder automatisches Kontrollkästchen frei, wenn der Benutzer die Minustaste (–) drückt.
WM_ENABLE Zeichnet die Schaltfläche.
WM_ERASEBKGND Löscht den Hintergrund für vom Besitzer gezeichnete Schaltflächen. Die Hintergründe anderer Schaltflächen werden im Rahmen der WM_PAINT und WM_ENABLE gelöscht.
WM_GETDLGCODE Gibt Werte zurück, die den Typ der Eingabe angeben, die von der Standardschaltfläche verarbeitet wird, wie in der folgenden Tabelle gezeigt.
Schaltflächenformat Rückgabe
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 Gibt ein Handle für die aktuelle Schriftart zurück.
WM_KEYDOWN Drückt die Schaltfläche, wenn der Benutzer die SPACEBAR drückt.
WM_KEYUP Gibt die Mauserfassung für alle Fälle außer der TAB-TASTE frei.
WM_KILLFOCUS Entfernt das Fokusrechteck aus einer Schaltfläche. Bei Pushschaltflächen und Standardtasten wird das Fokusrechteck ungültig. Wenn die Schaltfläche über die Mausaufnahme verfügt, wird die Aufnahme freigegeben, auf die Schaltfläche wird nicht geklickt, und ein Pushzustand wird entfernt.
WM_LBUTTONDBLCLK Sendet einen BN_DBLCLK Benachrichtigungscode an das übergeordnete Fenster für Optionsfelder und vom Besitzer gezeichnete Schaltflächen. Bei anderen Schaltflächen wird ein Doppelklick als WM_LBUTTONDOWN verarbeitet.
WM_LBUTTONDOWN Hebt die Schaltfläche hervor, wenn sich die Position des Mauscursors innerhalb des Clientrechtecks der Schaltfläche befindet.
WM_LBUTTONUP Gibt die Mausaufnahme frei, wenn die Schaltfläche die Mausaufnahme hatte.
WM_MOUSEMOVE Führt die gleiche Aktion wie WM_LBUTTONDOWNaus, wenn die Schaltfläche über die Mausaufnahme verfügt. Andernfalls wird keine Aktion ausgeführt.
WM_NCCREATE Schaltet jede BS_OWNERDRAW Schaltfläche in eine schaltfläche BS_PUSHBUTTON um.
WM_NCHITTEST Gibt HTTRANSPARENT zurück, wenn das Schaltflächen-Steuerelement ein Gruppenfeld ist.
WM_PAINT Zeichnet die Schaltfläche entsprechend ihrem Stil und dem aktuellen Zustand.
WM_SETFOCUS Zeichnet ein Fokusrechteck auf der Schaltfläche, um den Fokus zu erhalten. Für Optionsfelder und automatische Optionsfelder wird dem übergeordneten Fenster ein Benachrichtigungscode BN_CLICKED gesendet.
WM_SETFONT Legt eine neue Schriftart fest und aktualisiert optional das Fenster.
WM_SETTEXT Legt den Text der Schaltfläche fest. Im Fall eines Gruppenfelds zeichnet die Meldung den bereits vorhandene Text, bevor das Gruppenfeld mit dem neuen Text neu gestrichen wird.
WM_SYSKEYUP Gibt die Mauserfassung für alle Fälle außer der TAB-TASTE frei.

Die vordefinierte Fensterprozedur übergibt alle anderen Nachrichten zur Standardverarbeitung an die DefWindowProc-Funktion.

Steuern von Nachrichten