Freigeben über


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 die SendMessage-Funktion verwendet wird, oder es kann Nachrichten an eine Schaltfläche in einem Dialogfeld senden, indem die Funktionen SendDlgItemMessage, CheckDlgButton, CheckRadioButton und IsDlgButtonChecked verwendet werden .

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

Die BM_SETCHECK Nachricht legt den Prüfstatus eines Kontrollkästchens oder Optionsfelds fest. die Nachricht gibt null zurück. Die BM_SETSTATE Nachricht legt den Druckzustand einer Schaltfläche fest. Diese Nachricht gibt ebenfalls null zurück. Die BM_SETSTYLE Nachricht ändert den Stil einer Schaltfläche. Es ist für das Ändern von Schaltflächenstilen innerhalb eines Typs konzipiert (z. B. ändern eines Kontrollkästchens in ein automatisches Kontrollkästchen). Es ist nicht für den Wechsel zwischen Typen konzipiert (z. B. das Ändern eines Kontrollkästchens in ein Optionsfeld). Eine Anwendung sollte eine Schaltfläche nicht von einem Typ in einen anderen ändern.

Eine Schaltfläche des BS_BITMAP - oder BS_ICON-Stils zeigt anstelle von Text eine Bitmap oder ein Symbol an. Die BM_SETIMAGE Nachricht verknüpft ein Handle einer Bitmap oder einem Symbol mit einer Schaltfläche. 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 Standard-Schaltflächensteuerelements in einem Dialogfeld abzurufen. Eine Anwendung kann die DM_SETDEFID-Meldung verwenden, um die Standard-Drucktaste für ein Dialogfeld festzulegen.

Das Aufrufen der Funktion CheckDlgButton oder CheckRadioButton 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 von einer Schaltfläche werden entweder als WM_COMMAND oder WM_NOTIFY Nachrichten gesendet. Informationen darüber, welche Nachricht verwendet wird, finden Sie auf der Referenzseite für jede Benachrichtigung.

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

Benachrichtigungsmeldungen von Schaltflächen

Wenn der Benutzer auf eine Schaltfläche klickt, ändert sich ihr Zustand, und die Schaltfläche sendet Benachrichtigungscodes in Form von WM_COMMAND Nachrichten an das übergeordnete Fenster. Beispielsweise sendet ein Drucktastensteuerelement den BN_CLICKED Benachrichtigungscode, wenn der Benutzer die Schaltfläche auswähbt. In allen Fällen (mit Ausnahme von BCN_HOTITEMCHANGE) enthält das Wort mit niedriger Reihenfolge des wParam-Parameters den Steuerelementbezeichner, das Wort mit hoher Reihenfolge von wParam den Benachrichtigungscode und der lParam-Parameter das Steuerelementfensterhandle.

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

Benachrichtigungscode BESCHREIBUNG
BCN_HOTITEMCHANGE Die Maus hat den Clientbereich einer Schaltfläche betreten oder verlassen.
BN_CLICKED Der Benutzer hat auf eine Schaltfläche geklickt.
BN_DBLCLK oder BN_DOUBLECLICKED Der Benutzer hat auf eine Schaltfläche doppelklicken.
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 bemalt werden.
BN_SETFOCUS Die Schaltfläche hat den Tastaturfokus erhalten.
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_SETFOCUS und BN_UNPUSHED Benachrichtigungscodes nur, wenn sie über das BS_NOTIFY Format verfügt. BN_DBLCLK Benachrichtigungscodes werden automatisch für BS_USERBUTTON-, BS_RADIOBUTTON- und BS_OWNERDRAW-Schaltflächen gesendet. Andere Schaltflächentypen senden BN_DBLCLK nur, wenn sie über das BS_NOTIFY Format verfügen. Alle Schaltflächen senden den BN_CLICKED Benachrichtigungscode unabhängig von ihren Schaltflächenformaten.

Bei automatischen Tasten ändert das System den Druckzustand und zeichnet die Taste. 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 Status 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 Nachricht, die den Bezeichner des zu zeichnenden Steuerelements sowie Informationen zu seinen Dimensionen und seinem Zustand enthält.

Schaltflächenfarbenmeldungen

Das System stellt Standardfarbwerte für Schaltflächen bereit. 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
COLOR_BTNFACE Schaltflächenflächen.
COLOR_BTNHIGHLIGHT Markieren Sie den Bereich (der obere und linke Rand) einer Schaltfläche.
COLOR_BTNSHADOW Schattenbereich (unten und rechts) einer Schaltfläche.
COLOR_BTNTEXT Regulärer (nicht formatierter) Text in Schaltflächen.
COLOR_GRAYTEXT Deaktivierter (grauer) Text in Schaltflächen. Diese Farbe wird auf 0 festgelegt, wenn der aktuelle Anzeigetreiber keine einfarbige graue Farbe unterstützt.
COLOR_WINDOW Fensterhintergründe.
COLOR_WINDOWFRAME Fensterrahmen.
COLOR_WINDOWTEXT Text in Fenstern.

 

