HomeAESFensterdialogeFileselektoren

8.9 Fensterverwaltung

Diese Bibliothek stellt Funktionen zur Verfügung um Fenster zu erzeugen, zu öffnen, zu schließen und vieles mehr. Insgesamt stehen die folgenden Routinen zur Verfügung:

sys_set_winframe_manager Installieren eines neuen Fensterrahmen-Manager
wind_calc Fensterdimensionen berechnen.
wind_close Fenster schließen.
wind_create Fenster erzeugen.
wind_delete Fenster löschen.
wind_draw Fensterelemente neu Zeichnen.
wind_find Fensterhandle anhand einer Positionsangabe ermitteln.
wind_get Eigenschaften eines Fensters ermitteln.
wind_new Alle Fenster löschen.
wind_open Fenster öffnen.
wind_set Eigenschaften eines Fensters verändern.
wind_update Bildschirmoperationen sperren oder freigeben.
wind_xget Eigenschaften eines Fensters ermitteln, erweiterte Version
wind_xset Eigenschaften eines Fensters verändern, erweiterte Version

Hinweis: Unter MagiC sollte eine einzelne Applikation nicht mehr als 16 Fenster benutzen, da sonst der Nachrichtenpuffer des Systems überlaufen kann, und evtl. Redraws nicht mehr ausgeführt werden können.

Querverweis:
Komponenten eines Fensters   Style-Guidelines   Fensterdialoge   Übersicht der wind_get/set Unterfunktionen

8.9.1 sys_set_winframe_manager

Name: ???
AES-Nummer: 0 (Unterfunktion 6)
Deklaration: int16_t sys_set_winframe_manager( WINFRAME_HANDLER *old_wfh, WINFRAME_HANDLER *new_wfh, WINFRAME_SETTINGS **set )
Beschreibung:
Ergebnis: Unbekannt.
Verfügbar: Ab MagiC 6
Gruppe: Fensterverwaltung
Querverweis: Binding

8.9.1.1 Bindings für sys_set_winframe_manager

