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
- Behandeln von Nachrichten über eine Schaltfläche
- Benachrichtigungsmeldungen von Schaltflächen
- Schaltflächenfarbmeldungen
- Standardnachrichtenverarbeitung der Schaltfläche
- Zugehörige Themen
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.
|
||||||||||||||||
| 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.