Partager via


Boîte de dialogue Couleur

Affiche une boîte de dialogue modale qui permet à l’utilisateur de choisir une valeur de couleur spécifique. L’utilisateur peut choisir une couleur dans un ensemble de palettes de couleurs de base ou personnalisées. L’utilisateur peut également générer une valeur de couleur en modifiant les valeurs de couleur RVB ou hue, saturation, luminosité (HSL) de l’interface utilisateur de la boîte de dialogue. La boîte de dialogue couleur retourne la valeur RVB de la couleur sélectionnée par l’utilisateur.

Vous créez et affichez une boîte de dialogue Color en initialisant une structure CHOOSECOLOR et en passant la structure à la fonction ChooseColor. En définissant différentes valeurs de paramètre pour la structure CHOOSECOLOR, vous pouvez affecter la façon dont la boîte de dialogue Couleur s’affiche. Par exemple, vous pouvez afficher une version complète ou partielle de l’interface utilisateur de la boîte de dialogue. L’illustration suivante montre la version complète de l’interface utilisateur de la boîte de dialogue Couleur.

boîte de dialogue couleur

Si l’utilisateur clique sur le bouton OK, ChooseColor retourne TRUE. Le rgbResult membre de la structureCHOOSECOLORcontient la valeur de couleur RVB de la couleur sélectionnée par l’utilisateur. La valeur de couleur RVB spécifie les intensités des couleurs rouges, vertes et bleues individuelles qui composent la couleur sélectionnée. Les valeurs individuelles sont comprises entre 0 et 255. Utilisez leGetRValue, GetGValueet macros GetBValue pour extraire des couleurs individuelles d’une valeur de couleur RVB.

Si l’utilisateur annule la boîte de dialogue couleur de ou si une erreur se produit, ChooseColor retourne FAUX et le membre rgbResult n’est pas défini. Pour déterminer la cause de l’erreur, appelez la fonction CommDlgExtendedError pour récupérer la valeur d’erreur étendue.

Les sujets suivants sont abordés dans cette section

Boîtes de dialogue Couleur complète et partielle

La boîte de dialogue Couleur comporte une version complète et une version partielle de l’interface utilisateur. La version complète inclut les contrôles de base et possède des contrôles supplémentaires qui permettent à l’utilisateur de créer des couleurs personnalisées. La version partielle possède des contrôles qui affichent les palettes de couleurs de base et personnalisées à partir desquelles l’utilisateur peut sélectionner une valeur de couleur.

La version partielle de la boîte de dialogue Couleur inclut un bouton Définir des couleurs personnalisées. L’utilisateur peut cliquer sur ce bouton pour afficher la version complète. Vous pouvez diriger la boîte de dialogue Couleur pour toujours afficher la version complète en définissant l’indicateur CC_FULLOPEN dans les indicateurs membre de la structureCHOOSECOLOR. Pour empêcher l’utilisateur de créer des couleurs personnalisées, vous pouvez définir l’indicateur CC_PREVENTFULLOPEN pour désactiver le bouton Définir des couleurs personnalisées.

Les couleurs de base représentent une sélection des couleurs disponibles sur l’appareil spécifié. Le nombre réel de couleurs affichées est déterminé par le pilote d’affichage. Par exemple, un pilote VGA affiche 48 couleurs et un pilote d’affichage monochrome affiche uniquement 16.

Les couleurs personnalisées sont celles que vous spécifiez ou que l’utilisateur crée. Lorsque vous créez une boîte de dialogue Couleur, vous devez utiliser le membre lpCustColors de la structure CHOOSECOLOR pour spécifier les valeurs initiales des 16 couleurs personnalisées. Si la version complète de la boîte de dialogue Couleur est ouverte, l’utilisateur peut créer une couleur personnalisée selon les méthodes suivantes :

  • Déplacement du curseur dans le contrôle du spectre des couleurs et du contrôle de diapositive de luminosité
  • Saisie de valeurs RVB dans le rouge, vert et contrôles de modification de bleu
  • Saisie de valeurs HSL dans le Hue, satet contrôles d’édition Lum