C: int16_t sys_set_winframe_manager( WINFRAME_HANDLER *old_wfh, WINFRAME_HANDLER *new_wfh, WINFRAME_SETTINGS **set );
Umsetzung:
int16_t sys_set_winframe_manager( WINFRAME_HANDLER *old_wfh,
            WINFRAME_HANDLER *new_wfh,
            WINFRAME_SETTINGS **set )
{
   int_in[0]  = 6;      /* Subcode 6: Fensterrahmen-Manager */
   addr_in[0] = old_wfh;
   addr_in[1] = new_wfh;

   crys_if(0);

   *set = addr_out[0];

   return ( int_out[0] );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 0 # Opcode der Funktion
control+2 control[1] 1 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 2 # Einträge in addr_in
control+8 control[4] 1 # Einträge in addr_out
int_in int_in[0] 6
addr_in addr_in[0] old_wfh
addr_in+4 addr_in[1] new_wfh
int_out int_out[0] Return-Wert
addr_out addr_out[0] set

8.9.2 wind_calc

Name: »Window Calculation« - berechnet die Grenzen oder den gesamten Platzbedarf eines Fensters.
AES-Nummer: 108
Deklaration: int16_t wind_calc ( int16_t wi_ctype, int16_t wi_ckind, int16_t wi_cinx, int16_t wi_ciny, int16_t wi_cinw, int16_t wi_cinh, int16_t *coutx, int16_t *couty, int16_t *coutw, int16_t *couth );
Beschreibung: Die Funktion berechnet für ein Fenster die Größe des Randbereichs aus den Koordinaten des Arbeitsbereichs oder umgekehrt. Es gilt:
Parameter Bedeutung
   
wi_ctype 0 = WC_BORDER berechnet die Koordinaten des Randbereichs aus den Koordinaten des Arbeitsbereichs in den Parametern wi_cinx, wi_ciny, wi_cinw und wi_cinh.
1 = WC_WORK berechnet die Koordinaten des Arbeitsbereichs aus den Koordinaten des Randbereichs in den Parametern wi_cinx, wi_ciny, wi_cinw und wi_cinh.
wi_ckind ein Integerparameter der alle Komponenten des Fenster beeinhaltet, Format wie in wind_create
wi_cinx x-Koordinate
wi_ciny y-Koordinate
wi_cinw Breite
wi_cinh Höhe des Fensters (bereits bekannt)
coutx x-Koordinate
couty y-Koordinate
coutw Breite
couth Höhe der berechneten Komponente


Hinweis: Man sollte niemals davon ausgehen, daß die Elemente eines Fensters eine bestimmte Größe oder Position besitzen, sondern immer diese Funktion benutzen.

WINX-Erweiterung: Vorraussetzung: appl_getinfo (Opcode 22360)
Setzt man Bit 15 in wi_ctype (z.B. durch Addition der Konstanten WC_WIN (=$8000)) und übergibt in wi_ckind statt Fensterelementen die Kennung eines Fensters, ist es möglich die Ausmaße des Fensters exakter zu bestimmen, da die Funktion die aktuellen Eigenschaften des Fenster berücksichtigen kann (z.B. eine Toolbar). Außerdem führt die Funktion eine Autokorrektur des Strukturbereichs durch, die auch von Funktionen wie wind_open, wind_set( WF_CURRXYWH) vorgenommen wird, falls dies notwendig ist und vom AES unterstützt wird.
Ergebnis: Ein Fehler ist nur dann aufgetreten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: All AES versions.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_create   Probleme bei Toolbars

8.9.2.1 Bindings für wind_calc

C: int16_t wind_calc ( int16_t wi_ctype, int16_t wi_ckind, int16_t wi_cinx, int16_t wi_ciny, int16_t wi_cinw, int16_t wi_cinh, int16_t *coutx, int16_t *couty, int16_t *coutw, int16_t *couth );
Umsetzung:
int16_t wind_calc (int16_t wi_ctype, int16_t wi_ckind,
                   int16_t wi_cinx, int16_t wi_ciny,
                   int16_t wi_cinw, int16_t wi_cinh,
                   int16_t *coutx, int16_t *couty,
                   int16_t *coutw, int16_t *couth)
{
   int_in[0]  = wi_ctype;
   int_in[1]  = wi_ckind;
   int_in[2]  = wi_cinx;
   int_in[3]  = wi_ciny;
   int_in[4]  = wi_cinw;
   int_in[5]  = wi_cinh;

   crys_if (108);

   *coutx = int_out[1];
   *couty = int_out[2];
   *coutw = int_out[3];
   *couth = int_out[4];

   return ( int_out[0] );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 108 # Opcode der Funktion
control+2 control[1] 6 # Einträge in int_in
control+4 control[2] 5 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_ctype
int_in+2 int_in[1] wi_ckind
int_in+4 int_in[2] wi_cinx
int_in+6 int_in[3] wi_ciny
int_in+8 int_in[4] wi_cinw
int_in+10 int_in[5] wi_cinh
int_out int_out[0] Return-Wert
int_out+2 int_out[1] coutx
int_out+4 int_out[2] couty
int_out+6 int_out[3] coutw
int_out+8 int_out[4] couth

8.9.3 wind_close

Name: »Close Window« - schließt ein Fenster.
AES-Nummer: 102
Deklaration: int16_t wind_close ( int16_t wi_clhandle );
Beschreibung: Die Funktion schließt das Fenster mit der Kennung wi_clhandle.

Hinweis: Endgültig gelöscht wird das Fenster erst durch einen Aufruf von wind_delete.
Ergebnis: Ein Fehler ist nur dann aufgeteten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: All AES versions.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_open   wind_delete

8.9.3.1 Bindings für wind_close

C: int16_t wind_close ( int16_t wi_clhandle );
Umsetzung:
int16_t wind_close (int16_t wi_clhandle)
{
   int_in[0]  = wi_clhandle;
   return ( crys_if(102) );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 102 # Opcode der Funktion
control+2 control[1] 1 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_clhandle
int_out int_out[0] Return-Wert

8.9.4 wind_create

Name: »Window create« - meldet ein neues Fenster an.
AES-Nummer: 100
Deklaration: int16_t wind_create ( int16_t wi_crkind, int16_t wi_crwx, int16_t wi_crwy, int16_t wi_crww, int16_t wi_crwh );
Beschreibung: Die Funktion versucht beim AES ein neues Fenster anzumelden und legt dabei gleichzeitig sein Aussehen und die maximale Größe fest.

wi_crwx, wi_crwy, wi_crww, wi_crwh legen die maximale Ausdehnung des Fensters fest.

wi_crkind beschreibt die Komponenten als Bitvektor:

Komponente Wert Bedeutung
NAME 0x0001 Titelzeile
CLOSER 0x0002 Schließbox
FULLER 0x0004 Volle-Größe-Box
MOVER 0x0008 Fenster kann bewegt werden
INFO 0x0010 Infozeile
SIZER 0x0020 Größenverstellungsbox
UPARROW 0x0040 Pfeil nach oben
DNARROW 0x0080 Pfeil nach unten
VSLIDE 0x0100 vertikaler Slider
LFARROW 0x0200 Pfeil nach links
RTARROW 0x0400 Pfeil nach rechts
HSLIDE 0x0800 horizontaler Slider
HOTCLOSEBOX 0x1000 Close-Box mit Auto-Repeat
MENUBAR 0x1000 Menuzeile (XaAES)
BACKDROP 0x2000 Hintergrund-Box
ICONIFIER 0x4000 Iconify-Button
BORDER 0x8000 border sizing


Hinweis: Die Hotclose-Box steht erst ab PC-GEM bzw. MagiC (jeweils) ab Version 2.0 zur Verfügung. Nicht benötigte Fensterränder (z.B. Rand unten) werden ab AES-Version 4.x bzw. MagiC 3 weggelassen; dadurch stehen einige Pixel mehr an nutzbarer Fläche zur Verfügung.

MENUBAR steht nur in XaAES zur Verfügung. Es reserviert Platz für eine Menuzeile im Fenster. Die Menüzeile muß mit wind_set angemeldet werden.

Setting BORDER will make XaAES allow for window border sizing without the SIZER gadget being used.

Das Vorhandensein neuerer Komponenten wie beispielsweise dem Iconify-Button, sollte am besten per appl_getinfo (Opcode 11) erfragt werden.
Ergebnis: Die Funktion liefert ein nicht negatives Handle, falls das AES noch ein freies Windowhandle zur Verfügung hat. Ein Rückgabewert kleiner Null signalisiert einen Fehler oder keine weiteren Handles mehr.
Verfügbar: All AES versions.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_delete

8.9.4.1 Bindings für wind_create

C: int16_t wind_create ( int16_t wi_crkind, int16_t wi_crwx, int16_t wi_crwy, int16_t wi_crww, int16_t wi_crwh );
Umsetzung:
int16_t wind_create (int16_t wi_crkind, int16_t wi_crwx,
                     int16_t wi_crwy, int16_t wi_crww,
                     int16_t wi_crwh)
{
   int_in[0]  = wi_crkind;
   int_in[1]  = wi_crwx;
   int_in[2]  = wi_crwy;
   int_in[3]  = wi_crww;
   int_in[4]  = wi_crwh;

   return ( crys_if(100) );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 100 # Opcode der Funktion
control+2 control[1] 5 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_crkind
int_in+2 int_in[1] wi_crwx
int_in+4 int_in[2] wi_crwy
int_in+6 int_in[3] wi_crww
int_in+8 int_in[4] wi_crwh
int_out int_out[0] Return-Wert

8.9.5 wind_delete

Name: »Delete Window« - löscht ein Fenster
AES-Nummer: 103
Deklaration: int16_t wind_delete ( int16_t wi_dhandle );
Beschreibung: Die Funktion löscht das Fenster mit der Kennung wi_dhandle und gibt das entsprechende Windowhandle wieder frei.
Ergebnis: Ein Fehler ist nur dann aufgeteten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: All AES versions.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_create   wind_close

8.9.5.1 Bindings für wind_delete

C: int16_t wind_delete ( int16_t wi_dhandle );
Umsetzung:
int16_t wind_delete (int16_t wi_dhandle)
{
   int_in[0] = wi_dhandle;
   return ( crys_if(103) );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 103 # Opcode der Funktion
control+2 control[1] 1 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_dhandle
int_out int_out[0] Return-Wert

8.9.6 wind_draw

Name: »Draw Window« - Zeichnet die Fensterelemente.
AES-Nummer: 99
Deklaration: int16_t wind_draw ( int16_t wi_dhandle, int16_t wi_dstartob );
Beschreibung: Zeichnen der Non-Client-Area (Fensterelemente) eines Fensters mit der Kennung wi_dhandle unter Berücksichtigung der Rechteckliste.
Parameter Bedeutung
wi_dhandle Handle des Fensters, das neu gezeichnet werden soll.
wi_dstartob Index des Objekts, bei dem mit dem Zeichnen begonnen werden soll.


Anmerkung
Diese Funktion steht nur unter N.AES zur Verfügung und ist für "normale" Anwendungen relativ uninteressant, sie wird vornehmlich vom internen Screenmanager zum Zeichnen der Fensterobjekte verwendet.
Ergebnis: Ein Fehler ist nur dann aufgeteten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: Das Vorhandensein der Funktion ist über appl_getinfo (Opcode 65) nachprüfbar.
Gruppe: Fensterverwaltung
Querverweis: Binding

8.9.6.1 Bindings für wind_draw

C: int16_t wind_draw ( int16_t wi_dhandle, int16_t wi_dstartob );
Umsetzung:
int16_t wind_draw ( int16_t wi_dhandle, int16_t wi_dstartob );
{
   int_in[0] = wi_dhandle;
   int_in[1] = wi_dstartob;
   return ( crys_if(99) );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 99 # Opcode der Funktion
control+2 control[1] 2 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_dhandle
int_in+2 int_in[1] wi_dstartob
int_out int_out[0] Return-Wert

8.9.7 wind_find

Name: »Find Window« - sucht ein Fenster zu einem bestimmten Punkt.
AES-Nummer: 106
Deklaration: int16_t wind_find ( int16_t wi_fmx, int16_t wi_fmy );
Beschreibung: Die Funktion ermittelt die Kennung des Fensters, welches sich an einer bestimmten Position befindet. Es gilt:

Parameter Bedeutung
wi_fmx x-Koordinate
wi_fmy y-Koordinate
Ergebnis: Die Funktion liefert die entsprechende Fensterkennung zurück. Der Wert 0 steht dabei für den Desktop, -1 bedeutet, daß sich kein Fenster an der angegebenen Position befindet.
Verfügbar: All AES versions.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_get

8.9.7.1 Bindings für wind_find

C: int16_t wind_find ( int16_t wi_fmx, int16_t wi_fmy );
Umsetzung:
int16_t wind_find (int16_t wi_fmx, int16_t wi_fmy)
{
   int_in[0]  = wi_fmx;
   int_in[1]  = wi_fmy;

   return ( crys_if(106) );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 106 # Opcode der Funktion
control+2 control[1] 2 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_fmx
int_in+2 int_in[1] wi_fmy
int_out int_out[0] Return-Wert

8.9.8 wind_get

Name: »Get Window« - ermittelt die Parameter eines Fensters.
AES-Nummer: 104
Deklaration: int16_t wind_get ( int16_t wi_ghandle, int16_t wi_gfield, int16_t *wi_gw1, int16_t *wi_gw2, int16_t *wi_gw3, int16_t *wi_gw3 );
Beschreibung: Die Funktion liefert abhängig von den übergebenen Parametern verschiedene Informationen über das Fenster mit der Kennung wi_ghandle. Es gilt für wi_gfield.

Zusammenfassung aller Unterfunktionen
WF_BEVENT (24) erfragt den Status des Bitvektors, der per wind_set (..., WF_BEVENT, ...) gesetzt wurde, und schreibt ihn in den Parameter wi_gw1.
Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_BITMAP (233) Get bitmap content of the window if MyAES "windows_backup" option is set to true, any windows of any application can be read.
MyAES 0.96 Funktion
WF_BOTTOM (25) erfragt das Handle des untersten Fensters, und schreibt dieses in den Parameter wi_gw1. Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_CURRXYWH (05) berechnet die Gesamtgröße des Fenster und schreibt sie in die weiteren Parameter wi_gw1, wi_gw2, wi_gw3 und wi_gw4.
WF_DCOLOR (19) liefert die Fensterfarben zurück, und zwar wie folgt:
wi_gw1 = Fensterelement
wi_gw2 = Farbe bei aktivem Fenster
wi_gw3 = Farbe bei inaktivem Fenster


Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.

Ab MagiC 4 und XaAES v 0.943 können darüber hinaus für jedes einzelne Fensterelement 3D-Flags abgefragt werden. Der Aufruf lautet dabei: wind_get (0, WF_DCOLOR, ...) Es gilt:
wi_gw1 = Fensterelement
wi_gw2 = Farbe im aktiven Zustand
wi_gw3 = Farbe im inaktiven Zustand
wi_gw4 = 3D-Flags


Die 3D-Flags werden dabei als Bitvektor beschrieben; es gilt:
Bit-0 = Effekt "3D im Vordergrund"
Bit-1 = Effekt "3D im Hintergrund"
Bit-2 = Effekt "selektierbar im Vordergrund"
Bit-3 = dto. im Hintergrund
Bit-8+n = Maskenbit für Bit n


Dieses Feature kann z.Zt. noch nicht über appl_getinfo ermittelt werden.
WF_DDELAY (22362) Verzögerungswerte
wi_gw1 = Startverzögerung beim Klick auf Scrollpfeil
wi_gw2 = Kontinuierliche Verzögerung beim Klick auf Scrollpfeil
wi_gw3 = Kontinuierliche Verzögerung beim Klick auf Closer
wi_gw4 = Kontinuierliche Verzögerung beim Klick auf Fuller


Alle Werte werden in Millisekunden zurückgegeben.

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.
WF_FIRSTXYWH (11) berechnet die Koordinaten des ersten Rechtecks in der Rechtecksliste und schreibt sie in die weiteren Parameter wi_gw1, wi_gw2, wi_gw3 und wi_gw4.
WF_FTOOLBAR (31) ermittelt das erste Rechteck aus der Rechteckliste einer Toolbar. Es gilt:
wi_gw1 = x-Koordinate
wi_gw2 = y-Koordinate
wi_gw3 = Breite
wi_gw4 = Höhe des Rechteckes
WF_FULLXYWH (07) berechnet die maximale Gesamtgröße des Fensters und schreibt sie in die weiteren Parameter wi_gw1, wi_gw2, wi_gw3 und wi_gw4.
WF_HSLIDE (08) berechnet die Position des horizontalen Sliders und schreibt sie in den weiteren Parameter wi_gw1 (0 ganz links, bis 1000 ganz rechts).
WF_HSLSIZE (15) berechnet die Größe des horizontalen Sliders relativ zur Gesamtbreite und schreibt sie in den zusätzlichen Parameter wi_gw1 (-1 kleinste Größe, 1 klein bis 1000 Gesamtbreite).
WF_ICONIFY (26) liefert folgende Werte zurück:
wi_gw1 = Fenster ist ikonifziert (1) oder nicht (0)
wi_gw2 = Breite des Fensters
wi_gw3 = Höhe des Fensters


Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_INFO (3) Ermittelt den aktuellen Text der Infozeile des Fensters mit dem Handle wi_ghandle und kopiert diesen in den Buffer, dessen Adresse in intin[2] (Highword) und intin[3] (Lowword) übergeben wurde.

Besitzt das Fenster keinen Infozeile, so ist der Rückgabewert der Funktion gleich 0; der übergebene Buffer bleibt unverändert.

Da eine Infozeile maximal 128 (N.AES) oder 200 (XaAES) Zeichen lang sein kann, sollte der übergebene Buffer genug Platz bieten, um einen String dieser Länge aufzunehmen.

Steht nur unter N.AES und XaAES zur Verfügung.
WF_INFOXYWH (104) Ermittelt die Position des INFO-Fensterelements.

Verfügbar ab MagiC 6.10
WF_KIND (1) ermittelt die aktuellen Komponenten des Fensters, und schreibt sie in den Parameter wi_gw1.
WF_MENU (33) liefert die Adresse der OBJECT-Struktur der Menüzeile im Fenster zurück. Dabei enthält wi_gw1 das High-Word, und wi_gw2 das Low-Word der Adresse oder NULL.
WF_MINXYWH (103) Fragt die Minimalgröße des Fensters ab.

Verfügbar ab MagiC 6
WF_NAME (2) Ermittelt den aktuellen Fenstertitel des Fensters mit dem Handle wi_ghandle und kopiert diesen in den Buffer, dessen Adresse in intin[2] (Highword) und intin[3] (Lowword) übergeben wurde.

Besitzt das Fenster keinen Titel, so ist der Rückgabewert der Funktion gleich 0; der übergebene Buffer bleibt unverändert.

Da ein Fenstertitel maximal 128 (N.AES) oder 200 (XaAES) Zeichen lang sein kann, sollte der übergebene Buffer genug Platz bieten, um einen String dieser Länge aufzunehmen.

Steht nur unter MagiC (ab V6.0), N.AES und XaAES zur Verfügung.
WF_NEWDESK (14) die Funktion liefert folgende Werte zurück:
wi_gw1 = Hi-Word der Desktop-Adresse
wi_gw2 = Lo-Word der Desktop-Adresse
wi_gw3 = Index des ersten Objektes


Hinweis: Unter der Desktop-Adresse ist hierbei die Adresse des aktiven Desktop-Hintergrundes zu verstehen. Die Ausgabe in wi_gw3 steht nur unter MagiC zur Verfügung.
Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden. Ist auch in KAOS 1.4.2 und ab MagiC 1 vorhanden.
WF_NEXTXYWH (12) berechnet die Koordinaten des nächsten Rechtecks in der Rechtecksliste und schreibt sie in die weiteren Parameter wi_gw1, wi_gw2, wi_gw3 und wi_gw4.
WF_NTOOLBAR (32) ermittelt das nächste Rechteck aus der Rechteckliste einer Toolbar. Es gilt:
wi_gw1 = x-Koordinate
wi_gw2 = y-Koordinate
wi_gw3 = Breite
wi_gw4 = Höhe des Rechteckes
WF_OPTS (41) Liefert die Einstellungen, welches per wind_set ( WF_OPTS ) gemacht wurden.

Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_M_OWNER (101) liefert folgende Werte zurück:
wi_gw1 = Applikations-ID des Besitzers


Nur ab KAOS 1.4.2 (hieß dort noch WF_OWNER) und in MagiC vorhanden.
WF_OWNER (20) liefert folgende Werte zurück:
wi_gw1 = Applikations-ID des Besitzers
wi_gw2 = Fenster ist geöffnet (1) bzw. geschlossen (0)
wi_gw3 = Kennung des darüberliegenden
wi_gw4 = Kennung des darunterliegenden Fensters


Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_PREVXYWH (06) berechnet die Gesamtgröße des vorherigen Fensters und schreibt sie in die weiteren Paramter wi_gw1, wi_gw2, wi_gw3 und wi_gw4.
WF_SCREEN (17) liefert die Adresse und Länge des internen Buffers, in dem das AES den Hintergrund von Dropdownmenüs und Alertboxen zwischenspeichert und schreibt sie in die weiteren Parameter wi_gw1 Highword der Adresse, wi_gw2 Lowword der Adresse, wi_gw3 Highword der Länge und wi_gw4 Lowword der Länge.

Bei TOS 1.02 wird für Länge 0 zurückgeliefert (obwohl der Puffer 8000 Bytes faßt).
WF_SHADE (22365) Liefert den Shade-Zustand des Fensters.
wi_gw1 = Aktueller Shade-Zustand.
1: eingeklappt
0: ausgeklappt


Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.
WF_TOOLBAR (30) liefert die Adresse der OBJECT-Struktur der Toolbar zurück. Dabei enthält wi_gw1 das High-Word, und wi_gw2 das Low-Word der Adresse.
WF_TOP (10) liefert die folgenden Werte zurück:
wi_gw1 = Kennung des obersten Fensters
Ab AES 3.3  
wi_gw2 = Applikations-ID des Besitzers
wi_gw3 = Kennung des nächsten Fensters
wi_gw4 = Spezialfall für MagiC 2.0 und XaAES


Wenn kein Fenster geöffnet ist, enthält wi_gw1 den Wert 0.


Achtung: MagiC 2.0 muß als oberstes Fensterhandle eine negative Zahl (-2) liefern, falls das Programm einer anderen Applikation gehört, sonst laufen eine Reihe alter Programme nicht. In MagiC 2.0 wird das tatsächliche Handle in wi_gw4 zurückgeliefert. Ab MagiC 3 trifft dies nicht mehr zu, d.h. das Handle wird wie bisher üblich, in wi_gw1 übergeben.

XaAES liefert in wi_gw4 die Applikations-ID des Besitzers des nächsten Fensters.
WF_USER_POINTER (230) Liefert den Benutzer Wert eines Fenster
wi_gw1 and wi_gw2 are the 2 values already set by user with wind_set.
MyAES Funktion
WF_UNICONIFY (27) ermittelt die ursprünglichen Ausmaße eines ikonifizierten Fensters.
wi_gw1 = x-Position
wi_gw2 = y-Position
wi_gw3 = Breite
wi_gw4 = Höhe des Fensters


Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_VSLIDE (09) berechnet die Position des vertikalen Sliders und schreibt sie in den weiteren Parameter wi_gw1 (0 ganz oben, bis 1000 ganz unten).
WF_VSLSIZE (16) berechnet die Höhe des vertikalen Sliders relativ zur Gesamthöhe und schreibt sie in den zusätzlichen Parameter wi_gw1 (-1 kleinste Höhe, 1 klein bis 1000 Gesamthöhe).
WF_WIDGETS (200) Ermittelt die aktuellen Positionen der Sliderobjekte (W_UPARROW, W_DNARROW, etc.) des Fensters mit dem Handle wi_ghandle. In den Parametern wi_gw1 und wi_gw2 werden die vertikal Elemente des typs rightwidgets, in den Parametern wi_gw3 und wi_gw4 die horizontal Elemente des typs bottomwidgets geschrieben. wi_gw1 ist das oberste Element, wi_gw2 das unterste Element des Vertikalsliders. wi_gw3 ist das linkeste Element, wi_gw4 das rechteste Element des Horizontalsliders.

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_M_WINDLIST (102) Liefert in wi_gw1 (High) und wi_gw2 (Low) einen Zeiger auf eine durch 0 abgeschlossene Tabelle der geöffneten Fenster (erstes Element = oberstes Fenster, d.h. auf die Liste ihrer Handles als Integer-Werte. Negative Handles gehören zu eingefrorenen Applikationen. Auf keinen Fall darf über den Zeiger schreibend zugegriffen werden.

Nur in KAOS ab 1.4.2 (WF_WINDLIST) und MagiC vorhanden.
WF_WINX (22360) Liefert Informationen zur installierten WINX-Version (ab WINX 2.1).
wi_gw1 = Version
Bit [15..12] Beta-Kennung
Bit [11.. 8] Major (momentan 2)
Bit [ 7.. 4] Minor (momentan 3)
Bit [ 3.. 0] Interne Kennung
wi_gw2 = Erstellungsdatum im GEMDOS-Format
wi_gw3 = Zeiger (Low) auf die WINX-Externals (bzw. NULL)
wi_gw4 = Zeiger (High) auf die WINX-Externals (bzw. NULL)
WF_WINXCFG (22361) Liefert die globalen und lokalen Schalter der aufrufenden Applikation (Bit n entspricht jeweils Schalter n+1).
wi_gw1 = Bitmaske der von der aktuellen WINX-Version unterstützten globalen Schalter (Bit gesetzt bedeutet, Schalter vorhanden).
wi_gw2 = Schalterstellung der globalen Schalter (Bit gesetzt bedeutet, Schalter eingeschaltet).
wi_gw3 = Bitmaske der von der aktuellen WINX-Version unterstützten lokalen Schalter der aktuellen Applikation (Bit gesetzt bedeutet, Schalter vorhanden).
wi_gw4 = Schalterstellung der lokalen Schalter der aktuellen Applikation (Bit gesetzt bedeutet, Schalter eingeschaltet).


Normalerweise sollten Applikationen darauf verzichten diese Informationen abzufragen.

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.
WF_WORKXYWH (04) berechnet die Koordinaten des Arbeitsbereichs des Fensters und schreibt sie in die weiteren Parameter wi_gw1, wi_gw2, wi_gw3 und wi_gw4.
XA (0x5841) Wird als Ergebins 'XA' (0x5841) geliefert so ist XaAES installiert und man erhält in wi_gw1 die Versionsnummer (0x0964 für Version V0.964). wi_ghandle muß auf Null gesetzt werden.


Hinweis: Die Parameter wi_gw1, wi_gw2, wi_gw3 und wi_gw4 sind dabei reine Ausgabe-Parameter.
Ergebnis: Ein Fehler ist nur dann aufgetreten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: In allen AES Versionen.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_set   Unterfunktionsübersicht

8.9.8.1 Bindings für wind_get

C: int16_t wind_get ( int16_t wi_ghandle, int16_t wi_gfield, int16_t *wi_gw1, int16_t *wi_gw2, int16_t *wi_gw3, int16_t *wi_gw3 );
Umsetzung:
int16_t wind_get ( int16_t wi_ghandle, int16_t wi_gfield,
                   int16_t *wi_gw1, int16_t *wi_gw2,
                   int16_t *wi_gw3, int16_t *wi_gw3)
{
   int_in[0]  = wi_ghandle;
   int_in[1]  = wi_gfield;

   crys_if (104);

   *wi_gw1 = int_out[1];
   *wi_gw2 = int_out[2];
   *wi_gw3 = int_out[3];
   *wi_gw4 = int_out[4];

   return ( int_out[0] );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 104 # Opcode der Funktion
control+2 control[1] 2 # Einträge in int_in
control+4 control[2] 5 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_ghandle
int_in+2 int_in[1] wi_gfield
int_out int_out[0] Return-Wert
int_out+2 int_out[1] wi_gw1
int_out+4 int_out[2] wi_gw2
int_out+6 int_out[3] wi_gw3
int_out+8 int_out[4] wi_gw4

8.9.9 wind_new

Name: »New Window« - schließt alle Fenster.
AES-Nummer: 109
Deklaration: void wind_new ( void );
Beschreibung: Die Funktion schließt und löscht alle Fenster, und setzt die mit wind_update gemachten Blockierungen zurück.

Hinweis zu MagiC: Hier wird die Funktion als aufwendige, globale und umfassende Aufräumfunktion für eine Applikation ausgeführt, und löscht auch nur noch deren Updateanforderungen, Fenster, Menüs usw. Andere Applikationen werden auf keinen Fall beeinträchtigt.
Ergebnis: Die Funktion hat kein Ergebnis.
Verfügbar: Seit AES Version 1.4
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_create   wind_close   wind_update

8.9.9.1 Bindings für wind_new

C: void wind_new ( void );
Umsetzung:
void wind_new (void)
{
   crys_if (109);
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 109 # Opcode der Funktion
control+2 control[1] 0 # Einträge in int_in
control+4 control[2] 0 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out

8.9.10 wind_open

Name: »Open Window« - öffnet ein Fenster.
AES-Nummer: 101
Deklaration: int16_t wind_open ( int16_t wi_ohandle, int16_t wi_owx, int16_t wi_owy, int16_t wi_oww, int16_t wi_owh );
Beschreibung: Die Funktion stellt ein Fenster auf dem Bildschirm dar. Es gilt:

Parameter Bedeutung
wi_ohandle Kennung des zu öffnenden Fensters
wi_owx x-Koordinate
wi_owy y-Koordinate
wi_oww Breite
wi_owh Höhe des Fensters


Hinweis: Das Fenster muß vorher per wind_create erzeugt worden sein. Die Komponenten Titelzeile, Infozeile und Slider müssen bereits vorher durch einen wind_set Aufruf gesetzt worden sein.

Bei Angabe der Koordinaten -1,-1,-1,-1 wird das Fenster ab MagiC 3 an die nächste freie Position für ikonifizierbare Fenster gelegt.
Ergebnis: Ein Fehler ist nur dann aufgetreten, wenn als Ergebnis 0 zurückgeliefert wird.
Verfügbar: All AES versions.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_create   wind_close   wind_set

8.9.10.1 Bindings für wind_open

C: int16_t wind_open ( int16_t wi_ohandle, int16_t wi_owx, int16_t wi_owy, int16_t wi_oww, int16_t wi_owh );
Umsetzung:
int16_t wind_open (int16_t wi_ohandle, int16_t wi_owx,
                   int16_t wi_owy, int16_t wi_oww,
                   int16_t wi_owh)
{
   int_in[0]  = wi_ohandle;
   int_in[1]  = wi_owx;
   int_in[2]  = wi_owy;
   int_in[3]  = wi_oww;
   int_in[4]  = wi_owh;

   return ( crys_if(101) );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 101 # Opcode der Funktion
control+2 control[1] 5 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_ohandle
int_in+2 int_in[1] wi_owx
int_in+4 int_in[2] wi_owy
int_in+6 int_in[3] wi_oww
int_in+8 int_in[4] wi_owh
int_out int_out[0] Return-Wert

8.9.11 wind_set

Name: »Set Window« - verändert einzelne Parameter eines Fensters.
AES-Nummer: 105
Deklaration: int16_t wind_set ( int16_t wi_shandle, int16_t wi_sfield, int16_t wi_sw1, int16_t wi_sw2, int16_t wi_sw3, int16_t wi_sw4 );
Beschreibung: Die Funktion verändert, abhängig von den übergebenen Parametern, verschiedene Eigenschaften des Fensters mit der Kennung wi_shandle. Es gilt für wi_sfield.

Zusammenfassung aller Unterfunktionen
WF_BEVENT (24) erlaubt es, eine WM_TOPPED Message beim Anklicken eines Fensters zu verhindern (z.B. um Dauerfunktionen in nicht getoppten Fenstern zu ermöglichen). wi_sw1 ist ein Bitvektor bei dem bisher lediglich Bit-0 eine Bedeutung besitzt. Andere Werte als 1 sind also nicht erlaubt. Der Aufruf wäre dann: wind_set(wi_shandle, WF_BEVENT, 0x0001, 0, 0, 0).
Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_BOTTOM (25) ermöglicht es, das (geöffnete!) Fenster mit der Kennung wi_shandle in den Hintergrund zu legen, und zwar per wind_set(wi_shandle, WF_BOTTOM, 0, 0, 0, 0).
Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_BOTTOMALL (22368) Stellt alle Fenster der Applikation wi_sw1 nach hinten.
wi_sw1 = Kennung der Applikation


Übergibt man in wi_shandle ein Fensterkennung ungleich DESKWINDOW, dann wird wi_shandle zusätzlich ganz nach hinten gestellt (ansonsten wird die Reihenfolge der Fenster untereinander nicht geändert). wi_shandle muß offen sein und der Applikation wi_sw1 gehören.

Es ist nicht garantiert, daß eine Applikation WF_BOTTOMALL auf die Fenster einer anderen Applikation anwenden kann (vorallem in einer Multitasking-Umgebung). In diesem Fall wird 0 zurückgegeben.

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.
WF_COLOR (18) verändert die Farbe eines Fensterelements. Dazu wird in wi_sw1 die Nummer des Elements angegeben:
Element Beschreibung
   
W_BOTTOMER (20) Backdrop-Button
W_BOX (0) Wurzelobjekt des Fensters
W_CLOSER (2) Schließbox
W_DATA (6) Elternobjekt der restlichen Elemente
W_DNARROW (11) Pfeil nach unten
W_FULLER (4) Zoombox
W_HBAR (14) Elternobjekt der vertikalen Sliderelemente
W_HELEV (18) Horizontaler Slider
W_HSLIDE (17) Hintergrund des horiz. Sliders
W_INFO (5) Infozeile
W_LFARROW (15) Pfeil nach links
W_NAME (3) Move-Balken
W_RTARROW (16) Pfeil nach rechts
W_SIZER (8) Size-Box
W_SMALLER (19) Iconifier-Button
W_TITLE (1) Elternobjekt der Schließ- und Zoombox, sowie des Names
W_UPARROW (10) Pfeil nach oben
W_VBAR (9) Elternobjekt der vertikalen Sliderelemente
W_VELEV (13) Vertikaler Slider
W_VSLIDE (12) Hintergrund des vert. Sliders
W_WORK (7) Arbeitsfläche


Im Parameter wi_sw2 wird die Farbe für den Objekttyp des Fensterelements übergeben, falls das Fenster getoppt ist, in wi_sw3 falls es nicht aktiv ist. Ein Wert von -1 behält die aktuelle Farbeinstellung bei.
Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_CURRXYWH (5) setzt die Fenstergröße aus wi_sw1, wi_sw2, wi_sw3 und wi_sw4 fest.

XaAES is compatible with all other AES's, except from the following points:

  1. If x, y, w and h all have a value of -1.

  2. x and y values of -1 are 'legal', i.e, one cannot use -1 to use any old x value. Ofcourse, x and y coordinates are checked to be inside the rootwindow (not X when noleft = false).

  3. When h have a value of 0, the window is infact shaded. This is a thing N.AES does with MiNTSetter, altho I'm not sure this is correct. The application is sent a WM_SHADED. On the next wind_set(handle, WF_CURRXYWH,...) where the h coordinate is not equal to the window's shaded height, the window is unshaded. While the window is shaded via this method, shift-clicks on the window title to shade a window is ignored.



XaAES since 2004-09-22, there is an extend version.
WF_DCOLOR (19) setzt die Standard-Farben für die Fensterelemente. Der Parameter wi_shandle wird ignoriert, und für die übrigen Parameter gilt:
wi_sw1 = Fensterelement
wi_sw2 = Farbe für aktive Fenster
wi_sw3 = Farbe für inaktive Fenster


Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden. Beim Verändern der Komponente W_FULLER werden automatisch W_SMALLER und W_BOTTOMER mit verändert; dies macht es notwendig, zuerst den Fuller, und dann die übrigen Komponenten zu setzen.

Ab MagiC 4 ist es möglich, für jedes einzelne Fensterelement 3D-Flags festzulegen. Dabei gilt:
wi_sw1 = Fensterelement
wi_sw2 = Farbe im aktiven Zustand
wi_sw3 = Farbe im inaktiven Zustand
wi_sw4 = 3D-Flags


Der Parameter wi_shandle muß dabei den Wert 0 annehmen; die 3D-Flags werden als Bitvektor beschrieben; es gilt:
Bit-0 = Effekt "3D im Vordergrund"
Bit-1 = Effekt "3D im Hintergrund"
Bit-2 = Effekt "selektierbar im Vordergrund"
Bit-3 = dto. im Hintergrund
Bit-8+n = Maskenbit für Bit n


Es werden also nur Bits verändert, wenn das zugehörige Maskenbit gesetzt ist. Dieses Feature kann z.Zt. noch nicht über appl_getinfo ermittelt werden.
WF_DDELAY (22362) Verzögerungswerte setzen
wi_sw1 = Startverzögerung beim Klick auf Scrollpfeil
wi_sw2 = Kontinuierliche Verzögerung beim Klick auf Scrollpfeil
wi_sw3 = Kontinuierliche Verzögerung beim Klick auf Closer
wi_sw4 = Kontinuierliche Verzögerung beim Klick auf Fuller


Die Verzögerungswerte dienen zum Bremsen von Aktionen, falls diese zu schnell ausgeführt werden (z.B. wegen neuer Hardware).

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.
WF_FULLSCREEN (235) Switch fullscreen - normal window mode. The fullscreen mode is without any widget.
Hit the key ESC escape from fullscreen mode.
MyAES 0.96 feature
WF_FULLXYWH (7) If either wi_sw1, wi_sw2, wi_sw3 or wi_sw4 have a value of -1, that coordinate is not changed. If ALL coordinates have a value of -1, the window is actually moved to the current FULLXYWH coordinates, making the current window position the new PREVXYWH position. XaAES since 2004-09-22, there is an extend version.
WF_HSLIDE (8) setzt den horizontalen Slider auf die neue Position wi_sw1 (0 ganz links, bis 1000 ganz rechts).
WF_HSLSIZE (15) setzt die Größe des horizontalen Sliders relativ zur Gesamtbreite auf den Wert wi_sw1 (-1 kleinste Größe, 1 klein bis 1000 Gesamtbreite).
WF_ICONIFY (26) das Fenster wird ikonifiziert. Die Parameter wi_sw1 bis wi_sw4 geben Position und Größe des Fensters im ikonifizierten Zustand an; diese Werte erhält man vom AES beim Eintreffen einer WM_ICONIFY Message.
Tip: Um ein bereits erzeugtes, aber noch nicht geöffnetes Fenster zu ikonifizieren, übergibt man als Koordinaten (-1,-1,-1,-1). Das Fenster kann dann per wind_open(handle,-1,-1,-1,-1) auf den Bildschirm gebracht werden. Ab MagiC 4 und XaAES v0.943 funktioniert dies auch, wenn das Fenster bereits geöffnet ist.
Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) erfragt werden.
WF_IGNORE (13) Ist in alten AES-Version benutzt. Funktion unbekannt.
WF_INFO (3) schreibt den String, auf den wi_sw1 und wi_sw2 zeigt, in die Infozeile. GEM benutzt dabei nur den Zeiger und legt keine Kopie an.

Unter GEM ist die Länge auf 80 Zeichen beschränkt. Bei N.AES sind es maximal 128 bei XaAES maximal 200.
WF_KIND (1) legt wi_sw1 als neue Fensterkomponenten fest, Format wie bei wind_create.
WF_M_BACKDROP (100) Damit kann ein Fenster wi_sw1 auf einen Schalg nach untern gebracht werden, ohne die Reihenfolge der anderen Fenster zu verändern. In KAOS 1.4.2 hieß der Parameter noch WF_BACKDROP.
WF_MENU (33) Es kann eine Menüzeile in ein Fenster eingehängt werden. Wurde das Fenster nicht mit der Komponente MENUBAR erzeugt, dann wird der Aufruf ignoriert. In wi_sw1 und wi_sw2 wird die Adresse des Baums übergeben.
Beim anklicken erhält man eine erweiterte MN_SELECTED Nachricht.
nur XaAES
WF_NAME (2) schreibt den String, auf den wi_sw1 und wi_sw2 zeigt, in die Titelzeile. GEM benutzt dabei nur den Zeiger und legt keine Kopie an.

Unter GEM ist die Länge auf 80 Zeichen beschränkt. Bei N.AES sind es maximal 128 bei XaAES maximal 200.
WF_NEWDESK (14) legt den Objektbaum, auf den wi_sw1 und wi_sw2 zeigt, mit dem Startobjekt wi_sw3 als neues Desktop fest. Durch Übergabe eines Nullzeigers kann wieder der Standardhintergrund gesetzt werden.
WF_OPTIONS (234) Change window behavior
wi_sw1 =
 1: request automatic close when application focus is lost and restore it when is back
wi_sw2 = remove/add option:
1: add option
0: remove option


MyAES feature
WF_OPTS (41) wi_handle is a window handle or -1. If handle is a legal window handle, the options will only apply to that window. If 'handle' is -1, the settings will apply to all windows the application creates AFTER this call.

wi_sw1 is 0 to clear the selected bits or 1 to set the selected bits.

wi_sw2 Currently available options are as follows;
WO0_WHEEL (0x0001) Setting this bit will enable extended mouse wheel support, and go into WHL_AROWWHEEL mode causing XaAES to send extended WM_ARROWED messages to the application when the mouse wheel turns. Read section "XaAES and wheel mouse handling." for details.
WO0_FULLREDRAW (0x0002) Setting this bit will make XaAES send WM_REDRAW messages to cover the whole work-area of the window when it is FULLED. Default behaviour is to only send WM_REDRAW messages for the areas that need it, blitting the already visible parts. This can also be configured via xaaes.cnf, see the app_options argument 'naesff'.
WO0_NOBLITW (0x0004) Setting this bit will make XaAES send WM_REDRAW messages to cover the whole work-area of the window when its WIDTH changes. This is handy for apps like HighWire, Textprocessors ,etc, that need to reformat when window width changes. Default behaviour is to send WM_REDRAW messages for the areas that need it.
WO0_NOBLITH (0x0008) Setting this bit will make XaAES send WM_REDRAW messages to cover the whole work-area of the window when its HEIGHT changes. Default behaviour is to send WM_REDRAW messages for the areas that need it.
WO0_SENDREPOS (0x0010) Setting this bit will make XaAES send a WM_REPOSED(38) message when a windows X/WIDTH and/or Y/HEIGHT coordinate pair changes. Such changes happes when the user resizes the window using upper/left borders. Default behaviour is to first send a WM_MOVED followed by a WM_SIZED message under these conditions, because older apps dont evaluate the WIDTH/HEIGHT in WM_MOVED messages. So, dudes, set this bit and use WM_REPOSED!
WO0_WCOWORK (0x0020) Setting this bit will enable Window Coordinate Orientation WORK mode.


wi_sw3 and wi_sw4 are currently undefined and must be cleared.

Features sollte per appl_getinfo (Opcode 11) erfragt werden.
WF_PREVXYWH (6) If eitherwi_sw1, wi_sw2, wi_sw3 or wi_sw4 have a value of -1, that coordinate is not changed. If ALL coordinates have a value of -1, the window is actually moved to the current PREVXYWH coordinates, making the current window position the new PREVXYWH position.
XaAES since 2004-09-22, there is an extend version.
WF_SHADE (22365) Setzt den Shade-Zustand des Fensters
wi_sw1 = Zu aktivierender Shade-Zustand  1: eingeklappt
 0: ausgeklappt
-1: Zustand umschalten


Beim Einklappen wird eine WM_SHADED-Nachricht versandt. Beim Ausklappen WM_UNSHADED und ein WM_REDRAW über den kompletten Ausgabebereichs des Fensters. Setzt man den Zustand vor dem Öffnen des Fensters, dann wird er beim Öffnen beachtet. Das Schließen eines Fenster setzt es automatisch auf ausgeklappt.

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.
WF_STACK (22366) Stellt das Fenster wi_shandle im Fensterstapel unter das Fenster wi_sw1 ohne die Bildschirmposition selbst zu ändern.
wi_sw1 = offenes Fenster/DESKWINDOW (0)/NOWINDOW (-1)


Ist wi_shandle geschlossen, wird der Positionierungswunsch gespeichert und beim Öffnen des Fensters mit wind_open berücksichtigt. wi_sw1 wird erst bei der eigentlichen Positionierung ausgewertet. Ist (wi_sw1 == DESKWINDOW), wird das Fenster nach ganz hinten gestellt (entspricht WF_BOTTOM). Ist (wi_sw1 == NOWINDOW) oder wi_sw1 nicht offen, dann wird das Fenster wi_shandle ganz nach vorne gestellt (entspricht WF_TOP).

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.
WF_TOOLBAR (30) befestigt eine Toolbar an einem Fenster, ändert oder entfernt diese. Es gilt:
wi_sw1 = High-Word
wi_sw2 = Low-Word der Adresse der Toolbar.


Um eine Toolbar zu entfernen, müssen die Parameter wi_sw1 und wi_sw2 auf NULL gesetzt werden.

XaAES ab v0.942 kennt Toolbars. Hiefür gibt es zusätzliche Parameter:
wi_sw3 = Startobjekt ab dem gezeichnet wird.
wi_sw4 = Nummer des Editobjekt, in das der Cursor gesetzt wird.


Beim betätigen eines Toolbarobjekt erhält man die Nachricht WM_TOOLBAR.
WF_TOP (10) das Fenster mit dem Handle wi_shandle wird zum neuen oberen Fenster. Ab MagiC 4 und XaAES v0.943 kann durch wind_set (-1, WF_TOP, id, ...) das Menü und der Desktophintergrund auf die Applikation mit der Kennung id umgeschaltet werden; ein Wert von -1 für id steht dabei für die aktuelle Applikation.
WF_TOPALL (22367) Holt alle Fenster der Applikation wi_sw1 nach vorne.
wi_sw1 = Kennung der Applikation


Übergibt man in wi_shandle ein Fensterkennung ungleich DESKWINDOW (0), dann wird wi_shandle zusätzlich ganz nach vorne gestellt (ansonsten wird die Reihenfolge der Fenster untereinander nicht geändert). wi_shandle muß offen sein und der Applikation wi_sw1 gehören.

Es ist nicht garantiert, daß eine Applikation WF_TOPALL auf die Fenster einer anderen Applikation anwenden kann (vorallem in einer Multitasking-Umgebung). In diesem Fall wird 0 zurückgegeben.

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.
WF_UNICONIFY (27) das Fenster wird unikonifiziert.
Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) erfragt werden.
WF_UNICONIFYXYWH (28) das Fenster wird unikonifiziert. Die Parameter wi_sw1 bis wi_sw4 geben Position und Größe des Fensters im unikonifizierten Zustand an. Dieser Opcode ist dann besonders nützlich, wenn ein Fenster bereits im ikonifizierten Zustand geöffnet worden ist.
WF_USER_POINTER (230) Link a user value to the windows.
wi_sw1 and wi_sw2 are the 2 value you can transmit it could be used as 32 bits pointer but any value can be provided.
MyAES feature
WF_VSLIDE (9) setzt den vertikalen Slider auf die neue Position wi_sw1 (0 ganz oben bis 1000 ganz unten).
WF_VSLSIZE (16) setzt die Höhe des vertikalen Sliders relativ zur Gesamthöhe auf den Wert wi_sw1 (-1 kleinste Höhe, 1 klein bis 1000 Gesamthöhe).
WF_WCOLOR z.Zt. keine Informationen bekannt.
WF_WHEEL (40) Setzt für ein Fenster (wi_shandle= Fensterkennung) oder alle Applikationen (wi_shandle= 0) die WA_WHEEL Nachricht. Ist wi_sw1 = 1 dann sendet XaAES eine spezielle WM_ARROWED (WA_WHEEL) Nachricht. Bei wi_sw1 = 1 kommt die normalen Nachricht.
ab XaAES v0.960
WF_WIDGETS (200) Setzt die aktuellen Positionen der Sliderobjekte (W_UPARROW, W_DNARROW, etc.) des Fensters mit dem Handle wi_shandle. In den Parametern wi_sw1 und wi_sw2 werden die vertikal Elemente des typs rightwidgets, in den Parametern wi_sw3 und wi_sw4 die horizontal Elemente des typs bottomwidgets übergeben. wi_sw1 ist das oberste Element, wi_sw2 das unterste Element des Vertikalsliders. wi_sw3 ist das linkeste Element, wi_sw4 das rechteste Element des Horizontalsliders.
WF_WIND_ATTACH (231) attach a window to another, using it if you close the mother window other windows linked will be closed. wi_sw1 the window to attach.
MyAES feature
WF_WINXCFG (22361) Setzt die globalen und lokalen Schalter der aufrufenden Applikation, falls dies möglich ist.
wi_sw1 = Maske der bei diesem Aufruf zu verändernden globalen Schalter (Bit gesetzt bedeutet, Schalter übernehmen).
wi_sw2 = Neue Schalterstellung der globalen Schalter (Bit gesetzt bedeutet, Schalter eingeschaltet).
wi_sw3 = Maske der bei diesem Aufruf zu verändernden lokalen Schalter (Bit gesetzt bedeutet, Schalter übernehmen).
wi_sw4 = Neue Schalterstellung der lokalen Schalter (Bit gesetzt bedeutet, Schalter eingeschaltet).


Welche Schalter tatsächlich verändert wurden, kann man nur durch einen Aufruf von wind_get( WF_WINXCFG) ermitteln. ACHTUNG: Diese Funktion sollte nur von Konfigurationsprogrammen aufgerufen werden, die wissen was sie tun (z.B. WINX.CPX).

Achtung: Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 22360) ermittelt werden.


Hinweis: Die Parameter wi_sw1, wi_sw2, wi_sw3 und wi_sw4 sind dabei von der über den Parameter wi_sfield übergebenen Funktionsnummer abhängig.

Bei der Angabe des Fensternamens sollte man aus ästhetischen Gründen vor und hinter der Zeichenkette immer ein Leerzeichen lassen, da sonst das Muster im Fensternamen direkt am ersten und am letzten Buchstaben hängt.

Achtung: Die hier angegebenen Opcodes sind nicht mehr vollständig zum PC-GEM kompatibel, da die Entwicklung dort in eine andere Richtung ging.
Ergebnis: Ein Fehler ist nur dann aufgetreten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: In allen AES Versionen.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_get   wind_create   OBJECT   Unterfunktionsübersicht

8.9.11.1 wind_set und PC-GEM

Ab PC-GEM Version 2.0 gilt:

WF_ATTRB (18): setzt den Fenster-Attributvektor. Es gilt: wi_sw1 = 0 (bzw. 1): Fenster ist oberstes Fenster bzw. nicht; ansonsten keine weiteren Informationen bekannt.

WF_SIZETOP (19): Fenster zum aktiven Fenster machen, ohne die Reihenfolge der anderen Fenster zu verändern. Gleichzeitig können die Position und Größe des Fensters neu festgelegt werden:

wi_sw1 = X-Position, und
wi_sw2 = Y-Position
wi_sw3 = Breite, und
wi_sw4 = Höhe des Fensters

8.9.11.2 Bindings für wind_set

C: int16_t wind_set ( int16_t wi_shandle, int16_t wi_sfield, int16_t wi_sw1, int16_t wi_sw2, int16_t wi_sw3, int16_t wi_sw4 );
Umsetzung:
int16_t wind_set ( int16_t wi_shandle, int16_t wi_sfield,
                   int16_t wi_sw1, int16_t wi_sw2,
                   int16_t wi_sw3, int16_t wi_sw4 )
{
   int_in[0]  = wi_shandle;
   int_in[1]  = wi_sfield;
   int_in[2]  = wi_sw1;
   int_in[3]  = wi_sw2;
   int_in[4]  = wi_sw3;
   int_in[5]  = wi_sw4;

   return ( crys_if(105) );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 105 # Opcode der Funktion
control+2 control[1] 6 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_shandle
int_in+2 int_in[1] wi_sfield
int_in+4 int_in[2] wi_sw1
int_in+6 int_in[3] wi_sw2
int_in+8 int_in[4] wi_sw3
int_in+10 int_in[5] wi_sw4
int_out int_out[0] Return-Wert

8.9.11.3 WF_TOPMOST, wind_set

A class of windows that will always 'float' ontop of classical windows. One key feature of windows in any WF_TOPMOST state is that they do not disturb current keyboard focus, and can be used to issue important messages, status raports, etc., without demanding user interaction.

wind_set (wi_shandle, WF_TOPMOST, wi_sw1,...)

WF_TOPMOST (232)

wi_sw1 =
0 = Remove topmost state on the corresponding window.
1 = Set topmost state on the corresponding window.
2 = Set topmost state and link window visibility to the owner's focus. That is, when owner is untopped the window disappears, when owner regains focus, the window automatically reappears.

Some common characteristics of windows with any WF_TOPMOST state set;

  1. Changing the WF_TOPMOST state can be done on open windows, but it is prefer not if possible.
  2. Windows which have TOPMOST state 1 or 2 never get keyboard focus.
  3. Windows which have TOPMOST state 1 or 2 never get WM_TOPPED or WM_UNTOPPED AES messages.

State 1:
Setting state 1 will make the corresponding window 'float' ontop of all other classical windows. State 1 windows will stay ontop until closed by the user or the application itself.

State 2:
Setting state 1 will make the corresponding window act like windows with state 1 set, with one important exception; The window is linked to the window owner's focus status. This means that when the application that owns the window looses focus, state 2 windows are automatically made unvisible by the AES. When the application regains focus, the window is automatically made visible again. This is done automatically, and no application handling is necessary.

8.9.12 wind_update

Name: »Update Window« - bestimmt das Neuzeichnen eines Fensters.
AES-Nummer: 107
Deklaration: int16_t wind_update ( int16_t wi_ubegend );
Beschreibung: Die Funktion signalisiert dem AES, daß die Benutzerapplikation gerade den Bildschirm neu aufbaut. Das AES schränkt daraufhin seine eigenen grafischen "Tätigkeiten", wie z. B. das Herunterklappen von Dropdownmenüs, ein.
wi_ubegend Bedeutung
   
END_UPDATE (0) Bildschirmaufbau ist abgeschlossen.
BEG_UPDATE (1) Aufbau beginnt, Rechtecklisten werden eingefroren.
END_MCTRL (2) Applikation gibt Mauskontrolle ab
BEG_MCTRL (3) die Applikation möchte die alleinige Kontrolle über die Maus haben.


MagiC implementiert den 'check and set mode' von AES 4.00 Der Aufruf erfolgt in diesem Fall per wind_update (BEG_UPDATE|0x100) bzw. wind_update (BEG_MCTRL|0x100). Dabei wird die Update-Kontrolle nur noch übernommen, falls keine andere Applikation die Kontrolle hat bzw. die eigene Applikation besitzt.

Das Vorhandensein dieses Features kann per appl_getinfo (Opcode 11) abgefragt werden.
Ergebnis: Ein Fehler ist nur dann aufgetreten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: All AES versions.
Gruppe: Fensterverwaltung
Querverweis: Binding

8.9.12.1 Bindings für wind_update

C: int16_t wind_update ( int16_t wi_ubegend );
Umsetzung:
int16_t wind_update (int16_t wi_ubegend)
{
   int_in[0] = wi_ubegend;
   return ( crys_if(107) );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 107 # Opcode der Funktion
control+2 control[1] 1 # Einträge in int_in
control+4 control[2] 1 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_ubegend
int_out int_out[0] Return-Wert

8.9.13 wind_xget

Name: »Get Window« - ermittelt die Parameter eines Fensters.
AES-Nummer: 104
Deklaration: int16_t wind_xget ( int16_t wi_ghandle, int16_t wi_gfield, int16_t *wi_gw1, int16_t *wi_gw2, int16_t *wi_gw3, int16_t *wi_gw3 int16_t *wo_gw2, int16_t *wo_gw3, int16_t *wo_gw3 );
Beschreibung: Die Funktion liefert abhängig von den übergebenen Parametern verschiedene Informationen über das Fenster mit der Kennung wi_ghandle. Es gilt für wi_gfield.

Zusammenfassung aller Unterfunktionen
WF_CALCF2W (42)
This mode will take an arbitrary FULL area, and return the corresponding WORK area.

Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_CALCW2F (43)
This mode will take an arbitrary WORK area, and return the resulting FULL area of the window in question.

Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
WF_FIRSTAREAXYWH (13)
wi_gw1, wi_gw2, wi_gw3 und wi_gw4 is a clipping area, and the AES may optimize the list of rectangles returned by WF_FIRSTAREAXYWH and WF_NEXTXYWH.

Das Vorhandensein dieses Features sollte per appl_getinfo (Opcode 11) ermittelt werden.
Ergebnis: Ein Fehler ist nur dann aufgetreten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: XaAES seit 2004-12-14
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_get   wind_set   Unterfunktionsübersicht

8.9.13.1 Bindings für wind_xget

C: int16_t wind_xget ( int16_t wi_ghandle, int16_t wi_gfield, int16_t *wi_gw1, int16_t *wi_gw2, int16_t *wi_gw3, int16_t *wi_gw3, int16_t *wo_sw1, int16_t *wo_sw2, int16_t *wo_sw3, int16_t *wo_sw4 );
Umsetzung:
int16_t wind_xget ( int16_t wi_ghandle, int16_t wi_gfield,
                    int16_t *wi_gw1, int16_t *wi_gw2,
                    int16_t *wi_gw3, int16_t *wi_gw3,
                    int16_t *wo_sw1, int16_t *wo_sw2,
                    int16_t *wo_sw3, int16_t *wo_sw4 );
{
   int_in[0]  = wi_ghandle;
   int_in[1]  = wi_gfield;
   int_in[2]  = *wi_sw1;
   int_in[3]  = *wi_sw2;
   int_in[4]  = *wi_sw3;
   int_in[5]  = *wi_sw4;

   crys_if (104);

   *wo_gw1 = int_out[1];
   *wo_gw2 = int_out[2];
   *wo_gw3 = int_out[3];
   *wo_gw4 = int_out[4];

   return ( int_out[0] );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 104 # Opcode der Funktion
control+2 control[1] 6 # Einträge in int_in
control+4 control[2] 5 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_ghandle
int_in+2 int_in[1] wi_gfield
int_in+4 int_in[2] wi_sw1
int_in+6 int_in[3] wi_sw2
int_in+8 int_in[4] wi_sw3
int_in+10 int_in[5] wi_sw4
int_out int_out[0] Return-Wert
int_out+2 int_out[1] wi_gw1
int_out+4 int_out[2] wi_gw2
int_out+6 int_out[3] wi_gw3
int_out+8 int_out[4] wi_gw4

8.9.14 wind_xset

Name: »Set Window« - verändert einzelne Parameter eines Fensters.
AES-Nummer: 105
Deklaration: int16_t wind_xset ( int16_t wi_shandle, int16_t wi_sfield, int16_t wi_sw1, int16_t wi_sw2, int16_t wi_sw3, int16_t wi_sw4, int16_t *wo_sw1, int16_t *wo_sw2, int16_t *wo_sw3, int16_t *wo_sw4 );
Beschreibung: Die Funktion verändert, abhängig von den übergebenen Parametern, verschiedene Eigenschaften des Fensters mit der Kennung wi_shandle. Es gilt für wi_sfield.

Zusammenfassung aller Unterfunktionen
WF_CURRXYWH (5)
setzt die Fenstergröße aus wi_sw1, wi_sw2, wi_sw3 und wi_sw4 fest.

XaAES is compatible with all other AES's, except from the following points:

  1. If x, y, w and h all have a value of -1, XaAES ignores the call, but fills in any return values when needed.

  2. x and y values of -1 are 'legal', i.e, one cannot use -1 to use any old x value. Ofcourse, x and y coordinates are checked to be inside the rootwindow (not X when noleft = false).

  3. When h have a value of 0, the window is infact shaded. This is a thing N.AES does with MiNTSetter, altho I'm not sure this is correct. The application is sent a WM_SHADED. On the next wind_set(handle, WF_CURRXYWH,...) where the h coordinate is not equal to the window's shaded height, the window is unshaded. While the window is shaded via this method, shift-clicks on the window title to shade a window is ignored.



XaAES since 2004-09-22, there is an short version.
WF_FULLXYWH (7)
If either wi_sw1, wi_sw2, wi_sw3 or wi_sw4 have a value of -1, that coordinate is not changed. If ALL coordinates have a value of -1, the window is actually moved to the current FULLXYWH coordinates, making the current window position the new PREVXYWH position.
  1. XaAES returns the resulting FULLXYWH, which the window will be moved to on the next use of the FULLED gadget or...
  2. When all coordinates passed have a value of -1, XaAES return the CURRXYWH of the new position the window was moved to, removing the need for a wind_get(handle, WF_CURRXYWH,...) call.


XaAES since 2004-09-22, there is an short version.
WF_PREVXYWH (6)
If eitherwi_sw1, wi_sw2, wi_sw3 or wi_sw4 have a value of -1, that coordinate is not changed. If ALL coordinates have a value of -1, the window is actually moved to the current PREVXYWH coordinates, making the current window position the new PREVXYWH position.
  1. XaAES returns the resulting PREVXYWH, which the window will be moved to on the next use of the FULLED gadget or...
  2. When all coordinates passed have a value of -1, XaAES return the CURRXYWH of the new position the window was moved to, removing the need for a wind_get(handle, WF_CURRXYWH,...) call.


XaAES since 2004-09-22, there is an short version.


Hinweis: Die Parameter wi_sw1, wi_sw2, wi_sw3 und wi_sw4 sind dabei von der über den Parameter wi_sfield übergebenen Funktionsnummer abhängig.
Ergebnis: Ein Fehler ist nur dann aufgetreten, wenn als Ergebnis 0 zurückgegeben wird.
Verfügbar: All AES versions.
Gruppe: Fensterverwaltung
Querverweis: Binding   wind_get   wind_create   OBJECT   Unterfunktionsübersicht

8.9.14.1 Bindings für wind_xset

C: int16_t wind_xset ( int16_t wi_shandle, int16_t wi_sfield, int16_t wi_sw1, int16_t wi_sw2, int16_t wi_sw3, int16_t wi_sw4, int16_t *wo_sw1, int16_t *wo_sw2, int16_t *wo_sw3, int16_t *wo_sw4 );
Binding:
int16_t wind_xset ( int16_t wi_shandle, int16_t wi_sfield,
                    int16_t wi_sw1, int16_t wi_sw2,
                    int16_t wi_sw3, int16_t wi_sw4,
                    int16_t *wo_sw1, int16_t *wo_sw2,
                    int16_t *wo_sw3, int16_t *wo_sw4 );
{
   int_in[0]  = wi_shandle;
   int_in[1]  = wi_sfield;
   int_in[2]  = wi_sw1;
   int_in[3]  = wi_sw2;
   int_in[4]  = wi_sw3;
   int_in[5]  = wi_sw4;

   crys_if(105);

   *wo_sw1 = int_out[1];
   *wo_sw1 = int_out[2];
   *wo_sw1 = int_out[3];
   *wo_sw1 = int_out[4];

   return ( int_out[0] );
}
GEM-Arrays:

Adresse Feldelement Belegung
control control[0] 105 # Opcode der Funktion
control+2 control[1] 6 # Einträge in int_in
control+4 control[2] 5 # Einträge in int_out
control+6 control[3] 0 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] wi_shandle
int_in+2 int_in[1] wi_sfield
int_in+4 int_in[2] wi_sw1
int_in+6 int_in[3] wi_sw2
int_in+8 int_in[4] wi_sw3
int_in+10 int_in[5] wi_sw4
int_out int_out[0] Return-Wert
int_out+2 int_out[1] wo_sw1
int_out+4 int_out[2] wo_sw2
int_out+6 int_out[3] wo_sw3
int_out+8 int_out[4] wo_sw4

8.9.15 Die Komponenten eines Fensters

Die folgende Abbildung zeigt das Fenster eines GEM-Texteditors, und beschreibt die wichtigsten Komponenten dieses Fensters.

Querverweis: wind_create   Fensterverwaltung

8.9.16 Übersicht der wind_get/set Unterfunktionen

Unterfunktion dez hex get xget set xset
WF_KIND 1 0x0001 x   x  
WF_NAME 2 0x0002 x   x  
WF_INFO 3 0x0003 x   x  
WF_WORKXYWH 4 0x0004 x      
WF_CURRXYWH 5 0x0005 x   x x
WF_PREVXYWH 6 0x0006 x   x x
WF_FULLXYWH 7 0x0007 x   x x
WF_HSLIDE 8 0x0008 x   x  
WF_VSLIDE 9 0x0009 x   x  
WF_TOP 10 0x000A x   x  
WF_FIRSTXYWH 11 0x000B x      
WF_NEXTXYWH 12 0x000C x      
WF_IGNORE 13 0x000D     x  
WF_FIRSTAREAXYWH 13 0x000D   x    
WF_NEWDESK 14 0x000E x   x  
WF_HSLSIZE 15 0x000F x   x  
WF_VSLSIZE 16 0x0010 x   x  
WF_SCREEN 17 0x0011 x      
WF_COLOR 18 0x0012     x  
WF_ATTRB 18 0x0012     x  
WF_DCOLOR 19 0x0013 x   x  
WF_SIZETOP 19 0x0013     x  
WF_OWNER 20 0x0014 x      
WF_TOPAP (only X/GEM) 20 0x0014        
WF_BEVENT 24 0x0018 x   x  
WF_BOTTOM 25 0x0019 x   x  
WF_ICONIFY 26 0x001A x   x  
WF_UNICONIFY 27 0x001B x   x  
WF_UNICONIFYXYWH 28 0x001C     x  
WF_TOOLBAR 30 0x001E x   x  
WF_FTOOLBAR 31 0x001F x      
WF_NTOOLBAR 32 0x0020 x      
WF_MENU 33 0x0021 x   x  
WF_WHEEL 40 0x0028 x   x  
WF_OPTS 41 0x0029 x   x  
WF_CALCF2W 42 0x002A   x    
WF_CALCW2F 43 0x002B   x    
WF_CALCF2U 44 0x002C        
WF_CALCU2F 45 0x002D        
WF_MAXWORKXYWH 46 0x002E        
WF_M_BACKDROP 100 0x0064 x      
WF_M_OWNER 101 0x0065 x      
WF_M_WINDLIST 102 0x0066 x      
WF_MINXYWH 103 0x0067 x      
WF_INFOXYWH 104 0x0068 x      
WF_WIDGETS 200 0x00C8 x   x  
WF_USER_POINTER 230 0x00E6 x   x  
WF_WIND_ATTACH 231 0x00E7     x  
WF_TOPMOST 232 0x00E8     x  
WF_BITMAP 233 0x00E9 x      
WF_OPTIONS 234 0x00EA     x  
WF_FULLSCREEN 235 0x00EB     x  
WF_OBFLAG 1001 0x03E9 x   x  
WF_OBTYPE 1002 0x03EA x      
WF_OBSPEC 1003 0x03EB x   x  
X_WF_MENU 4352 0x1100 x   x  
X_WF_DIALOG 4608 0x1200 x   x  
X_WF_DIALWID 4864 0x1300 x   x  
X_WF_DIALHT 5120 0x1400 x   x  
X_WF_DFLTDESK 5376 0x1500 x   x  
X_WF_MINMAX 5632 0x1600 x   x  
X_WF_HSPLIT 5888 0x1700 x   x  
X_WF_VSPLIT 6144 0x1800 x   x  
X_WF_SPLMIN 6400 0x1900 x   x  
X_WF_HSLIDE2 6656 0x1A00 x   x  
X_WF_VSLIDE2 6912 0x1B00 x   x  
X_WF_HSLSIZE2 7168 0x1C00 x   x  
X_WF_VSLSIZE2 7424 0x1D00 x   x  
X_WF_DIALFLGS 7680 0x1E00 x   x  
X_WF_OBJHAND 7936 0x1F00 x   x  
X_WF_DIALEDIT 8192 0x2000 x   x  
X_WF_DCOLSTAT 8448 0x2100 x   x  
WF_WINX 22360 0x5758 x      
WF_WINXCFG 22361 0x5759 x   x  
WF_DDELAY 22362 0x575A x   x  
WF_SHADE 22365 0x575D x   x  
WF_STACK 22366 0x575E     x  
WF_TOPALL 22367 0x575F     x  
WF_BOTTOMALL 22368 0x5760     x  
XA 22593 0x5841 x      

8.9.17 wind_get und wind_set mode von Geneva

In all cases, the wind_get function can be used to retrieve the following information for a particular window. wind_set can be used to set the values.

X_WF_MENU (0x1100)


Setting this attribute causes a menu bar to appear below the window's name and information bars. The wi_sw1 parameter should have the high-WORD of the address of the object tree containing the menu. wi_sw2 contains the low-WORD of the address. If a NULL pointer is passed, the menu bar will be blank.

Example:

      int handle;
      OBJECT *menu;

      handle = wind_create( MOVER|X_MENU, 20, 20, 200, 200 );
      if( handle>0 ) {
         wind_set( handle, X_WF_MENU, menu );
         wind_open( handle, 20, 20, 200, 200 );
      }
X_WF_DIALOG (0x1200)


This option allows a program to create dialog boxes within windows. It is generally used in conjunction with the X_MU_DIALOG event type.

The wi_sw1 parameter should have the high-WORD of the address of the object tree containing the dialog. wi_sw2 contains the low- WORD of the address. If a NULL address is passed, there will be no dialog associated with the window, and it will receive events normally.

If the window does not have horizontal or vertical sliders, then the size of the root object of the dialog will automatically be sized to fit the entire working area of the window. If the window has sliders, then the dialog will automatically scroll and update as the user operates them. No action is necessary on the part of the program.

If the window is open when this call occurs, the entire dialog is always redrawn and the sliders, if present, are updated. All slider updates can be turned off by clearing the X_WTFL_SLIDERS attribute for the window, by way of the x_wind_tree function.

Refer to the section describing shel_write for information on how to cause a windowed dialog to scroll by sending a message to Geneva.

Example:

      int handle;
      OBJECT dial = { -1, -1, -1, G_BOX, 0, 0, 0x021131L, 0, 0, 1000, 1000 };
                              /* a large, filled rectangle */


      handle = wind_create( MOVER|SIZER|CLOSER|UPARROW|DNARROW|\
        VSLIDE|LFARROW|RTARROW|HSLIDE, 20, 20, 200, 200 );

      if( handle>0 ) {
        wind_set( handle, X_WF_DIALOG, d
        wind_set( handle, X_WF_DIALHT, 10 );  /* vert. scroll jump */
        wind_set( handle, X_WF_DIALWID, 10 ); /* horiz. scroll jump */
        wind_open( handle, 20, 20, 200, 200 );
      }
X_WF_DIALWID (0x1300)


This option is used in conjunction with the X_WF_DIALOG option. It controls the interval at which scrolling by the user occurs. For instance, a value of 10 will cause the left and right scroll arrows to scroll the dialog within the window by 10 pixels at a time. The default value is 1.

Since, by default, Geneva will use a blit operation to move most of a windowed dialog's contents when scrolling, unpredictable redraw errors can occur when redrawing the unblitted area of a dialog if the dialog uses a patterned fill and X_WF_DIALWID is not a multiple of 16 pixels.

X_WF_DIALHT (0x1400)


This option is used in conjunction with the X_WF_DIALOG option. It controls the interval at which scrolling by the user occurs. For instance, a value of 10 will cause the up and down scroll arrows to scroll the dialog within the window by 10 pixels at a time. The default value is 1.

Since, by default, Geneva will use a blit operation to move most of a windowed dialog's contents when scrolling, unpredictable redraw errors can occur when redrawing the unblitted area of a dialog if the dialog uses a patterned fill and X_WF_DIALWID is not a multiple of 16 pixels.

X_WF_DFLTDESK (0x1500)


This option allows a program to redefine the default desktop, so that it will be something other than the normal grey pattern. The wi_sw1 parameter should have the high-WORD of the address of the object tree containing the new object tree. wi_sw2 cont address pattern) desktop will become the new default. The wi_sw3 parameter must contain the total number of objects in the object tree which contains the new desktop.

If the application which has changed the default desktop terminates, the default grey pattern is reinstated automatically.

X_WF_MINMAX (0x1600)


This option allows a program to change the minimum and maximum sizes to which the user can resize a particular window.

By default, Geneva calculates a minimum window size that is large enough to contain all of the window widgets without overlapping. The maximum size always defaults to the working area of the entire desktop.

The wi_sw1 and wi_sw2 parameters are the minimum window width and height, respectively, and wi_sw3 and wi_sw4 are the maximum width and height of the window. Passing a value of -1 in any of these parameters in a call to wind_set will cause no change to occur in that one value.

X_WF_HSPLIT (0x1700)


This option reflects the location of the horizontal split bar of a window.

The wi_sw1 parameter is the new location of the bar, in pixels. If the value is zero, the bar will be all the way to the left edge; if it is -1 (which is the default) it will be all the way to the right.

Return value from wind_get:

wi_gw1 = Split bar position
wi_gw2 = Size, in pixels, of the upper window region
wi_gw3 = Size of the lower window region

Note: The value returned by wind_get may not be equal to the value supplied to wind_set if the user has either changed the size of the window, or if the value was too large or not large enough to exceed the minimum bar position. See the function x_wind_create and the X_WF_SPLMIN option, below, for more information.

X_WF_VSPLIT (0x1800)


This option reflects the location of the vertical split bar of a window.

The wi_sw1 parameter is the new location of the bar, in pixels. If the value is zero, the bar will be at the very top; if it is -1 (which is the default) it will be at the very bottom.

Return value from wind_get:

wi_gw1 = Split bar position
wi_gw2 = Size, in pixels, of the left window region
wi_gw3 = Size of the right window region

Note that the value returned to wind_get may not be equal to the value supplied by wind_set if the user has either changed the size of the window, or if the value was too large or not large enough to exceed the minimum bar position. See the function x_wind_create and the X_WF_SPLMIN option, below, for more information.

X_WF_SPLMIN (0x1900)


This option controls the minimum sizes of the areas defined by the horizontal and vertical split bars.

wi_sw1 = Minimum width of region to left of horizontal split
wi_sw2 = Minimum width of region to right of horizontal split
wi_sw3 = Minimum height of region above vertical split
wi_sw4 = Minimum height of region below vertical split

When the user drags a split bar, these values are checked. He will not be able to drag the bar if the window is too small to fit two regions having these sizes. When a wind_set call is made to set the position of one of the split bars, they will be 'snapped' to one edge or the other if the position is less than 1/2 of the minimum distance away from the edge. Furthermore, when the window is made smaller, the positions of the split bars are automatically changed so as to satisfy these minimum values. For this reason, a program should never assume that they have not changed.

Passing a value of -1 in any of these parameters in a call to wind_set will cause no change to occur in that one value.

X_WF_HSLIDE2 (0x1A00)


This option gets or sets the position of the second horizontal slider (which appears to the right of a horizontal split bar) in a manner identical to WF_HSLIDE.

X_WF_VSLIDE2 (0x1B00)


This option gets or sets the position of the second vertical slider (which appears below a vertical split bar) in a manner identical to WF_VSLIDE.

X_WF_HSLSIZE2 (0x1C00)


This option gets or sets the size of the second horizontal slider (which appears to the right of a horizontal split bar) in a manner identical to WF_HSLSIZE.

X_WF_VSLSIZE2 (0x1D00)


This option gets or sets the size of the second vertical slider (which appears below a vertical split bar) in a manner identical to WF_VSLSIZE.

X_WF_DIALFLGS (0x1E00)


This option gets/sets flags related to the way dialogs within windows are processed. Currently, only the following three bits are used. All other bits are reserved for future use:

X_WD_ACTIVE (bit 0)


When this bit is off, no mouse or keyboard events will be processed. This is a good way to temporarily lock a windowed dialog while presenting the user with a sub-dialog that asks for other input (like the 'Find' option in the Task Manager's 'Flags' dialog.) This attribute defaults to On.

X_WD_BLITSCRL (bit 1)


If this flag is set, which it is by default, a windowed dialog will be scrolled in real time by way of a blit operation. Care should be taken when displaying object trees which use fill patterns, because if the X_WF_DIALWID or X_WF_DIALHT are not an even increment of 16, the fill pattern may not match up correctly when the user scrolls the window. If this flag is off, the entire dialog will be redrawn every time its position changes. In this case, the scroll increment does not matter.

X_WD_KEYS (bit 2) (since Update 004)


When set, any keypresses that would otherwise be processed as part of the dialog are instead passed through to the application.

An example is when NeoDesk is run with the desktop in a window. Normally, things like [Shift]-[C] would be treated like a keypress in a dialog without any editable field and ignored. When this bit is set, the keypress will instead go to the application.

X_WF_OBJHAND (0x1F00) (since Update 003)


When an application wants to intercept some or all of the button events that would otherwise be interpreted by Geneva to mean that a window widget has been clicked on, this wind_set mode can be used to provide Geneva with the address of a routine which instructs Geneva to either ignore the event, or to process it as normal. This allows the programmer to redefine the operation of window widgets, and to define his own actions for new widgets which have been added with the x_wind_tree function.

The routine is passed the handle of the window containing the object and the index of the object within the window's object tree. If the user routine returns a 0, then Geneva will generate an X_WM_OBJECT message and send it to the application. If the routine returns a 1, then Geneva will process the action as a normal event and act accordingly.

IMPORTANT: The application's object handler routine must not use any AES functions.

The following example declares an object handler which allows the action of the vertical scroll bar to be redefined:

       /* change this to "int cdecl objhand..." for Pure C */
       int objhand( int handle, int obj )
       {  /* handle parameter is not used */
         if( obj==WGVSMLSL ) return 0;   /* this is the vertical slider */
         return 1;                       /* otherwise, process as normal */
       }

       main()
       {
        int handle, message[8];

         handle = wind_create( NAME|MOVER|VSLIDE|UPARROW|DNARROW,
             50, 50, 150, 150 );

         if( handle > 0 )
         {
           wind_set( handle, X_WF_OBJHAND, &objhand );
           wind_open( handle, 50, 50, 150, 150 );
         }

         ...

         evnt_mesag( message );

         switch( message[0] )
         {

           case X_WM_OBJECT:
             if( message[3]==handle && message[4]==WGVSMLSL )
                /* do something new with the slider */
         }
       }

If wind_set( X_WF_OBJHAND ) is passed a NULL pointer instead of a pointer to a function, object handling is discontinued for that window.

Note that in order for Geneva to determine that the mouse has been clicked on an object in a window's tree structure, it must be of type EXIT or TOUCHEXIT. Geneva's default window widgets already have these attributes set correctly.

wind_get can also be used to get a pointer to the current object handler routine. A NULL pointer means that there is no object handler defined.

X_WF_DIALEDIT (0x2000) (since Update 003)


When a windowed dialog has been defined with wind_set mode X_WF_DIALOG, these two options can be used to get or set the index of the object which currently has the edit cursor. This can be helpful when an application changes the contents of a text field while the dialog is still displayed, or when it needs to hide the object that currently has the edit cursor.

wind_get( X_WF_DIALEDIT ) will return the index of the object which currently has the edit cursor in the wi_gw1 parameter, and the position of the edit cursor within the object's text in the wi_gw2 parameter.

wind_set( X_WF_DIALEDIT ) changes the object (wi_sw1) and the edit index (wi_sw2). If the object is 0, then the edit cursor will simply be turned off; otherwise it will be moved to the new object. If the index is 0, the cursor will be positioned before the leftmost character in the field; if it is a number > 0, it will be further to the right. If the index is -1, then the cursor will be automatically moved to the rightmost position.

X_WF_DCOLSTAT (0x2100) (since Update 004)


This mode gets or sets a window widget's default colours and ob_state value. Unlike WF_DCOLOR, this option gives full control over all of Geneva's extended window widgets.

For wind_set, the wi_sw1 parameter contains the index of the window widget to change, taken from the list of WGCLOSE through WGSIZE, as outlined in xwind.h. wi_sw2 contains the colour for the widget when the window is on top, wi_sw3 is for an untopped window. wi_sw4 contains the ob_state WORD of the object. If any of these values is set to -1, then no change occurs.

For wind_get, the wi_sw1 parameter must be a pointer to a WORD containing the index of the widget being inquired about, the same way WF_COLOR and WFDCOLOR work.

Example: Turn the 3D attribute on for the mover bar

      int top, untop, state, gadget;

      gadget = WGMOVE;
      wind_get( 0, X_WF_DCOLSTAT, &gadget, &top, &untop, &state );
      state |= X_MAGIC|X_DRAW3D;
      wind_set( 0, X_WF_DCOLSTAT, gadget, -1, -1, state );

HomeAESFensterdialogeFileselektoren