C# GDI 绘制自定义控件 c gdi 高质量绘制

今天用GDI+绘制一个渐变的Panel,窗体移到有的被遮盖处,比如说开始菜单以下,再移上来,就出现如图

情形。有的时候又很正常。

后来终于发现问题出在OnPaint方法里,使用渐变笔刷时是这样调用的

[c-sharp] view plaincopy?
C# GDI 绘制自定义控件 c gdi 高质量绘制

protectedoverridevoidOnPaint(PaintEventArgse)

{

base.OnPaint(e);

LinearGradientBrushbrush=newLinearGradientBrush(e.ClipRectangle,upperColor,downColor,LinearGradientMode.Vertical);

e.Graphics.FillRectangle(brush,e.ClipRectangle);

}

当时还沾沾自喜来着,直接用了e.ClipRectangle不用自己定义Rectangle。

后来发现e.ClipRectangle指需要绘制的部分。那么,当控件被遮住不需要绘制时,e.ClipRectangle的大小自然就变化了,因此出现上述现象。因此,还是得乖乖的指定需绘制的大小。

另附上自定义渐变Panel的代码,如下。

[c-sharp] view plaincopy?

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Drawing;

usingSystem.Data;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Drawing.Drawing2D;

namespaceMyControls

{

publicpartialclassMyGradientPanel:Panel

{

publicMyGradientPanel()

{

InitializeComponent();

this.SetStyle(ControlStyles.UserPaint,true);

this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);

this.SetStyle(ControlStyles.OptimizedDoubleBuffer,true);

//Redrawwhenresized

this.SetStyle(ControlStyles.ResizeRedraw,true);

this.Font=SystemInformation.MenuFont;

}

privateColorupperColor=Color.LawnGreen;

publicColorUpperColor

{

get{returnupperColor;}

set{upperColor=value;this.Invalidate();}

}

privateColordownColor=Color.LemonChiffon;

publicColorDownColor

{

get{returndownColor;}

set{downColor=value;this.Invalidate();}

}

protectedoverridevoidOnPaint(PaintEventArgse)

{

base.OnPaint(e);

RectanglebaseRectangle=newRectangle(0,0,this.Width,this.Height);

using(BrushgradientBrush=newLinearGradientBrush(baseRectangle,upperColor,downColor,LinearGradientMode.Vertical))

{

e.Graphics.FillRectangle(gradientBrush,baseRectangle);

}

}

protectedoverridevoidOnResize(EventArgse)

{

base.OnResize(e);

Invalidate();

}

}

}

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/173178.html

更多阅读

怎样使用C#的月历MonthCalendar 控件 c panel控件的使用

怎样使用C#的月历【MonthCalendar】控件——简介 C#中的日历控件【MonthCalendar】是比较常用的一个控件,可以让用户对日期进行快速的查看和设置、也可以选择一段所需要的日期时间段。 下面介绍一下几种日历控件常用的使用方法。怎

如何使用C#TextBox控件 textboxdropdown控件

如何使用C#TextBox控件——简介在c#中TextBox控件做为最重要的控件,必须要下功夫吃透,学通。下面我给大家说说TextBox控件的三个重要属性如何使用C#TextBox控件——方法/步骤

窗口和控件闪烁解决方案 屏幕闪烁解决办法

对于MFC程序员来说做UI开发是痛苦的事情,不过大多数情况下我们都需要做这件事情,因为MFC自带的控件实在是太简陋了。这时候我们多半会涉及到自绘控件,随之而来的很可能就是窗口和控件的闪烁问题。这篇文章希望对MFC的窗口和控件闪烁问

C#DataGridView控件清空数据完美解决方法 datagridview清空列

C# DataGridView控件绑定数据后清空数据在清除DataGridview的数据时:1.DataSource为NULL(DataGridView.DataSource=null;)这样会将DataGridView的列也删掉。2.用DataGridview.Rows.Clear();提示“不能清除此列表”!!!!!以上都不是想要的结果

快速掌握TeeChart绘图控件攻略 怎样快速掌握英语口语

快速掌握TeeChart绘图控件攻略——简介在自己软件开发过程中,常会用到绘图控件,鉴于开发周期的限制,为了加快项目的开发效率,常选择使用TeeChart图表控件,快速将数据绘制成各式的曲线或图表,直观、形象地表示出数据传递出来的信息,下面是小

声明:《C# GDI 绘制自定义控件 c gdi 高质量绘制》为网友告别思念的疼痛分享!如侵犯到您的合法权益请联系我们删除