Du har troligtvis redan r„knat ut att trots att den minimala widgeten regagerar p† att fonter och f„rger sl„pps p† den, kommer dessa fonter och f„rger inte att sparas n„r &xcenter; st„ngs och sedan †ter ”ppnas.
Liknande, om du „ndrade den minimala widgeten till att bli storleksf”r„ndringsbar
(genom att s„tta WGTF_SIZEABLE flaggan i ulClassFlags f„ltet hos
XCENTERWIDGETCLASS,
kommer du att se att widgetens storlek inte heller kommer att kommas ih†g.
Naturligtvis, &xcenter; kunde ha implementerat sparande av dess inst„llningar hos
din widget. Men sedan, var skulle din widget lagra ytterligare data som &xcenter; inte
skulle k„nna till? Att anv„nda profilfunktioner f”r att lagra widgetdata i
OS2.INI skulle inte vara n†gon bra id‚ d„rf”r att det kan finnas †tskilliga
instanser av din widget, vilka alla b”r lagra sina data oberoende.
Som ett resultat, jag r„knade ut att lagra data tillsammans med data hos &xcenter; som widgeten tillh”r skulle vara den b„sta l”sningen.
F”r att g”ra detta ytterst flexibelt och enkelt att anv„nda, kan widgets ha setupstr„ngar associerade till sig. Om du tittar p† sidan "Widgets" i notboken med inst„llningar hos &xcenter;, kommer du att se att varje widget kan ha sin egen setupstr„ng f”r att lagra det data som den vill.
Žven om widgets inte sj„lva „r n†gra Skrivbordsobjekt, f”r enkelhetens skull, har jag valt
att anv„nda WPS setupstr„ngformat ocks† f”r widgets. Det betyder, din widget kan f”rst†, till exempel,
en BACKGROUNDCOLOR=00FF00; setupstr„ng, vilken skulle s„tta widgetens bakgrundsf„rg
till gr”n.
Din widgetklass m†ste nu implementera tv† saker:
BACKGROUNDCOLOR str„ngen skulle ha f”ljts av ett sex-siffrigt RGB hexv„rde.
Definitionen „r upp till din widgetklass.
pcszSetupString f„ltet i sin
XCENTERWIDGET struktur som
kommer med WM_CREATE. Du kan sedan allokera din egen struktur och lagra
den i XCENTERWIDGET.pUser, analysera setupstr„ngen, och lagra dess
v„rden d„r. Naturligtvis, b”r du s„tta upp s„kra standardv„rden om en setupstr„ng
saknas d„rf”r att det finns inte n†gon n„r din widget ursprungligen skapas av
anv„ndaren.
Omv„nt, n„r din widgets data har „ndrats (t.ex. d„rf”r att en ny bakgrundsf„rg
har sl„ppts p† den), b”r den skapa en ny full setupstr„ng.
Efter att den nya setupstr„ngen „r komponerad, m†ste widgeten s„nda
XCM_SAVESETUP meddelandet till sitt f”r„ldrarf”nster (vilken antingen
„r &xcenter; klient eller ett fack-widgetf”nster, om widgeten lagras i ett fack),
vilket kommer att orsaka att en ny setupstr„ng lagras tillsammans med andra widgetdata i
&xcenter;'s privata data. Se center.h f”r detaljer.
F”r att kunna kapsla in setupstr„ngens funktionalitet, rekommenderar jag dig att skapa en ny strukturdefinition f”r "nedsparningsbara instansdata". Den kan, till exempel, inneh†lla f„lt f”r bakgrunds-, f”rgrundsf„rg och fonter att anv„ndas. F”r storleksf”r„ndringsbara widgets, kan den ocks† inneh†lla aktuell storlek.
Denna inkapsling till†ter din widgetklass att fungera ocks† med setupstr„ngar med setupdialoger senare, vilka „ven kan anropas n„r ingen instans av din widget f”r n„rvarande existerar.
Det minimala exemplet tillhandah†ller inga m”jligheter f”r setupstr„ngar. Ladda ner &xwp;'s
k„llkod och titta i src\widgets katalogen, vilken inneh†ller fler exempel p†
hur detta fungerar. XFLDR.DLL exporterar ocks† en par andra anv„ndbara
funktioner som du kan anv„nda f”r att analysera setupstr„ngar p† ett enklare s„tt.