Search code examples
c++winapinative

Gradient Brush in Native C++?


In c#, you can use drawing2d.lineargradientbrush, but in c++ right now I only found the CreateSolidBrush function. Is there a function in the native gdi dll to create a gradient brush? I couldn't find anything like this at msdn. Thanks


Solution

  • To draw a vertical gradient:

    void VerticalGradient(HDC hDC, const RECT& GradientFill, 
                          COLORREF rgbTop, COLORREF rgbBottom)
    {
        GRADIENT_RECT gradientRect = { 0, 1 };
        TRIVERTEX triVertext[ 2 ] = {
            GradientFill.left - 1,
            GradientFill.top - 1,
            GetRValue(rgbTop) << 8,
            GetGValue(rgbTop) << 8,
            GetBValue(rgbTop) << 8,
            0x0000,         
            GradientFill.right,
            GradientFill.bottom,
            GetRValue(rgbBottom) << 8,
            GetGValue(rgbBottom) << 8,
            GetBValue(rgbBottom) << 8,
            0x0000
        };
        GradientFill(hDC, triVertext, 2, &gradientRect, 1, GRADIENT_FILL_RECT_V);
    }