Mfc 使用十六进制颜色值创建SolidBrush
如何使用CreateSolidBrush方法在mfc应用程序中创建笔刷,并为颜色指定任何十六进制值Mfc 使用十六进制颜色值创建SolidBrush,mfc,gdi+,brush,Mfc,Gdi+,Brush,如何使用CreateSolidBrush方法在mfc应用程序中创建笔刷,并为颜色指定任何十六进制值 CBrush newBrush; COLORREF color = 0xFF00FFFF; newBrush.CreateSolidBrush(color); 希望这有帮助。接受类型为的参数。COLORREF是DWORD的别名,因此您可以简单地为其赋值: COLORREF color=0xFF00FF; HBRUSH hbr=::CreateSolidBrush(颜色); 确保遵守书面合同
CBrush newBrush;
COLORREF color = 0xFF00FFFF;
newBrush.CreateSolidBrush(color);
希望这有帮助。接受类型为的参数。COLORREF
是DWORD
的别名,因此您可以简单地为其赋值:
COLORREF color=0xFF00FF;
HBRUSH hbr=::CreateSolidBrush(颜色);
确保遵守书面合同:
高阶字节必须为零
一个更安全的替代方案是使用:
COLORREF color=RGB(0xFF,0x0,0xFF);
HBRUSH bhr=::CreateSolidBrush(颜色);
RGB
宏确保生成的COLORREF
值符合所需的内存布局
如果需要从
COLORREF
(或DWORD
)参数中提取各个颜色分量,可以使用、和宏:
DWORD dwCol=0xFF00FF;
字节r=GetRValue(dwCol);
字节g=GetGValue(dwCol);
字节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))));
MFC和GDI+是不同的库。您使用的是哪一个?这违反了“高阶字节必须为零”的规定。对不起,不是。如果您觉得迫切需要编写自己的预处理器宏,至少要正确执行。在这种情况下:始终将整个表达式包装在括号内。当然,重新发明轮子并没有多大帮助(见我的答案)。