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:
BACKGROUNDCOLOR
deve essere seguita da un valore esadecimale RGB
a sei cifre. La definizione sta alla classe elemento.
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.