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))));