next up previous contents
Nächste Seite: Filedialog Aufwärts: Die Komponenten Vorherige Seite: Dialog   Inhalt


Window

Abbildung 2.27: Beispielprogramm mit einem Window.
window.eps

Das letzte Element, das dazu dient andere Elemente aufzunehmen ist ein Window. Ein Window ist, im Vergleich zu den anderen Behältern, das einfachste Element. Es besteht lediglich aus einem Rahmen, und kann weder eine Menüzeile noch eine Fensterleiste besitzen. Damit kann ein Window auch nicht vom Benutzer verschoben oder geschlossen werden. Dies muß alles von der Applikation erledigt werden. Ein Window wird häufig als Online-Hilfe verwendet. Das folgende Beispiel zeigt, wie in einem Frame auf Mausklick ein Window geöffnet wird, das die aktuelle Mausposition anzeigt. Wird der Mausbutton wieder losgelassen, so verschwindet auch das Window:


    /* Example window.c */

    :
    frame     = j_frame("Windows Demo",200,200);
        
    window  = j_window(frame);
    j_flowlayout(window);
 
    label   = j_label(window,"");
    j_setnamedcolorbg(label,J_YELLOW);
        
    pressed  = j_mouselistener(frame,J_PRESSED);
    released = j_mouselistener(frame,J_RELEASED);
    
    while(1)
    {            
        :
        
        if(obj==pressed)
        {
            j_getpos(frame,&fx,&fy);
            j_getmousepos(pressed,&x,&y);
            sprintf(message,"Mouse pressed at %d:%d",x,y);
            j_settext(label,message);
            j_setpos(window,fx+x,fy+y);
            j_pack(window);
            j_show(window);
        }
            
        if(obj==released)
            j_hide(window);
    }
    :

Die Funktion:


    window  = j_window(frame);
 

erzeugt zunächst das Window, wiederum ohne es anzuzeigen. In dieses Window wird nun ein Label gepackt, das mittels eines Flowmanagers plaziert wird2.5. Die Funktionen:


    pressed  = j_mousepressed(frame);
    released = j_mousereleased(frame);

erzeugen zwei (virtuelle) Objekte, die jeweils einen Event melden, wenn der Benutzer im Frame die Maustaste drückt, bzw. wieder losläßt2.6. Die folgende Programmsequenz reagiert nun auf den Mausdruck:


    if(obj==pressed)
    {
        j_getpos(frame,&fx,&fy);
        j_getmousepos(pressed,&x,&y);
        sprintf(message,"Mouse pressed at %d:%d",x,y);
        j_settext(label,message);
        j_setpos(window,fx+x,fy+y);
        j_pack(window);
        j_show(window);
    }

Zunächst wird die aktuelle Position des Frames und der Maus ermittelt. Die Position der Maus wird relativ zum umgebenden Fenster (Frame) angegeben. Aus beiden Positionen errechnet sich nun durch Addition die Position des Windows, die in absoluten Bildschirmkoordinaten angegeben werden muß. Mit der Funktion j_setpos() kann das Window nun positioniert werden, und mit j_show() wird es am Bildschirm angezeigt. Zuvor wird die Mausposition als Nachricht in das Labelobjekt eingetragen. Somit öffnet sich das Window genau an der Mausposition, und zeigt dessen Position als Nachricht an.

Mit den Anweisungen


    if(obj==released)
        j_hide(window);

wird das Window wieder vom Schirm entfernt, sobald die Maustaste wieder losgelassen wird, und ein entsprechendes Event geliefert wird. Dabei wird es jedoch nicht zerstört, und kann daher (wie im Beispiel) jederzeit wieder dargestellt werden.


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