Как создать кисть в приложении mfc с помощью метода CreateSolidBrush с учетом любого шестнадцатеричного значения для цвета.CreateSolidBrush с использованием шестнадцатеричных значений цвета
ответ
CBrush newBrush;
COLORREF color = 0xFF00FFFF;
newBrush.CreateSolidBrush(color);
Надеюсь, это поможет.
Это нарушает [документацию] (https://msdn.microsoft.com/en-us/library/dd183449.aspx): * «Байт высокого порядка должен быть равен нулю». * – IInspectable
CreateSolidBrush принимает аргумент типа COLORREF. COLORREF
является псевдонимом для DWORD
, так что вы могли просто присвоить ему значение:
COLORREF color = 0xFF00FF;
HBRUSH hbr = ::CreateSolidBrush(color);
Убедитесь придерживаться документированной договора:
высокого порядка байтов должен быть равен нулю.
Более безопасный альтернативы можно было бы использовать вместо RGB macro:
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
(как показано в первом абзаце).
Я нашел решение.
#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))));
Извините, нет. Если вы чувствуете настоятельную необходимость писать свои собственные макросы препроцессора, по крайней мере, делайте это правильно. В этом случае: ** Всегда ** завершать все выражение в круглых скобках. Конечно, повторное изобретательство колеса не очень полезно в любом случае (см. Мой ответ). – IInspectable
MFC и GDI + различные библиотеки. Какой из них вы используете? – IInspectable