我是一名有用的助手,可以为您翻译文本。
我正在制作一个程序,需要绘制与标题栏相同颜色的矩形。
如果我尝试像这样获取颜色:
ARGB rgbActiveColor = GetSysColor(COLOR_ACTIVECAPTION);
ARGB rgbInactiveColor = GetSysColor(COLOR_INACTIVECAPTION);
rgbActiveColor |= 0xFF000000; // Because of alpha
rgbInactiveColor |= 0xFF000000;
我在Windows 8中看到的颜色与实际颜色完全不同。它总是返回橙色或棕色,而不是实际颜色(比如蓝色)。
使用DwmGetColorizationColor
可以解决问题,但是由于需要消除alpha通道,所以颜色会变暗。我尝试这样做:
BYTE r = ((RED * ALPHA) + (255 * (255 - ALPHA))) / 255; // R' = (R * A) + (1 - A)
BYTE g = ((GREEN * ALPHA) + (255 * (255 - ALPHA))) / 255; // G' = (G * A) + (1 - A)
BYTE b = ((BLUE * ALPHA) + (255 * (255 - ALPHA))) / 255; // B' = (B * A) + (1 - A)
所以,我的问题是:
- 我不知道如何正确地将ARGB颜色转换为RGB颜色
- 我不知道如何获取非活动标题栏的颜色
编辑:我的ARGB转RGB代码似乎有效,除非我在控制面板中将颜色强度设置到最大(因为某种原因alpha为0,颜色变成绿色)或最小。
编辑2:这不是重复问题,因为这主要是关于W8+的。
COLORREF rgb = RGB((BYTE)rgbActiveColor >> 16, (BYTE)rgbActiveColor >> 8, (BYTE)rgbActiveColor);
- CyclonecodeGetSysColor()
只返回RGB
而不是RGBA
,对吗? - Cyclonecode0xe37ebdf4
,但最大亮度为0x008fd712
。文档还指出:“该值的颜色格式为0xAARRGGBB”。 - LHLauriniDwmGetColorizationColor
不能正常工作,GetThemeSysColor
返回与GetSysColor
相同的值,GetThemeColor(hTheme, WP_CAPTION, CS_ACTIVE, TMT_ACTIVECAPTION, &rgbBorderColor)
返回错误... - LHLaurini