Das Aufrufen von SetSysColors wirkt sich jedoch auf alle Anwendungen aus, sodass Sie diese Funktion nicht aufrufen sollten, 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.

Schaltflächenstandardmeldungsverarbeitung

Die Fensterprozedur für die vordefinierte Steuerelementfensterklasse führt die Standardverarbeitung für alle Nachrichten durch, die von der Schaltflächensteuerungsprozedur nicht verarbeitet werden. Wenn die Schaltflächensteuerungsprozedur false für eine nachricht zurückgibt, überprüft die vordefinierte Fensterprozedur die Nachrichten und führt die in der folgenden Tabelle aufgeführten Standardaktionen aus.

Nachricht Standardaktion
BM_CLICK Sendet der Schaltfläche einen WM_LBUTTONDOWN und eine WM_LBUTTONUP Nachricht und sendet dem übergeordneten Fenster einen BN_CLICKED Benachrichtigungscode.
BM_GETCHECK Gibt den Überprüfungsstatus der Schaltfläche zurück.
BM_GETIMAGE Gibt ein Handle für die Bitmap oder das Symbol zurück, die der Schaltfläche oder NULL zugeordnet ist, wenn die Schaltfläche keine Bitmap oder kein Symbol enthält.
BM_GETSTATE Gibt den aktuellen Überprüfungszustand, den Pushzustand und den Fokuszustand der Schaltfläche zurück.
BM_SETCHECK Legt den Überprüfungsstatus 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 die WS_TABSTOP Formatvorlage.
BM_SETIMAGE Ordnet der Schaltfläche das angegebene Bitmap- oder Symbolhandle zu und gibt der vorherigen Bitmap oder dem vorherigen Symbol ein Handle zurück.
BM_SETSTATE Legt den Pushzustand der Schaltfläche fest. Bei vom Besitzer gezeichneten Schaltflächen wird eine WM_DRAWITEM Nachricht an das übergeordnete Fenster gesendet, wenn sich der Status der Schaltfläche geändert hat.
BM_SETSTYLE Legt den Schaltflächenstil fest. Wenn das Wort mit niedriger Ordnung des lParam-ParametersTRUE ist, wird die Schaltfläche neu gezeichnet.
WM_CHAR Aktiviert ein Kontrollkästchen oder ein automatisches Kontrollkästchen, wenn der Benutzer die Plustaste (+) oder gleich (=) drückt. Deaktiviert ein Kontrollkästchen oder ein automatisches Kontrollkästchen, 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 verarbeitung von WM_PAINT und WM_ENABLE gelöscht.
WM_GETDLGCODE Gibt Werte zurück, die den Typ der Eingabe angeben, die von der Standardschaltflächenprozedur verarbeitet wird, wie in der folgenden Tabelle gezeigt.
Schaltflächenformat Gibt zurück
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 Taste, wenn der Benutzer die LEERTASTE drückt.
WM_KEYUP Gibt die Mausaufnahme für alle Fälle außer der TAB-TASTE frei.
WM_KILLFOCUS Entfernt das Fokusrechteck von einer Schaltfläche. Bei Drucktasten und Standard-Drucktasten wird das Fokusrechteck ungültig. Wenn die Schaltfläche über die Mausaufnahme verfügt, wird die Aufnahme losgelassen, auf die Schaltfläche wird nicht geklickt, und jeder Pushzustand wird entfernt.
WM_LBUTTONDBLCLK Sendet einen BN_DBLCLK Benachrichtigungscode für Optionsfelder und vom Besitzer gezeichnete Schaltflächen an das übergeordnete Fenster. Bei anderen Schaltflächen wird ein Doppelklick als WM_LBUTTONDOWN-Nachricht verarbeitet.
WM_LBUTTONDOWN Hebt die Schaltfläche hervor, wenn sich die Position des Mauszeigers innerhalb des Clientrechtecks der Schaltfläche befindet.
WM_LBUTTONUP Gibt die Mausaufnahme frei, wenn die Schaltfläche über die Mauserfassung verfügt.
WM_MOUSEMOVE Führt die gleiche Aktion wie WM_LBUTTONDOWN aus, wenn die Schaltfläche über die Mausaufnahme verfügt. Andernfalls wird keine Aktion ausgeführt.
WM_NCCREATE Wandelt eine beliebige BS_OWNERDRAW-Schaltfläche in eine BS_PUSHBUTTON-Schaltfläche um.
WM_NCHITTEST Gibt HTTRANSPARENT zurück, wenn das Schaltflächensteuerelement ein Gruppenfeld ist.
WM_PAINT Zeichnet die Schaltfläche entsprechend ihrem Stil und aktuellen Zustand.
WM_SETFOCUS Zeichnet ein Fokusrechteck auf die Schaltfläche, die den Fokus erhält. Für Optionsfelder und automatische Optionsfelder wird dem übergeordneten Fenster ein BN_CLICKED Benachrichtigungscode 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 übergibt die Nachricht den bereits vorhandenen Text, bevor das Gruppenfeld mit dem neuen Text neu gezeichnet wird.
WM_SYSKEYUP Gibt die Mausaufnahme 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