Condividi tramite


Tavolozza sistema

Il sistema gestisce una tavolozza di sistema per ogni dispositivo che usa tavolozze. La tavolozza di sistema contiene i valori di colore per tutti i colori che possono essere visualizzati o disegnati dal dispositivo. Oltre a visualizzare il contenuto del riquadro di sistema, le applicazioni non possono accedere direttamente alla tavolozza del sistema. Al contrario, il sistema ha il controllo completo della tavolozza del sistema e consente l'accesso solo tramite l'uso di tavolozze logiche.

Un'applicazione può visualizzare il contenuto del riquadro di sistema usando la funzione GetSystemPaletteEntries . Questa funzione recupera il contenuto di una o più voci, fino al numero totale di voci nel riquadro di sistema. Il totale è sempre uguale al numero restituito per il valore SIZEPALETTE dalla funzione GetDeviceCaps ed è uguale alla dimensione massima per qualsiasi tavolozza logica specificata.

Anche se le applicazioni non possono modificare direttamente i colori nella tavolozza del sistema, possono causare modifiche quando si realizzano tavolozze logiche. Per realizzare una tavolozza, il sistema esamina ogni colore richiesto e tenta di trovare una voce nella tavolozza di sistema che contiene una corrispondenza esatta. Se il sistema trova un colore corrispondente, esegue il mapping dell'indice della tavolozza logica all'indice della tavolozza di sistema corrispondente. Se il sistema non trova una corrispondenza esatta, copia il colore richiesto in una voce della tavolozza di sistema inutilizzata prima di eseguire il mapping degli indici. Se tutte le voci della tavolozza di sistema sono in uso, il sistema esegue il mapping dell'indice della tavolozza logica alla voce della tavolozza di sistema il cui colore corrisponde maggiormente al colore richiesto. Dopo aver impostato questo mapping, le applicazioni non possono eseguirne l'override. Ad esempio, le applicazioni non possono usare indici della tavolozza di sistema per specificare i colori; sono consentiti solo gli indici della tavolozza logica.

Le applicazioni possono modificare la modalità di mapping degli indici impostando il membro peFlags della struttura PALETTEENTRY sui valori selezionati durante la creazione della tavolozza logica. Ad esempio, il flag di PC_NOCOLLAPSE indirizza il sistema a copiare immediatamente il colore richiesto in una voce della tavolozza di sistema inutilizzata indipendentemente dal fatto che una voce della tavolozza di sistema contenga già tale colore. Inoltre, il flag PC_EXPLICIT indica al sistema di eseguire il mapping dell'indice della tavolozza logica a un indice della tavolozza di sistema specificato in modo esplicito. L'applicazione fornisce l'indice della tavolozza di sistema nella parola in ordine basso della struttura PALETTEENTRY .

Le tavolozze possono essere realizzate come tavolozza di sfondo o come tavolozza in primo piano specificando rispettivamente TRUE o FALSE per il parametro bForceBackground nella funzione SelectPalette . Nel sistema può essere presente una sola tavolozza in primo piano alla volta. Se la finestra è la finestra attualmente attiva o un discendente della finestra attualmente attiva, può realizzare una tavolozza in primo piano. In caso contrario, la tavolozza viene realizzata come tavolozza di sfondo indipendentemente dal valore del parametro bForceBackground . La proprietà critica di una tavolozza in primo piano è che, quando realizzato, può sovrascrivere tutte le voci (ad eccezione delle voci statiche) nella tavolozza di sistema. Il sistema esegue questa operazione contrassegnando tutte le voci che non sono statiche nella tavolozza di sistema come inutilizzate prima della realizzazione di una tavolozza in primo piano, eliminando così tutte le voci utilizzate. Non si verifica alcuna pre-elaborazione sulla tavolozza di sistema per la realizzazione di una tavolozza di sfondo. La tavolozza in primo piano imposta tutti i possibili colori non statico. Le tavolozze di sfondo possono impostare solo ciò che rimane aperto e sono classificati in ordine di priorità in modo first-come, first-serve. In genere, le applicazioni usano tavolozze di sfondo per le finestre figlio che realizzano le proprie tavolozze individuali. Ciò consente di ridurre al minimo il numero di modifiche apportate alla tavolozza del sistema.

Una voce della tavolozza di sistema inutilizzata è qualsiasi voce non riservata e non contiene un colore statico. Le voci riservate vengono contrassegnate in modo esplicito con il valore PC_RESERVED. Queste voci vengono create quando un'applicazione realizza una tavolozza logica per l'animazione della tavolozza. Le voci di colore statiche vengono create dal sistema e corrispondono ai colori nella tavolozza predefinita. La funzione GetDeviceCaps può essere usata per recuperare il valore NUMRESERVED, che specifica il numero di voci della tavolozza di sistema riservate per i colori statici.

Poiché la tavolozza di sistema ha un numero limitato di voci, la selezione e la realizzazione di una tavolozza logica per un determinato dispositivo possono influire sui colori associati ad altre tavolozze logiche per lo stesso dispositivo. Questi cambiamenti di colore sono particolarmente drammatici quando si verificano sullo schermo. Un'applicazione può assicurarsi che i colori ragionevoli vengano usati per la tavolozza logica attualmente selezionata reimpostando la tavolozza prima di ogni uso. Un'applicazione reimposta la tavolozza chiamando le funzioni Unobject e RealizePalette . L'uso di queste funzioni fa sì che il sistema esegui il mapping dei colori nella tavolozza logica a colori ragionevoli nella tavolozza di sistema.