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 di 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.

È possibile creare e visualizzare una finestra di dialogo Color inizializzando una struttura CHOOSECOLOR e passando la struttura alla funzione ChooseColor . Impostando valori di parametro diversi per la struttura CHOOSECOLOR , è possibile influire sul modo in cui viene visualizzata la 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 struttura CHOOSECOLOR contiene il valore del colore RGB selezionato dall'utente. Il valore di 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. Usare le macro GetRValue, GetGValue e GetBValue per estrarre 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 funzione CommDlgExtendedError per recuperare il valore di errore esteso.

Gli argomenti seguenti sono illustrati 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 CC_FULLOPEN nel membro Flag della struttura CHOOSECOLOR . Per impedire all'utente di creare colori personalizzati, è possibile impostare il flag di 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 visualizzati è 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 Color, è necessario usare il membro lpCustColors della struttura CHOOSECOLOR per specificare i valori iniziali per i colori personalizzati 16. Se la versione completa della finestra di dialogo Colore è aperta, l'utente può creare un colore personalizzato in base a uno dei metodi seguenti:

  • Spostamento del cursore nel controllo dello spettro dei colori e del controllo diapositiva di luminosità
  • Digitando valori RGB nei controlli Modifica rosso, verde e blu
  • Digitando valori HSL nei controlli Hue, Sat e Lum edit

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 il valore RGB del nuovo colore nell'elemento corrispondente della 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 colore RGB e HSL, vedere Modelli di colore usati dalla finestra di dialogo Colore.

Personalizzazione della finestra di dialogo Colore

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

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

È possibile modificare l'aspetto e il comportamento della finestra di dialogo Colore impostando i flag nel membro Flag 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 consentire alla finestra di dialogo di selezionare inizialmente un colore diverso da nero, impostare il flag CC_RGBINIT e specificare un colore nel membro rgbResult .

È possibile specificare 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 specificare 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 usati nel modello di finestra di dialogo Colore predefinito sono definiti nel file Color.dlg.
  2. Usare la struttura CHOOSECOLOR per abilitare il modello come indicato di seguito:
    • Se il modello personalizzato è una risorsa in un'applicazione o in una libreria di collegamenti dinamici, impostare il flag CC_ENABLETEMPLATE nel membro Flags . Usare i membri hInstance e lpTemplateName della struttura per identificare il modulo e il nome della risorsa.

      Oppure

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

È possibile fornire una procedura di hook CCHookProc per la finestra di dialogo Colore. La procedura di 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 procedura di hook per elaborare l'input per i controlli.

Per abilitare una procedura di hook per la finestra di dialogo Colore

  1. Impostare il flag di CC_ENABLEHOOK nel membro Flag della struttura CHOOSECOLOR .
  2. Specificare l'indirizzo della routine hook nel membro lpfnHook .

Dopo l'elaborazione del messaggio WM_INITDIALOG , la procedura della finestra di dialogo invia un messaggio WM_INITDIALOG alla procedura di hook. Il parametro lParam di questo messaggio è un puntatore alla struttura CHOOSECOLOR usata per inizializzare la finestra di dialogo.

La finestra di dialogo invia il messaggio registrato COLOROKSTRING alla procedura di hook quando l'utente fa clic sul pulsante OK . La procedura di hook può rifiutare il colore selezionato e forzare l'apertura della finestra di dialogo resti aperta restituendo zero quando riceve questo messaggio. La procedura di hook può forzare la finestra di dialogo per selezionare un colore specifico inviando il messaggio registrato SETRGBSTRING 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 e elaborare i messaggi inviati dalla finestra di dialogo o per inviare messaggi alla finestra di dialogo.

Modelli di colore usati dalla finestra di dialogo Colore

L'estensione colori personalizzati della finestra di dialogo Colore consente all'utente di specificare un colore utilizzando valori RGB o HSL. Tuttavia, la struttura CHOOSECOLOR usa 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 emettono luce. I valori validi di rosso, verde e blu sono compresi tra 0 e 255, con 0 che indica l'intensità minima e 255 che indica l'intensità massima. La figura seguente mostra 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.

Color Valori RGB
Red 255, 0, 0
Green 0, 255, 0
Blu 0, 0, 255
azzurro 0, 255, 255
Fucsia 255, 0, 255
Giallo 255, 255, 0
White 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 il verde; e il terzo byte contiene un valore per blu. Il byte di ordine elevato deve essere zero.

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

Modello di colore HSL

La finestra di dialogo Colore fornisce i 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 dello spettro dei colori e della 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. Nella tabella seguente sono elencati otto colori del modello RGB e i relativi valori HSL e RGB associati.

Color HSL (valori) Valori RGB
Red (0, 240, 120) (255, 0, 0)
Giallo (40, 240, 120) (255, 255, 0)
Green (80, 240, 120) (0, 255, 0)
azzurro (120, 240, 120) (0, 255, 255)
Blu (160, 240, 120) (0, 0, 255)
Fucsia (200, 240, 120) (255, 0, 255)
White (0, 0, 240) (255, 255, 255)
Nero (0, 0, 0) (0, 0, 0)