OK, Ihr minimales Widget von Schritt 1 l„uft schon mal.

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:

Wenn Ihr Widget erzeugt wird, erh„lt es einen vorher gespeicherten Einstellungsstring im Feld 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.