1.Duilib设置颜色是是ARGB不是RGBA,没弄对得到的不是想要的效果
bkcolor的参数设置一般是四个字节,其中第一个字节正常情况下大部分是默认设置为0xFF
2.Duiliib设置颜色的通道代码
void CRenderEngine::DrawColor(HDC hDC, const RECT& rc, DWORD color)
{
if( color <= 0x00FFFFFF ) return;
if( color >= 0xFF000000 )
{
::SetBkColor(hDC, RGB(GetBValue(color), GetGValue(color), GetRValue(color)));
::ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL);
}
else
{
// Create a new 32bpp bitmap with room for an alpha channel
BITMAPINFO bmi = { 0 };
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 1;
bmi.bmiHeader.biHeight = 1;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 1 * 1 * sizeof(DWORD);
LPDWORD pDest = NULL;
HBITMAP hBitmap = ::CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, (LPVOID*) &pDest, NULL, 0);
if( !hBitmap ) return;
*pDest = color | 0xff000000;
RECT rcBmpPart = {0, 0, 1, 1};
RECT rcCorners = {0};
DrawImage(hDC, hBitmap, rc, rc, rcBmpPart, rcCorners, true, (BYTE)(color >> 24));
::DeleteObject(hBitmap);
}
}
原代码中色值的第一个字节一直都是0xFF并没有设置背景颜色,所以如果想要透明度要加上背景颜色
3.效果图实例
上面那部分的色值为#FFF75E5E,下面那部分的色值为#33F76161
哈哈哈哈,有想交流的来深圳程序交流群550846167