如何更快,更高效地绘制“用户控制UI”

时间:2010-07-19 12:36:41

标签: .net user-interface controls

实际上我做了一个用户控件,它的界面就像windows vista和7中的“glass windows”。 我的模式是这个网址:extremestudio.ro/blog/?p=99

使用“Photoshop”并使用C#和.Net绘图类绘制每一层,我最终绘制它。 在第一步中,我创建一个位图类,然后使用图形路径和画笔等在其上绘制每个图层。

这是控件:glass panel (您必须先将“reflect.png”文件添加到项目资源中,然后将类添加到项目然后构建,...) 此控件继承自表单命名空间中的Panel


protected override void OnCreateControl()
    {
        draw();
        BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
        Parent.Move += new EventHandler(Parent_Move);
        base.OnCreateControl();
    }

    void Parent_Move(object sender, EventArgs e)
    {
        draw();
    }
public void draw()
    {

        if (Width < 20 || Height < 20)
        {
            return;
        }
        Bitmap b = new Bitmap(Width, Height);
        Graphics gr = Graphics.FromImage(b);
        GraphicsPath gp=new GraphicsPath();
        LinearGradientBrush br;
        gr.SmoothingMode = SmoothingMode.HighSpeed;

        //draw shadow(black glow)
        for (int i = 0; i < 10; i++)
        {
            gp = DrawRoundRect(i, i, Width - i * 2 - 1, Height - i * 2 - 1, 7);
            br = new LinearGradientBrush(Bounds, Color.FromArgb(i * 3, Color.Black), Color.FromArgb(i * 3, Color.Black), LinearGradientMode.Vertical);
            gr.DrawPath(new Pen(br, 4), gp);
            br.Dispose();
        }

        //fill white 50
        gp = DrawRoundRect(9, 9, Width - 19, Height - 19, 7);
        br = new LinearGradientBrush(Bounds, Color.FromArgb(30, Color.White), Color.FromArgb(30, Color.White), LinearGradientMode.Vertical);
        gr.FillPath(br, gp);

它是绘图代码的一部分。 我最终将创建的位图设置为面板背景。

我认为(不记得)我也使用“onPaint()”重写方法,但程序崩溃了。 因为油漆事件连续上升。

行,

我的问题是移动和调整父窗体大小时此控件的效率很低。 因为这个工作,导致调用控件的“绘制”方法,并且当调用方法得到很多时,它会减慢应用程序的速度,更重要的是,它非常耗费CPU。

我希望您了解一种绘制此控件的用户界面的方法

1 - 使用dot net 2.0

2效

有一种方法可以使用directx绘制UI,...?(我的意思是不是WPF)

如果没办法,我将删除导致高CPU使用的代码的反射部分。

谢谢。

感谢大家的关注。

我删除了使程序变慢的所有代码。 我把它简化为一个简单的边框和阴影。它仍然是美丽的。

但我关于使用directx绘制控件的问题仍然存在。

1 个答案:

答案 0 :(得分:1)

使用DoubleBuffered属性。 (将其设为true。)
绘图的工作速度要快十倍!