WinForms 渐变(图像或代码)- OnDraw 事件

发布于 2024-09-10 16:03:54 字数 1987 浏览 3 评论 0原文

好吧,我开始专注于我的设计并找到正确的风格。

我的主题使用 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 文本 http://screensnapr.com/u/yeq8o0.png< /a>

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

希望你们能帮助我:)

Ok so im starting to get stuck into my design and get the style right.

My Theme is using a kryptonForm style GUI but kyryptonForms do not not have a pre designed ListView, so im having to build this myself

My Application is a messenger system based on XMPP/Jabber so you can guess how i would like my contact list to be designed.

i have done most of the positioning but im struggling on styling each contact row.

Im aiming for some transparent overlay simmerler to the MSN Live messenger Contact List

Heres my OnDraw Event code atm and im struggling to figure out the best way to do the gradient

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);
        }
    }

And the ContactListBackgroundBrush var is like so

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

its this that i need to convert to the styled element

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

Im Looking to get this Highlighted style without importing any specific windows 7 DLL files as the App is used for windows XP as well.

Hope you guys can help me :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原来是傀儡 2024-09-17 16:03:54

您可以将画笔定义为LinearGradientBrush,查找msnd 文档。恕我直言,这是绘制渐变的最佳方法。

You can define a brush as a LinearGradientBrush, look for the msnd documentation. This is IMHO the best way, to draw gradiants..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文