Градиентная кисть в родном C ++? - PullRequest
2 голосов
/ 13 сентября 2009

В c # вы можете использовать drawing2d.lineargradientbrush, но в c ++ сейчас я нашел только функцию CreateSolidBrush. Есть ли в нативном gdi dll функция для создания градиентной кисти? Я не мог найти ничего подобного в MSDN. Спасибо

Ответы [ 3 ]

4 голосов
/ 14 сентября 2009

Чтобы нарисовать вертикальный градиент:

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);
}
2 голосов
/ 13 сентября 2009

C # использует GDI + для Drawing2d. Вы также можете использовать GDI + в C ++ - MSDN Создание линейного градиента

2 голосов
/ 13 сентября 2009

Вы должны использовать комбинацию Win32 API GradientFill , CreateCompatibleBitmap и CreatePatternBrush

...