A questo punto l'elemento minimale dal passo 1 Š in esecuzione.

Probabilmente gi… Š chiaro che, anche se l'elemento cosŤ com'Š risponde al trascinamento di oggetti colore e font su di esso, tali oggetti (colori e font) non vengono salvati quando lo &xcenter; viene chiuso e successivamente riaperto.

Similmente, cambiando l'elemento minimale per renderlo dimensionabile (settando il flag WGTF_SIZEABLE nel campo ulClassFlags della struttura XCENTERWIDGETCLASS), si nota che le dimensioni dell'elemento non vengono comunque memorizzate.

Ovviamente, lo &xcenter; potrebbe aver implementate delle funzioni di salvataggio per l'elemento. Ma allora, come potrebbe l'elemento memorizzare dati addizionali dei quali lo &xcenter; non pu• essere a conoscenza? Usare le funzioni di profilo per memorizzare i dati dell'elemento in OS2.INI potrebbe non essere una buona idea, dato che possono esistere molte istanze di un elemento, che dovrebbero memorizzare i loro dati independentemente.

Come risultato, ho immaginato che memorizzare i dati degli elementi insieme ai dati dello &xcenter; cui appartiene l'elemento stesso sia una buona idea.

Per rendere questo comportamento il pi— possibile flessibile e semplice, gli elementi possono avere stringhe di impostazione associate. Osservando la pagina "Elementi" nel blocco delle impostazioni di uno &xcenter;, si noter… che ogni elemento pu• avere le sue proprie stringhe di impostazione per memorizzare i dati desiderati.

Anche se gli elementi non sono oggetti della Scrivania, per semplicit…, ho scelto di usare il formato delle stringhe di impostazione di WPS anche per gli elementi. Dunque, l'elemento sviluppato pu•, per esempio, comprendere una stringa BACKGROUNDCOLOR=00FF00;, che imposterebbe il colore di sfondo dell'elemento al verde.

La classe elemento deve ora implementare due cose:

Quando l'elemento viene creato, riceve una stringa precedentemente immagazzinata nel campo pcszSetupString della sua struttura XCENTERWIDGET che viene con il messaggio WM_CREATE. Ô possibile allocare una struttura e immagazzinarla in XCENTERWIDGET.pUser, elaborare la stringa di impostazione, e immagazzinare i valori lŤ. Ovviamente, bisogna impostare valori predefiniti sicuri se i dati di una stringa mancano, dato che quando l'elemento viene creato per la prima volta, questi dati saranno assenti.

Di converso, quando i dati dell'elemento sono cambiati (per esempio, dopo il trascinamento di un nuovo colore di sfondo), l'elemento dovrebbe comporre una nuova stringa di impostazioni completa. Dopo la composizione della nuova stringa, l'elemento deve mandare il messaggio XCM_SAVESETUP alla sua finestra genitore (che Š lo &xcenter; oppure una finestra di un elemento cassetto, se l'elemento Š in un cassetto), cosa che causer… il salvataggio della nuova stringa di impostazione insieme con gli altri dati dell'elemento nei dati privati dello &xcenter;. Si consulti il file center.h per dettagli.

Per incapsulare la funzione delle stringhe di impostazione, raccomando di creare una nuova definizione di struttura per "dati salvabili dell'istanza". Questa, per esempio, potrebbe contenere campi per i colori di sfondo e di primo piano, e per i font da usare. Per elementi dimensionabili, la struttura potrebbe contenere le dimensioni correnti.

Questo incapsulamento permette alla classe elemento di lavorare su stringhe di impostazione anche con dialog di impostazione, che possono essere invocate anche quando non esistono, correntemente, istanze dell'elemento.

L'esempio distribuito non ha supporto per le stringhe di impostazione. Si scarichi il codice sorgente di &xwp; e si consulti la directory src\widgets, che ha altri esempi sul funzionamento di questa funzione. XFLDR.DLL esporta anche un paio di funzioni utili per facilitare l'elaborazione di stringhe di impostazioni.