Comment créer un pinceau dans une application mfc en utilisant la méthode CreateSolidBrush avec une valeur hexadécimale donnée pour la couleur.CreateSolidBrush utilisant des valeurs hexadécimales de couleur
Répondre
CBrush newBrush;
COLORREF color = 0xFF00FFFF;
newBrush.CreateSolidBrush(color);
Espérons que cela aide.
Cela enfreint la [documentation] (https://msdn.microsoft.com/en-us/library/dd183449.aspx): * "L'octet de poids fort doit être égal à zéro." * – IInspectable
CreateSolidBrush prend un argument de type COLORREF. Un COLORREF
est un alias pour un DWORD
, de sorte que vous pouvez attribuer simplement une valeur à elle:
COLORREF color = 0xFF00FF;
HBRUSH hbr = ::CreateSolidBrush(color);
Assurez-vous d'adhérer au contrat documenté:
L'octet de poids fort doit être zéro.
Une alternative plus sûre serait d'utiliser la place RGB macro:
COLORREF color = RGB(0xFF, 0x0, 0xFF);
HBRUSH bhr = ::CreateSolidBrush(color);
Les RGB
macro assure, que la valeur COLORREF
résultante est conforme à la mise en page de mémoire requise.
Si vous avez besoin d'extraire les composants de couleur individuels à partir d'un argument
COLORREF
(ou
DWORD
), vous pouvez utiliser les
GetRValue,
GetGValue et
GetBValue macros:
DWORD dwCol = 0xFF00FF;
BYTE r = GetRValue(dwCol);
BYTE g = GetGValue(dwCol);
BYTE b = GetBValue(dwCol);
Bien que cela fonctionne, il introduit code spécifique à l'architecture. À ce stade, vous pouvez simplement utiliser le DWORD
initial à la place d'un COLORREF
(comme illustré dans mon premier paragraphe).
J'ai trouvé la solution.
#define GET_RVAL(num) (num & 0xff0000) >> 16
#define GET_GVAL(num) (num & 0x00ff00) >> 8
#define GET_BVAL(num) (num & 0x0000ff)
créer pinceau en utilisant
hBrush = CreateSolidBrush(COLORREF(RGB(GET_RVAL(0xbfbfbf), GET_GVAL(0xbfbfbf), GET_BVAL(0xebfbfbf))));
Désolé, non. Si vous ressentez le besoin impérieux d'écrire vos propres macros de préprocesseur, faites-le au moins correctement. Dans ce cas: ** Toujours ** envelopper l'expression entière entre parenthèses. Bien sûr, réinventer la roue n'est pas très utile de toute façon (voir ma réponse). – IInspectable
MFC et GDI + sont différentes bibliothèques. Lequel utilisez-vous? – IInspectable