OK, din minimala widget fr†n steg 1 k”rs.

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:

N„r din widget „r skapad, erh†ller den en tidigare lagrad setupstr„ng i 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.