Windows Programmierung: Buttons
|
Einführende Informationen
über die Programmierung von Kontrollelementen werden hier vorausgesetzt.
Stile
Der Stil gibt an, welcher Art der Button ist. Es gibt drei grundsätzliche
Ausprägungen: Pushbutton, Checkbox und Radiobutton.
Pushbutton
Dies ist der gewöhnliche Button, der gedrückt wird und eine Aktion
auslöst, indem er eine WM_COMMAND-Nachricht an das Elternfenster sendet.
In der Variante Default-Pushbutton, ist er etwas stärker umrandet und reagiert,
wenn der Anwender die Return-Taste drückt.
- BS_PUSHBUTTON
- BS_DEFPUSHBUTTON
Checkbox
Ein kleines Rechteck, in dem man ein Kreuz erscheinen und verschwinden lassen kann. Ein Text
befindet sich rechts davon (oder links, wenn man BS_LEFTTEXT angibt).
Das 3-State Element kennt noch einen dritten Zustand: gedimmt zeigt an, daß der Button nicht
anwählbar ist.
Die AUTO-Variante schaltet selbstständig das Kreuz ein und aus.
- BS_CHECKBOX
- BS_3STATE
- BS_AUTOCHECKBOX
- BS_AUTO3STATE
Radiobutton
Ein Radiobutton verhält sich einzeln gleich einer Checkbox.
Lediglich im Aussehen ist ein Unterschied sichtbar, der Radiobutton
ist rund und hat einen Punkt in der Mitte, wenn er ausgewählt ist.
In Gruppen zusammengefaßt, kann aber nur maximal einer von Ihnen angewählt
werden. In der AUTO-Variante braucht dies nicht einmal der Programmierer selbst
zu realisieren. Zu einer Gruppe gehören diejenigen, die das gleiche Elternfenster
besitzen. Dies wird üblicherweise durch den Einsatz eines Rahmens erreicht.
BS_RADIOBUTTON
BS_AUTORADIOBUTTON
Groupbox
Dies ist ein solcher Rahmen, um Radiobuttons zu gruppieren. In der linken oberen
Ecke kann ein Text stehen, um eine gemeinsame Überschrift zu haben.
BS_GROUPBOX
Weitere Attribute
- BS_OWNERDRAW
-
Der Programmierer übernimmt die Darstellung des Buttons
- BS_LEFTTEXT
-
Bei Radiobuttons und Checkboxes erscheint der Text links vom Feld.
Ereignis Button angeklickt
Während andere Kontrollelemente noch prüfen müssen, welches Ereignis eingetroffen
sein könnte, ist dies bei Buttons im Allgemeinen ein Klick. Dadurch ergibt sich eine
vereinfachte Ereignisabfrage:
case WM_COMMAND:
switch(LOWORD(wParam)) {
case ID_BUTTON:
break;
}
break;
|
Buttons mit Haken
Prüfen, ob ein Button mit einem Haken versehen ist. Funktioniert bei
Radiobuttons und Checkboxes
HWND hButton;
hButton = GetDlgItem(hWnd, ID_BUTTON);
if (SendMessage(hButton , BM_GETCHECK, 0, 0)==BST_CHECKED) {
|
Setzen eines Hakens
SendMessage(hButton, BM_SETCHECK, BST_CHECKED, 0);
|
Da BST_CHECKED als 1 definiert ist und BST_UNCHECKED als 0, kann man auch den
booleschen Ausdruck als Parameter verwenden.