WinForms Gradient(图像或按代码) - OnDraw事件

时间:2010-07-19 19:37:17

标签: c# winforms coding-style ondraw

好的,所以我开始陷入我的设计并且风格正确。

我的主题是使用kryptonForm样式的GUI,但kyryptonForms没有预先设计的ListView,所以我必须自己构建

我的应用程序是基于XMPP / Jabber的信使系统,因此您可以猜测我希望如何设计联系人列表。

我完成了大部分定位,但我正在努力设计每个联系人行。

我的目标是为MSN Live messenger联系人列表提供一些透明的叠加模拟器

继承我的OnDraw事件代码atm并且我正在努力找出做渐变的最佳方法

private void ContactItem_OnPaintDraw(object sender, DrawListViewItemEventArgs e)
    {

        Rectangle ImageRect = e.Bounds;
        ImageRect.Inflate(-2, -2);
        ImageRect.Width = 32;

        Rectangle TextRect = e.Bounds;
        TextRect.X = ImageRect.Right + 2;
        TextRect.Width = e.Bounds.Width - TextRect.X;

        Rectangle IconRect = TextRect;
        IconRect.Inflate(-1, 0);
        IconRect.Y = ImageRect.Bottom - 16;
        IconRect.Width = 16;
        IconRect.Height = 16;

        if ((e.State & ListViewItemStates.Selected) != 0)
        {
            // Draw the background and focus rectangle for a selected item.
            e.Graphics.FillRectangle(ContactListBackgroundBrush, e.Bounds);
            e.DrawFocusRectangle();
        }
        else
        {
            // Draw the background for an unselected item.
            e.Graphics.FillRectangle(Brushes.White, e.Bounds);
        }

        if (ListViewContacts.View != View.Details)
        {

            e.Graphics.DrawImage((Image)Resources.UserIconDefault, ImageRect);

            TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, TextRect, e.Item.ForeColor, TextFormatFlags.GlyphOverhangPadding);
        }
    }

ContactListBackgroundBrush var就像这样

private Brush ContactListBackgroundBrush = new SolidBrush(Color.FromArgb(33, 162, 191));

这是我需要转换为样式元素

alt text http://screensnapr.com/u/yeq8o0.png

我希望获得这种突出显示的样式,而不导入任何特定的Windows 7 DLL文件,因为该应用程序也用于Windows XP。

希望你们能帮助我:)。

1 个答案:

答案 0 :(得分:1)

您可以将画笔定义为LinearGradientBrush,查找msnd documentation。这是恕我直言,最好的方式,绘制渐变..