Duilib设置bkcolor颜色

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

发布了259 篇原创文章 · 获赞 67 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/linjingtu/article/details/88820787