Pour ajouter une nouvelle couleur personnalisée à l’affichage des couleurs personnalisées, l’utilisateur peut cliquer sur le bouton Ajouter aux couleurs personnalisées bouton. Cela entraîne également la copie de la valeur RVB de la nouvelle couleur dans l’élément correspondant du tableau pointé par le membre lpCustColors. Pour conserver de nouvelles couleurs personnalisées entre les appels à ChooseColor, vous devez allouer de la mémoire statique pour le tableau. Pour plus d’informations sur les modèles de couleurs RVB et HSL, consultez Modèles de couleurs utilisés par la boîte de dialogue Couleur.

Personnalisation de la boîte de dialogue Couleur

Pour personnaliser une boîte de dialogue Couleur, vous pouvez utiliser l’une des méthodes suivantes :

  • Spécifier des valeurs dans la structure CHOOSECOLOR lorsque vous créez la boîte de dialogue
  • Fournir un modèle personnalisé
  • Fournir une procédure de raccordement

Vous pouvez modifier l’apparence et le comportement de la boîte de dialogue Couleur en définissant des indicateurs dans les indicateurs membre de la structure CHOOSECOLOR. Par exemple, vous pouvez définir l’indicateur de CC_SOLIDCOLOR pour diriger la boîte de dialogue pour afficher uniquement les couleurs unie. Pour que la boîte de dialogue sélectionne initialement une couleur autre que le noir, définissez l’indicateur CC_RGBINIT et spécifiez une couleur dans le membre rgbResult.

Vous pouvez fournir un modèle personnalisé pour la boîte de dialogue Couleur, par exemple, si vous souhaitez inclure des contrôles supplémentaires uniques à votre application. La fonction ChooseColor utilise votre modèle personnalisé à la place du modèle par défaut.

Pour fournir un modèle personnalisé pour la boîte de dialogue Couleur

  1. Créez le modèle personnalisé en modifiant le modèle par défaut spécifié dans le fichier Color.dlg. Les identificateurs de contrôle utilisés dans le modèle de boîte de dialogue Couleur par défaut sont définis dans le fichier Color.dlg.
  2. Utilisez la structureCHOOSECOLORpour activer le modèle comme suit :
    • Si votre modèle personnalisé est une ressource dans une application ou une bibliothèque de liens dynamiques, définissez l’indicateur CC_ENABLETEMPLATE dans les indicateurs de membre. Utilisez le hInstance et lpTemplateName membres de la structure pour identifier le nom du module et de la ressource.

      -Ou-

    • Si votre modèle personnalisé est déjà en mémoire, définissez l’indicateur de CC_ENABLETEMPLATEHANDLE. Utilisez le membre hInstance pour identifier l’objet mémoire qui contient le modèle.

Vous pouvez fournir une procédure de raccordement CCHookProc pour la boîte de dialogue Couleur. La procédure de raccordement peut traiter les messages envoyés à la boîte de dialogue. Il peut également utiliser des messages inscrits pour contrôler le comportement de la boîte de dialogue. Si vous utilisez un modèle personnalisé pour définir des contrôles supplémentaires, vous devez fournir une procédure de hook pour traiter les entrées de vos contrôles.

Pour activer une procédure de raccordement pour la boîte de dialogue Couleur

  1. Définissez l’indicateur CC_ENABLEHOOK dans les indicateurs membre de la structureCHOOSECOLOR.
  2. Spécifiez l’adresse de la procédure de hook dans le membre lpfnHook.

Après avoir traité son message WM_INITDIALOG, la procédure de boîte de dialogue envoie un message WM_INITDIALOG à la procédure de raccordement. Le paramètre lParam de ce message est un pointeur vers la structureCHOOSECOLORutilisée pour initialiser la boîte de dialogue.

