next up previous contents
Nächste Seite: Radiobutton Aufwärts: Die Komponenten Vorherige Seite: Label   Inhalt


Checkbox

Abbildung: Beispiel für die Programmierung von Checkboxen.
checkbox.eps

Checkboxen sind graphische Elemente, die zwei Zustände einnehmen können. Sie sind entweder gesetzt oder nicht. Checkboxen bestehen intern aus zwei Elementen, einem Label, und einem kleinen graphischen Element, das den Zustand der Checkbox anzeigt. Unter Win32 wird dies durch ein kleines Feld angezeigt, das entweder leer ist (nicht gesetzt), oder ein Häkchen enthält (gesetzt). Unter dem Motiv GUI wird der Zustand durch kleine Button angezeigt, die entweder hervorgehoben dargestellt sind (nicht gesetzt) oder eingedrückt erscheinen (gesetzt). Das folgende Beispielprogramm erzeugt drei Checkboxen für die Grundfarben Rot, Grün und Blau. Sobald ein Zustand einer Checkbox geändert wird, wird die entstandene Mischfarbe ermittelt, und als Hintergrundfarbe für den Frame gesetzt:


    /* Example checkbox.c */

    :
    int frame,menubar,file,quit,obj;
    int blue,red,green;
    int r,g,b;

    if(j_start()<0)
        printf("can't connect to server\n"),exit(0);

    /* Generate Graphical Objects */
    frame     = j_frame("switch the colors On/Off");
    menubar = j_menubar(frame);
    file     = j_menu(menubar,"File");
    quit     = j_menuitem(file,"Quit");

    blue=j_checkbox(frame,"Blue");
    j_setpos(blue,150,80);
    j_setstate(blue,J_TRUE);
    b=255;

    red=j_checkbox(frame,"Red");
    j_setpos(red,150,120);
    j_setstate(red,J_FALSE);
    r=0;

    green=j_checkbox(frame,"Green");
    j_setpos(green,150,160);
    j_setstate(green,J_FALSE);
    g=0;

    j_setcolorbg(frame,r,g,b);
    j_show(frame);

    /* Waiting for actions */
    while(1)
    {
        obj=j_nextaction();

        if(obj==blue)
            b=j_getstate(blue)?255:0;
        if(obj==red)
            r=j_getstate(red)?255:0;
        if(obj==green)
            g=j_getstate(green)?255:0;

        j_setcolorbg(frame,r,g,b);

        if(r+g+b < 256)
            j_setcolor(frame,255,255,255);
        else
            j_setcolor(frame,0,0,0);

        if((obj==quit) || (obj == frame))
            break;

    }
    :

Der Zustand einer Checkbox kann mit den Funktionen


    j_setstate(int checkbox)
    j_getstate(int checkbox)

gesetzt bzw. ermittelt werden. Sobald der Benutzer den Zustand einer Checkbox ändert, wird ein Event mit der Identifikationsnummer der entsprechenden Checkbox an die Applikation übermittelt. So wird beispielhaft für die Checkbox der Farbe Blau mit


    if(obj==blue)
        b=j_getstate(blue)?255:0;

der Farbanteil der Variablen b entweder auf 255 oder auf 0 gesetzt. Sind alle drei Farbanteile ermittelt, so kann mit der Funktion


    j_setcolorbg(frame,r,g,b);

der Hintergrund des Frames auf die entsprechenden rgb (rot, grün, blau) Werte gesetzt werden 2.1.

Im folgenden if-Statement


    if(r+g+b < 256)
        j_setcolor(frame,255,255,255);
    else
        j_setcolor(frame,0,0,0);

wird die Summe der Farbanteile ermittelt, und die Vordergrundfarbe auf Weiss oder Schwarz gesetzt. Dadurch bleiben die Texte der Checkboxen lesbar, da bei dunklen Farben die Schriftfarbe auf Weiss und entsprechend bei hellen Hintergrundfarben die Schriftfarbe auf Schwarz gesetzt wird.


next up previous contents
Nächste Seite: Radiobutton Aufwärts: Die Komponenten Vorherige Seite: Label   Inhalt
Merten Joost 2003-02-26