Рисование прозрачных элементов управления (все содержимое тоже становится прозрачным) - PullRequest
0 голосов
/ 26 января 2012

Я только что сделал элемент управления, который исчезает, используя альфа. Проблема в том, что «значок» (из SystemIcons), который я рисую, и другие элементы управления (одна кнопка atm) не становятся прозрачными. Все тексты и фоны исчезают из-за значения альфа, которое я использую в "Graphics.DrawXXX (...)".

Как я мог нарисовать эти вещи в том же альфа-значении?

Большое спасибо!

protected override void OnPaint(PaintEventArgs e)
{
    if (!Visible) return;

    Graphics g = e.Graphics;

    Color borderColor;
    Color gradientTopColor;
    Color gradientBottomColor;
    Color textColor;

    if (_displayColorStyle == IB_DisplayColorStyle.Normal)
    {
        borderColor = Color.FromArgb(fade_currentAlpha, 187, 191, 196);
        gradientTopColor = Color.FromArgb(fade_currentAlpha, 246, 249, 251);
        gradientBottomColor = Color.FromArgb(fade_currentAlpha, 233, 236, 240);
        textColor = Color.FromArgb(fade_currentAlpha, 106, 106, 106);
    }
    else if (_displayColorStyle == IB_DisplayColorStyle.Info)
    {
        borderColor = Color.FromArgb(fade_currentAlpha, 171, 186, 208);
        gradientTopColor = Color.FromArgb(fade_currentAlpha, 224, 236, 249);
        gradientBottomColor = Color.FromArgb(fade_currentAlpha, 210, 225, 240);
        textColor = Color.FromArgb(fade_currentAlpha, 106, 106, 106);
    }
    else if (_displayColorStyle == IB_DisplayColorStyle.Warning)
    {
        borderColor = Color.FromArgb(fade_currentAlpha, 106, 106, 106);
        gradientTopColor = Color.FromArgb(fade_currentAlpha, 240, 225, 53);
        gradientBottomColor = Color.FromArgb(fade_currentAlpha, 239, 194, 37);
        textColor = Color.FromArgb(fade_currentAlpha, 106, 106, 106);
    }
    else
    {
        borderColor = Color.FromArgb(fade_currentAlpha, 106, 106, 106);
        gradientTopColor = Color.FromArgb(fade_currentAlpha, 255, 0, 0);
        gradientBottomColor = Color.FromArgb(fade_currentAlpha, 217, 0, 0);
        textColor = Color.FromArgb(fade_currentAlpha, 224, 236, 249);
    }

    //Draw Background
    LinearGradientBrush backgroundBrush = new LinearGradientBrush(ClientRectangle, gradientTopColor,
                                                                    gradientBottomColor, 90f);
    g.FillRectangle(backgroundBrush, 1, 1, ClientRectangle.Width - 2, ClientRectangle.Height - 2);

    //Draw Border
    g.DrawRectangle(new Pen(new SolidBrush(borderColor), 1f), 0, 0, ClientRectangle.Width - 1,
                    ClientRectangle.Height - 1);

    //Select Icon to use
    Icon usedIcon = _displayColorStyle == IB_DisplayColorStyle.Normal
                        ? null
                        : _displayColorStyle == IB_DisplayColorStyle.Info
                                ? SystemIcons.Information
                                : _displayColorStyle == IB_DisplayColorStyle.Warning
                                    ? SystemIcons.Warning
                                    : SystemIcons.Error;

    if (usedIcon != null) //If icon is used, draw this
        g.DrawIcon(usedIcon, 5, Size.Height / 2 - (SystemIcons.Error.Height / 2));

    if (!string.IsNullOrEmpty(_title)) //If a title should be displayed
    {
        if (usedIcon == null) //No Icon, text left aligned
        {
            g.DrawString(_text, new Font("Arial", 8f, FontStyle.Regular), new SolidBrush(textColor),
                            new RectangleF(5f, 20f, (Width - _closeButton.Width - 10), Height - 12f));
            g.DrawString(_title, new Font("Arial", 10f, FontStyle.Bold), new SolidBrush(textColor),
                            new RectangleF(5f, 5f, (Width - _closeButton.Width - 10), 15f));
        }
        else
        {
            g.DrawString(_text, new Font("Arial", 8f, FontStyle.Regular), new SolidBrush(textColor),
                            new RectangleF(10f + usedIcon.Width, 20f,
                                        (Width - _closeButton.Width - 20 - usedIcon.Width), Height - 12f));
            g.DrawString(_title, new Font("Arial", 10f, FontStyle.Bold), new SolidBrush(textColor),
                            new RectangleF(10f + usedIcon.Width, 5f, (Width - _closeButton.Width - 20 - usedIcon.Width), 15f));
        }
    }
    else
    {
        if (usedIcon == null) //No Icon, text left aligned
            g.DrawString(_text, new Font("Arial", 8f, FontStyle.Regular), new SolidBrush(textColor),
                            new RectangleF(5f, 5f, (Width - _closeButton.Width - 10), Height - 2f));
        else
            g.DrawString(_text, new Font("Arial", 8f, FontStyle.Regular), new SolidBrush(textColor),
                            new RectangleF(10f + usedIcon.Width, 5f, (Width - _closeButton.Width - 20 - usedIcon.Width), Height - 2f));
    }

    base.OnPaint(e);
}
...