Dialogrutan Färg
Visar en modal dialogruta som gör att användaren kan välja ett specifikt färgvärde. Användaren kan välja en färg från antingen en uppsättning grundläggande eller anpassade färgpaletter. Alternativt kan användaren generera ett färgvärde genom att ändra färgvärdena RGB eller hue, saturation, luminosity (HSL) i dialogrutans användargränssnitt. Dialogrutan Color returnerar RGB-värdet för den färg som användaren har valt.
Du skapar och visar en dialogruta för Color genom att initiera en CHOOSECOLOR- struktur och skicka strukturen till funktionen ChooseColor. Genom att ange olika parametervärden för CHOOSECOLOR- struktur kan du påverka hur dialogrutan Färg visas. Du kan till exempel visa antingen en fullständig eller partiell användargränssnittsversion av dialogrutan. Följande bild visar den fullständiga användargränssnittsversionen av dialogrutan Color.
dialogrutan
Om användaren klickar på knappen OK returnerar ChooseColorTRUE. rgbResult medlem i CHOOSECOLOR- struktur innehåller RGB-färgvärdet för den färg som användaren har valt. RGB-färgvärdet anger intensiteterna i de enskilda röda, gröna och blå färgerna som utgör den valda färgen. De enskilda värdena varierar från 0 till 255. Använd GetRValue, GetGValueoch GetBValue makron för att extrahera enskilda färger från ett RGB-färgvärde.
Om användaren avbryter dialogrutan Color eller om ett fel inträffar returnerar ChooseColorFALSE- och rgbResult medlem inte har definierats. För att fastställa orsaken till felet anropar du funktionen CommDlgExtendedError för att hämta det utökade felvärdet.
Följande ämnen beskrivs i det här avsnittet
- dialogrutor med fullständig och partiell färg
- Anpassa dialogrutan Färg
- färgmodeller som används av dialogrutan Färg
Dialogrutor för fullständig och partiell färg
Dialogrutan Färg har en fullständig version och en partiell version av användargränssnittet. Den fullständiga versionen innehåller de grundläggande kontrollerna och har ytterligare kontroller som gör att användaren kan skapa anpassade färger. Den partiella versionen har kontroller som visar de grundläggande och anpassade färgpaletten som användaren kan välja ett färgvärde från.
Den partiella versionen av dialogrutan Färg innehåller knappen Definiera anpassade färger. Användaren kan klicka på den här knappen för att visa den fullständiga versionen. Du kan dirigera dialogrutan Färg till att alltid visa den fullständiga versionen genom att ange flaggan CC_FULLOPEN i Flags medlem i CHOOSECOLOR- struktur. Om du vill förhindra att användaren skapar anpassade färger kan du ange flaggan CC_PREVENTFULLOPEN för att inaktivera knappen Definiera anpassade färger.
De grundläggande färgerna representerar ett urval av de färger som är tillgängliga på den angivna enheten. Det faktiska antalet färger som visas bestäms av visningsdrivrutinen. En VGA-drivrutin visar till exempel 48 färger och en monokrom visningsdrivrutin visar endast 16.
De anpassade färgerna är de som du anger eller som användaren skapar. När du skapar en färgdialogruta måste du använda lpCustColors medlem i strukturen CHOOSECOLOR för att ange de första värdena för de 16 anpassade färgerna. Om den fullständiga versionen av dialogrutan Färg är öppen kan användaren skapa en anpassad färg med en av följande metoder:
- Flytta markören i färgspektrumkontrollen och kontrollen för ljusstyrka
- Skriva RGB-värden i kontrollerna Red, Greenoch Blue edit
- Skriva HSL-värden i redigeringskontrollerna Hue, Satoch Lum
Om du vill lägga till en ny anpassad färg i visningen av anpassade färger kan användaren klicka på knappen Lägg till i anpassade färger. Detta gör också att dialogrutan kopierar RGB-värdet för den nya färgen till motsvarande element i matrisen som pekas på av lpCustColors medlem. Om du vill bevara nya anpassade färger mellan anrop till ChooseColorbör du allokera statiskt minne för matrisen. Mer information om RGB- och HSL-färgmodeller finns i Color Models Used by the Color Dialog Box.
Anpassa dialogrutan Färg
Om du vill anpassa en färgdialogruta kan du använda någon av följande metoder:
- Ange värden i CHOOSECOLOR- struktur när du skapar dialogrutan
- Ange en anpassad mall
- Ange en krokprocedur
Du kan ändra utseendet och beteendet i dialogrutan Färg genom att ange flaggor i Flags medlem i CHOOSECOLOR- struktur. Du kan till exempel ställa in flaggan CC_SOLIDCOLOR för att dirigera dialogrutan så att endast solida färger visas. Om du vill att dialogrutan initialt ska välja en annan färg än svart anger du flaggan CC_RGBINIT och anger en färg i rgbResult medlem.
Du kan ange en anpassad mall för dialogrutan Färg, till exempel om du vill inkludera ytterligare kontroller som är unika för ditt program. Funktionen ChooseColor använder din anpassade mall i stället för standardmallen.
Så här anger du en anpassad mall för dialogrutan Färg
- Skapa den anpassade mallen genom att ändra standardmallen som anges i Filen Color.dlg. De kontrollidentifierare som används i standardfärgdialogrutan definieras i filen Color.dlg.
- Använd CHOOSECOLOR--strukturen för att aktivera mallen på följande sätt:
Om din anpassade mall är en resurs i ett program- eller dynamiskt länkbibliotek anger du flaggan CC_ENABLETEMPLATE i Flags-medlemmen. Använd hInstance och lpTemplateName medlemmar i strukturen för att identifiera modulen och resursnamnet.
-Eller-
Om den anpassade mallen redan finns i minnet anger du flaggan CC_ENABLETEMPLATEHANDLE. Använd hInstance medlem för att identifiera det minnesobjekt som innehåller mallen.
Du kan ange en CCHookProc hook-procedur för dialogrutan Färg. Hook-proceduren kan bearbeta meddelanden som skickas till dialogrutan. Den kan också använda registrerade meddelanden för att styra beteendet i dialogrutan. Om du använder en anpassad mall för att definiera ytterligare kontroller måste du ange en krokprocedur för att bearbeta indata för dina kontroller.
Aktivera en hook-procedur för dialogrutan Färg
- Ange flaggan CC_ENABLEHOOK i Flags medlem i CHOOSECOLOR- struktur.
- Ange adressen för hookproceduren i lpfnHook medlem.
När du har bearbetat dess WM_INITDIALOG meddelande skickar dialogruteproceduren ett WM_INITDIALOG meddelande till krokproceduren. Parametern lParam i det här meddelandet är en pekare till CHOOSECOLOR- struktur som används för att initiera dialogrutan.
Dialogrutan skickar COLOROKSTRING- registrerat meddelande till krokproceduren när användaren klickar på knappen OK. Hook-proceduren kan avvisa den valda färgen och tvinga dialogrutan att förbli öppen genom att returnera noll när den tar emot det här meddelandet. Krokproceduren kan tvinga dialogrutan att välja en viss färg genom att skicka SETRGBSTRING- registrerat meddelande till dialogrutan. Om du vill använda dessa registrerade meddelanden måste du skicka COLOROKSTRING- och SETRGBSTRING- konstanter till funktionen RegisterWindowMessage för att hämta en meddelandeidentifierare. Du kan sedan använda identifieraren för att identifiera och bearbeta meddelanden som skickas från dialogrutan eller för att skicka meddelanden till dialogrutan.
Färgmodeller som används i dialogrutan Färg
Med tillägget för anpassade färger i dialogrutan Färg kan användaren ange en färg med RGB- eller HSL-värden. Men CHOOSECOLOR- struktur använder endast RGB-värden för att rapportera de färger som skapats eller valts av användaren.
RGB-färgmodell
RGB-modellen används för att ange färger för skärmar och andra enheter som avger ljus. Giltiga röda, gröna och blå värden varierar från 0 till 255, med 0 som anger minsta intensitet och 255 som anger maximal intensitet. Följande bild visar hur de primära färgerna röd, grön och blå kan kombineras för att skapa ytterligare fyra färger. (För visningsenheter resulterar färgen svart när de röda, gröna och blå värdena är inställda på 0. I visningstekniken är svart frånvaron av alla färger.)
I följande tabell visas åtta färger i RGB-modellen och deras associerade RGB-värden.
Färg | RGB-värden |
---|---|
Röd | 255, 0, 0 |
Grön | 0, 255, 0 |
Blå | 0, 0, 255 |
Cyan | 0, 255, 255 |
Magenta | 255, 0, 255 |
Gul | 255, 255, 0 |
Vit | 255, 255, 255 |
Svart | 0, 0, 0 |
Systemet lagrar interna färger som 32-bitars RGB-värden som har följande hexadecimala form: 0x00bbggrr.
Byte med låg ordning innehåller ett värde för den relativa intensiteten för rött. den andra byte innehåller ett värde för grönt. och den tredje byte innehåller ett värde för blått. Byte med hög ordning måste vara noll.
Du kan använda RGB- makro för att hämta ett RGB-värde baserat på angivna intensiteter för de röda, gröna och blå komponenterna. Använd GetRValue, GetBValueoch GetGValue makron för att extrahera enskilda färger från ett RGB-färgvärde.
HSL-färgmodell
Dialogrutan Färg innehåller kontroller för att ange HSL-värden. Följande bild visar färgspektrumkontrollen och kontrollen för ljusstyrka som visas i dialogrutan Färg. Bilden visar också de intervall med värden som användaren kan ange med dessa kontroller.
I dialogrutan Färg måste värdena för mättnad och ljusstyrka ligga i intervallet 0 till 240 och hue-värdet måste ligga i intervallet 0 till 239.
Konvertera HSL-värden till RGB-värden
Den dialogruteprocedur som anges i Comdlg32.dll för dialogrutan Färg innehåller kod som konverterar HSL-värden till motsvarande RGB-värden. I följande tabell visas åtta färger i RGB-modellen och tillhörande HSL- och RGB-värden.
Färg | HSL-värden | RGB-värden |
---|---|---|
Röd | (0, 240, 120) | (255, 0, 0) |
Gul | (40, 240, 120) | (255, 255, 0) |
Grön | (80, 240, 120) | (0, 255, 0) |
Cyan | (120, 240, 120) | (0, 255, 255) |
Blå | (160, 240, 120) | (0, 0, 255) |
Magenta | (200, 240, 120) | (255, 0, 255) |
Vit | (0, 0, 240) | (255, 255, 255) |
Svart | (0, 0, 0) | (0, 0, 0) |