Condividi tramite


Finestra di dialogo Colore

Visualizza una finestra di dialogo modale che consente all'utente di scegliere un valore di colore specifico. L'utente può scegliere un colore da un set di tavolozze dei colori di base o personalizzate. In alternativa, l'utente può generare un valore di colore modificando i valori di colore RGB o hue, saturazione, luminosità (HSL) dell'interfaccia utente della finestra di dialogo. La finestra di dialogo Colore restituisce il valore RGB del colore selezionato dall'utente.

Creare e visualizzare una finestra di dialogo Color inizializzando una strutturaCHOOSECOLORe passando la struttura alla funzioneChooseColor. Impostando valori di parametro diversi per la struttura CHOOSECOLOR, è possibile influire sulla modalità di visualizzazione della finestra di dialogo Colore. Ad esempio, è possibile visualizzare una versione completa o parziale dell'interfaccia utente della finestra di dialogo. La figura seguente mostra la versione completa dell'interfaccia utente della finestra di dialogo colore.

finestra di dialogo colore

Se l'utente fa clic sul pulsante OK, ChooseColor restituisce TRUE. Il membro rgbResult della strutturaCHOOSECOLORcontiene il valore rgb del colore selezionato dall'utente. Il valore del colore RGB specifica le intensità dei singoli colori rosso, verde e blu che costituiscono il colore selezionato. I singoli valori sono compresi tra 0 e 255. Utilizzare le macroGetRValue, GetGValuee GetBValue per estrarre i singoli colori da un valore di colore RGB.

Se l'utente annulla la finestra di dialogo color o si verifica un errore, chooseColor restituisce FALSE e il membro rgbResult non è definito. Per determinare la causa dell'errore, chiamare la funzioneCommDlgExtendedError per recuperare il valore di errore esteso.

Gli argomenti seguenti sono trattati in questa sezione

Finestre di dialogo Colore completo e parziale

La finestra di dialogo Colore include una versione completa e una versione parziale dell'interfaccia utente. La versione completa include i controlli di base e include controlli aggiuntivi che consentono all'utente di creare colori personalizzati. La versione parziale include controlli che visualizzano le tavolozze dei colori di base e personalizzate da cui l'utente può selezionare un valore di colore.

La versione parziale della finestra di dialogo Colore include un pulsante Definisci colori personalizzati. L'utente può fare clic su questo pulsante per visualizzare la versione completa. È possibile indirizzare la finestra di dialogo Colore per visualizzare sempre la versione completa impostando il flag di CC_FULLOPEN nel membro flag della strutturaCHOOSECOLOR. Per impedire all'utente di creare colori personalizzati, è possibile impostare il flag CC_PREVENTFULLOPEN per disabilitare il pulsante Definisci colori personalizzati.

I colori di base rappresentano una selezione dei colori disponibili nel dispositivo specificato. Il numero effettivo di colori visualizzato è determinato dal driver di visualizzazione. Ad esempio, un driver VGA visualizza 48 colori e un driver di visualizzazione monocromatico visualizza solo 16.

I colori personalizzati sono quelli specificati o creati dall'utente. Quando si crea una finestra di dialogo Colore, è necessario utilizzare il lpCustColors membro della struttura CHOOSECOLOR per specificare i valori iniziali per i 16 colori personalizzati. Se la versione completa della finestra di dialogo Colore è aperta, l'utente può creare un colore personalizzato con uno dei metodi seguenti:

  • Spostamento del cursore nel controllo spettro dei colori e nel controllo diapositiva di luminosità
  • Digitare valori RGB nei controlli di modifica Rosso, Verdee Blu
  • Digitare i valori HSL nei controlli Hue, Sate Lum modificare i controlli

Per aggiungere un nuovo colore personalizzato alla visualizzazione dei colori personalizzati, l'utente può fare clic sul pulsante Aggiungi a colori personalizzati. In questo modo la finestra di dialogo copia anche il valore RGB del nuovo colore nell'elemento corrispondente nella matrice a cui punta il membro lpCustColors. Per mantenere nuovi colori personalizzati tra le chiamate a ChooseColor, è necessario allocare memoria statica per la matrice. Per altre informazioni sui modelli di colori RGB e HSL, vedere Modelli di colore usati dalla finestra di dialogo Colori.

Personalizzazione della finestra di dialogo Colore

Per personalizzare una finestra di dialogo Colore, è possibile utilizzare uno dei metodi seguenti:

  • Specificare i valori nella strutturaCHOOSECOLOR quando si crea la finestra di dialogo
  • Specificare un modello personalizzato
  • Fornire una procedura hook

È possibile modificare l'aspetto e il comportamento della finestra di dialogo Colore impostando i flag nel Flag membro della struttura CHOOSECOLOR. Ad esempio, è possibile impostare il flag CC_SOLIDCOLOR per indirizzare la finestra di dialogo per visualizzare solo i colori a tinta unita. Per fare in modo che la finestra di dialogo selezioni inizialmente un colore diverso da nero, impostare il flag di CC_RGBINIT e specificare un colore nel membro rgbResult.

È possibile fornire un modello personalizzato per la finestra di dialogo Colore, ad esempio se si desidera includere controlli aggiuntivi univoci per l'applicazione. La funzione ChooseColor usa il modello personalizzato al posto del modello predefinito.