La boîte de dialogue envoie le message COLOROKSTRING inscrit à la procédure de raccordement lorsque l’utilisateur clique sur le bouton OK. La procédure de raccordement peut rejeter la couleur sélectionnée et forcer l’ouverture de la boîte de dialogue en retournant zéro lorsqu’elle reçoit ce message. La procédure de raccordement peut forcer la boîte de dialogue à sélectionner une couleur particulière en envoyant le SETRGBSTRING message inscrit à la boîte de dialogue. Pour utiliser ces messages inscrits, vous devez transmettre les constantes COLOROKSTRING et SETRGBSTRING à la fonction RegisterWindowMessage pour obtenir un identificateur de message. Vous pouvez ensuite utiliser l’identificateur pour détecter et traiter les messages envoyés à partir de la boîte de dialogue ou pour envoyer des messages à la boîte de dialogue.

Modèles de couleurs utilisés par la boîte de dialogue Couleur

L’extension de couleurs personnalisées de la boîte de dialogue Couleur permet à l’utilisateur de spécifier une couleur à l’aide de valeurs RVB ou HSL. Toutefois, la structureCHOOSECOLORutilise uniquement des valeurs RVB pour signaler les couleurs créées ou sélectionnées par l’utilisateur.

Modèle de couleur RVB

Le modèle RVB est utilisé pour désigner des couleurs pour les affichages et d’autres appareils qui émettent de la lumière. Les valeurs rouges, vertes et bleues valides sont comprises entre 0 et 255, avec 0 indiquant une intensité minimale et 255 indiquant une intensité maximale. L’illustration suivante montre comment les couleurs primaires rouges, vertes et bleues peuvent être combinées pour produire quatre couleurs supplémentaires. (Pour les appareils d’affichage, les résultats noirs de couleur lorsque les valeurs rouge, verte et bleue sont définies sur 0. Dans la technologie d’affichage, le noir est l’absence de toutes les couleurs.)

cercles rouges, verts et bleus

Le tableau suivant répertorie huit couleurs du modèle RVB et leurs valeurs RVB associées.

Couleur Valeurs RVB
Rouge 255, 0, 0
Vert 0, 255, 0
Bleu 0, 0, 255
Cyan 0, 255, 255
Magenta 255, 0, 255
Jaune 255, 255, 0
Blanc 255, 255, 255
Noir 0, 0, 0

 

Le système stocke les couleurs internes sous forme de valeurs RVB 32 bits qui ont la forme hexadécimale suivante : 0x00bbggrr.

L’octet de faible ordre contient une valeur pour l’intensité relative du rouge ; le deuxième octet contient une valeur pour le vert ; et le troisième octet contient une valeur pour le bleu. L’octet de haut ordre doit être égal à zéro.

Vous pouvez utiliser la macro RVB pour obtenir une valeur RVB en fonction des intensités spécifiées pour les composants rouges, verts et bleus. Utilisez leGetRValue, GetBValueet macros GetGValue pour extraire des couleurs individuelles d’une valeur de couleur RVB.

Modèle de couleur HSL

La boîte de dialogue Couleur fournit des contrôles pour spécifier des valeurs HSL. L’illustration suivante montre le contrôle de spectre des couleurs et le contrôle de diapositive de luminosité qui apparaissent dans la boîte de dialogue Couleur. L’illustration montre également les plages de valeurs que l’utilisateur peut spécifier avec ces contrôles.

échelle de couleur et d’échelle de luminosité

Dans la boîte de dialogue Couleur, les valeurs de saturation et de luminosité doivent être comprises entre 0 et 240, et la valeur de teinte doit être comprise entre 0 et 239.

Conversion de valeurs HSL en valeurs RVB

La procédure de boîte de dialogue fournie dans Comdlg32.dll de la boîte de dialogue Couleur contient du code qui convertit les valeurs HSL en valeurs RVB correspondantes. Le tableau suivant répertorie huit couleurs du modèle RVB et leurs valeurs HSL et RVB associées.

Couleur Valeurs HSL Valeurs RVB
Rouge (0, 240, 120) (255, 0, 0)
Jaune (40, 240, 120) (255, 255, 0)
Vert (80, 240, 120) (0, 255, 0)
Cyan (120, 240, 120) (0, 255, 255)
Bleu (160, 240, 120) (0, 0, 255)
Magenta (200, 240, 120) (255, 0, 255)
Blanc (0, 0, 240) (255, 255, 255)
Noir (0, 0, 0) (0, 0, 0)