Windows Programmierung: Buttons
Willemers Informatik-Ecke
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;

Enable und Disable des Buttons

Ein Button kann mit der Funktion EnableWindow deaktiviert werden. Der erste Parameter ist das HWND des Buttons. Der zweite Parameter ist TRUE für aktiv oder FALSE für deaktiviert.

EnableWindow(hwndButton, TRUE); // aktiv
EnableWindow(hwndButton, FALSE); // aktiv

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.