Per fornire un modello personalizzato per la finestra di dialogo Colore

  1. Creare il modello personalizzato modificando il modello predefinito specificato nel file Color.dlg. Gli identificatori di controllo utilizzati nel modello di finestra di dialogo Colore predefinito sono definiti nel file Color.dlg.
  2. Usare la strutturaCHOOSECOLOR per abilitare il modello come indicato di seguito:
    • Se il modello personalizzato è una risorsa in un'applicazione o in una libreria di collegamento dinamico, impostare il flag di CC_ENABLETEMPLATE nel membro flag. Usare hInstance e lpTemplateName membri della struttura per identificare il modulo e il nome della risorsa.

      -O-

    • Se il modello personalizzato è già in memoria, impostare il flag CC_ENABLETEMPLATEHANDLE. Utilizzare il membro hInstance per identificare l'oggetto memoria che contiene il modello.

È possibile specificare una CCHookProc routine hook per la finestra di dialogo Colore. La procedura hook può elaborare i messaggi inviati alla finestra di dialogo. Può anche usare messaggi registrati per controllare il comportamento della finestra di dialogo. Se si usa un modello personalizzato per definire controlli aggiuntivi, è necessario fornire una routine hook per elaborare l'input per i controlli.

Per abilitare una routine hook per la finestra di dialogo Colore

  1. Impostare il flag CC_ENABLEHOOK nel membro flag della strutturaCHOOSECOLOR.
  2. Specificare l'indirizzo della routine hook nel membro lpfnHook.

Dopo l'elaborazione del messaggio WM_INITDIALOG, la routine della finestra di dialogo invia un messaggio WM_INITDIALOG alla routine hook. Il parametro lParam di questo messaggio è un puntatore alla strutturaCHOOSECOLOR utilizzata per inizializzare la finestra di dialogo.

La finestra di dialogo invia il messaggio COLOROKSTRING registrato alla procedura hook quando l'utente fa clic sul pulsante OK. La procedura hook può rifiutare il colore selezionato e forzare l'apertura della finestra di dialogo restituendo zero quando riceve questo messaggio. La procedura hook può forzare la selezione di un particolare colore nella finestra di dialogo inviando il SETRGBSTRING messaggio registrato alla finestra di dialogo. Per usare questi messaggi registrati, è necessario passare le costanti COLOROKSTRING e SETRGBSTRING alla funzione RegisterWindowMessage per ottenere un identificatore di messaggio. È quindi possibile usare l'identificatore per rilevare ed elaborare i messaggi inviati dalla finestra di dialogo o per inviare messaggi alla finestra di dialogo.

Modelli di colore utilizzati dalla finestra di dialogo Colore

L'estensione colori personalizzata della finestra di dialogo Colore consente all'utente di specificare un colore usando valori RGB o HSL. Tuttavia, la struttura CHOOSECOLOR utilizza solo valori RGB per segnalare i colori creati o selezionati dall'utente.

Modello di colore RGB

Il modello RGB viene usato per designare i colori per i display e altri dispositivi che generano luce. I valori validi di rosso, verde e blu sono compresi tra 0 e 255, con 0 che indicano l'intensità minima e 255 che indicano l'intensità massima. Nella figura seguente viene illustrato come combinare i colori primari rosso, verde e blu per produrre quattro colori aggiuntivi. Per i dispositivi di visualizzazione, il colore nero restituisce quando i valori rosso, verde e blu sono impostati su 0. Nella tecnologia di visualizzazione, il nero è l'assenza di tutti i colori.

cerchi rossi, verdi e blu sovrapposti

Nella tabella seguente sono elencati otto colori del modello RGB e i relativi valori RGB associati.

Colore Valori RGB
Rosso 255, 0, 0
Verde 0, 255, 0
Blu 0, 0, 255
Ciano 0, 255, 255
Magenta 255, 0, 255
Giallo 255, 255, 0
Bianco 255, 255, 255
Nero 0, 0, 0

 

Il sistema archivia i colori interni come valori RGB a 32 bit con il formato esadecimale seguente: 0x00bbggrr.

Il byte a basso ordine contiene un valore per l'intensità relativa del rosso; il secondo byte contiene un valore per verde; e il terzo byte contiene un valore per blu. Il byte di ordine elevato deve essere zero.

È possibile utilizzare la macroRGBper ottenere un valore RGB in base alle intensità specificate per i componenti rosso, verde e blu. Utilizzare le macro getRValue , GetBValuee GetGValue per estrarre i singoli colori da un valore di colore RGB.

Modello di colore HSL

Nella finestra di dialogo Colore sono disponibili controlli per specificare i valori HSL. La figura seguente mostra il controllo dello spettro dei colori e il controllo diapositiva di luminosità visualizzati nella finestra di dialogo Colore. La figura mostra anche gli intervalli di valori che l'utente può specificare con questi controlli.

scala di colori e luminosità

Nella finestra di dialogo Colore i valori di saturazione e luminosità devono essere compresi nell'intervallo compreso tra 0 e 240 e il valore della tonalità deve essere compreso nell'intervallo compreso tra 0 e 239.

Conversione di valori HSL in valori RGB

La procedura della finestra di dialogo fornita in Comdlg32.dll per la finestra di dialogo Colore contiene codice che converte i valori HSL nei valori RGB corrispondenti. La tabella seguente elenca otto colori del modello RGB e i relativi valori HSL e RGB associati.

Colore Valori HSL Valori RGB
Rosso (0, 240, 120) (255, 0, 0)
Giallo (40, 240, 120) (255, 255, 0)
Verde (80, 240, 120) (0, 255, 0)
Ciano (120, 240, 120) (0, 255, 255)
Blu (160, 240, 120) (0, 0, 255)
Magenta (200, 240, 120) (255, 0, 255)
Bianco (0, 0, 240) (255, 255, 255)
Nero (0, 0, 0) (0, 0, 0)