Sie haben wahrscheinlich schon herausgefunden, daá das minimale Widget zwar darauf reagiert, wenn Schriftarten und Farben darauf fallengelassen werden, diese Schriftarten und Farben aber nicht gespeichert werden, wenn das &xcenter; geschlossen und wieder ge”ffnet wird.
Wenn Sie das minimale Widget so ver„ndert haben, daá es in der Gr”áe ver„ndert
werden kann (durch Setzen des Attributs WGTF_SIZEABLE
im Feld
ulClassFlags
von
XCENTERWIDGETCLASS
),
werden Sie genauso bemerkt haben, daá die Gr”áe des Widgets auch nicht erhalten
bleibt.
Sicher, das &xcenter; k”nnte das Speichern dieser Einstellungen fr Ihr
Widget implementiert haben. Aber wo wrde dann Ihr Widget zus„tzliche Daten
speichern, von denen das &xcenter; dann nichts weiá? Die Profil-Funktionen
zu benutzen, um die Daten des Widgets in der OS2.INI
zu speichern,
w„re keine gute Idee, denn es k”nnte mehrere Instanzen Ihren Widgets geben, die
ihre Daten alle unabh„ngig voneinander speichern k”nnen sollen.
Deshalb habe ich mir berlegt, daá es die beste M”glichkeit w„re, die Daten des Widgets mit den Daten des &xcenter;s, zu dem das Widget geh”rt, zu speichern.
Um dies m”glichst flexibel und einfach zu halten, k”nnen die Widgets Einstellungsstrings zugeordnet bekommen. Wenn Sie sich die Seite "Widgets" im Einstellungsnotizbuch eines &xcenter;s ansehen, werden Sie bemerken, daá jedes Widget einen eigenen Einstellungsstring benutzen kann, um all die Daten zu speichern, die n”tig sind.
Obwohl die Widgets nicht selbst Objekte auf der Arbeitsoberfl„che sind, habe
ich mich zur Vereinfachung entschieden, das Format der WPS-Einstellungsstrings
genauso auch fr die Widgets zu benutzen. Das heiát, daá Ihr Widget z. B. den
Einstellungsstring BACKGROUNDCOLOR=00FF00;
interpretieren kann, der
die Farbe des Widget-Hintergrundes auf grn setzen wrde.
Ihre Widget-Klasse muá nun zwei Dinge implementieren:
BACKGROUNDCOLOR
von einem
sechsstelligen RGB-Wert in Hex gefolgt sein máte. Die Definition ist Sache
der Widget-Klasse.
pcszSetupString
seiner
XCENTERWIDGET
-Struktur, mit der
auch WM_CREATE
kommt. Sie k”nnen dann Ihre eigene Struktur erstellen
und sie in XCENTERWIDGET.pUser
speichern, den Einstellungsstring
parsen und die Werte dann darin speichern. Natrlich sollten Sie auch vernnftige
Standardwerte vorsehen, wenn ein Einstellungsstring fehlt, weil er noch nicht da ist,
wenn Ihr Widget das erste Mal vom Benutzer erzeugt wird.
Wenn andersherum die Daten Ihres Widgets sich ge„ndert haben (z.B. weil eine neue
Hintergrundfarbe darauf fallengelassen wurde), sollte es einen neuen Einstellungsstring
erzeugen.
Nachdem der Einstellungsstring erzeugt wurde, muá das Widget die Nachricht
XCM_SAVESETUP
an sein Mutterfenster schicken (das entweder das
&xcenter; ist oder das Fenster des Fach-Widgets, in dem das Widget sich befindet),
was dann zur Folge hat, daá der neue Einstellungsstring zusammen mit den anderen
Daten des Widgets in den privaten Daten des &xcenter;s gespeichert wird. Siehe auch
center.h
fr die Details.
Um die Funktionalit„t der Einstellungsstrings zu verpacken, empfehle ich, daá Sie eine neue Struktur fr "speicherbare Instanzdaten" definieren. Diese k”nnte z.B. Felder fr Hintergrund- und Vordergrundfarbe und die benutzte Schriftart enthalten. Fr in der Gr”áe ver„nderbare Widgets k”nnte das auch die momentane Gr”áe umfassen.
Diese Verpackung erlaubt es Ihrer Widget-Klasse, sp„ter auf der Basis von Einstellungsstrings auch mit Einstellungsdialogen zu arbeiten, die sogar aufgerufen werden k”nnen, wenn es noch gar keins Ihrer Widgets gibt.
Das minimale Beispiel enth„lt noch keine Vorkehrungen fr Einstellungsstrings.
Laden Sie den &xwp;-Quellcode herunter und schauen Sie sich die Dateien im
Verzeichnis src\widgets
an, das noch mehr Beispiele dazu enth„lt, wie
es funktioniert. Die XFLDR.DLL
exportiert auáerdem ein paar ntzliche
Funktionen, die Sie benutzen k”nnen, um Einstellungsstrings einfacher zu parsen.