CreateSolidBrush, используя шестнадцатеричные значения цвета

Как мне создать кисть в приложении MFC, используя метод CreateSolidBrush с учетом любого шестнадцатеричного значения для цвета.

3 ответа

CreateSolidBrush принимает аргумент типа COLORREF. COLORREF это псевдоним для DWORD так что вы можете просто присвоить ему значение:

COLORREF color = 0xFF00FF;
HBRUSH hbr = ::CreateSolidBrush( color );

Обязательно придерживайтесь документированного договора:

Старший байт должен быть нулевым.

Более безопасная альтернатива - использовать макрос RGB:

COLORREF color = RGB( 0xFF, 0x0, 0xFF );
HBRUSH bhr = ::CreateSolidBrush( color );

RGB макрос гарантирует, что полученный COLORREF значение соответствует требуемому расположению памяти.


Если вам нужно извлечь отдельные цветовые компоненты из COLORREF (или же DWORD), вы можете использовать макросы GetRValue, GetGValue и GetBValue:

DWORD dwCol = 0xFF00FF;
BYTE r = GetRValue( dwCol );
BYTE g = GetGValue( dwCol );
BYTE b = GetBValue( dwCol );

Хотя это работает, он вводит специфический для архитектуры код. В этот момент вы можете просто использовать начальный DWORD вместо COLORREF (как показано в моем первом абзаце).

CBrush newBrush;
COLORREF color = 0xFF00FFFF;  
newBrush.CreateSolidBrush(color);

Надеюсь это поможет.

Я нашел решение.

#define GET_RVAL(num) (num & 0xff0000) >> 16
#define GET_GVAL(num) (num & 0x00ff00) >> 8
#define GET_BVAL(num) (num & 0x0000ff)

создать кисть, используя

hBrush = CreateSolidBrush(COLORREF(RGB(GET_RVAL(0xbfbfbf), GET_GVAL(0xbfbfbf), GET_BVAL(0xebfbfbf))));
Другие вопросы по тегам