找不到类型或命名空间名称“GraphicsPath”(是否缺少 using 指令或程序集引用?)

oydg5658 2010-05-12 06:06:18
找不到类型或命名空间名称“GraphicsPath”(是否缺少 using 指令或程序集引用?)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Text;
using System.Windows.Forms;






namespace hstwintoolbox
{
public partial class hstbutton : Button
{
public hstbutton()
{
InitializeComponent();

BackColor = Color.YellowGreen;

m_Region = CreateRoundRectangle(this.ClientRectangle, m_radius);
if (m_Region != null)
this.Region = new Region(m_Region);

this.SetStyle(ControlStyles.AllPaintingInWmPaint |
ControlStyles.DoubleBuffer |
ControlStyles.UserPaint, true);
}


private GraphicsPath m_Region = null;

private bool IsMouseHover = false;

private bool IsMouseDown = false;

private int m_radius = 3;

private Color m_outBorderColor = Color.DarkGreen;

private Color m_upperShineColor = Color.White;

private Color m_bottomShineColor = Color.FromArgb(140, Color.White);


public int ButtonCornorRadius
{
get
{
return m_radius;
}
set
{
if (value < 0)
return;
else
m_radius = value;
}
}

public Color OutBorderColor
{
get
{
return m_outBorderColor;
}
set
{
m_outBorderColor = value;
}
}

public Color UpperShineColor
{
get
{
return m_upperShineColor;
}
set
{
m_upperShineColor = value;
}
}

public Color BottomShineColor
{
get
{
return m_bottomShineColor;
}
set
{
m_bottomShineColor = value;
}
}


protected virtual GraphicsPath CreateRoundRectangle(Rectangle rectangle, int radius)
{
GraphicsPath path = new GraphicsPath();
int l = rectangle.Left;
int t = rectangle.Top;
int w = rectangle.Width;
int h = rectangle.Height;
int d = radius << 1;
path.AddArc(l, t, d, d, 180, 90); // topleft
path.AddLine(l + radius, t, l + w - radius, t); // top
path.AddArc(l + w - d, t, d, d, 270, 90); // topright
path.AddLine(l + w, t + radius, l + w, t + h - radius); // right
path.AddArc(l + w - d, t + h - d, d, d, 0, 90); // bottomright
path.AddLine(l + w - radius, t + h, l + radius, t + h); // bottom
path.AddArc(l, t + h - d, d, d, 90, 90); // bottomleft
path.AddLine(l, t + h - radius, l, t + radius); // left
path.CloseFigure();
return path;
}

protected override void OnMouseDown(MouseEventArgs mevent)
{
IsMouseDown = true;
this.Invalidate();
base.OnMouseDown(mevent);
}

protected override void OnMouseUp(MouseEventArgs mevent)
{
IsMouseDown = false;
this.Invalidate();
base.OnMouseUp(mevent);
}

protected override void OnMouseEnter(EventArgs e)
{
IsMouseHover = true;
this.Invalidate();
base.OnMouseEnter(e);
}

protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
IsMouseHover = false;
this.Invalidate();
}

protected override void OnGotFocus(EventArgs e)
{
IsMouseHover = true;
this.Invalidate();
base.OnGotFocus(e);
}

protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
IsMouseHover = false;
this.Invalidate();
}

protected override void OnSizeChanged(EventArgs e)
{
m_Region = CreateRoundRectangle(this.ClientRectangle, m_radius);
if (m_Region != null)
this.Region = this.Region = new Region(m_Region);

base.OnSizeChanged(e);
}


protected virtual void DrawBorder(Graphics g, Pen pen)
{
if (m_Region != null)
{
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBilinear;

g.DrawPath(pen, CreateRoundRectangle(new Rectangle(this.ClientRectangle.Left, this.ClientRectangle.Top, this.ClientRectangle.Width - 1, this.ClientRectangle.Height - 1), m_radius));

g.SmoothingMode = SmoothingMode.Default;
g.InterpolationMode = InterpolationMode.Default;
}

pen.Dispose();
pen = null;
}

protected virtual void DrawUpperShine(Graphics g)
{
Color c1 = Color.FromArgb(200, this.m_upperShineColor);
Color c2 = Color.FromArgb(100, Color.White);

Rectangle rc = new Rectangle(this.ClientRectangle.Left, this.ClientRectangle.Top, Width - 1, Height / 2);
if(IsMouseDown)
rc = new Rectangle(this.ClientRectangle.Left, this.ClientRectangle.Top, Width - 1, (Height-10) / 2);

using (LinearGradientBrush lbrush = new LinearGradientBrush(rc, c1, c2,
LinearGradientMode.Vertical))
{
g.FillRectangle(lbrush, rc);
}
}

protected virtual void DrawBottomShine(Graphics g)
{
Rectangle rc1 = new Rectangle(this.ClientRectangle.Left,
this.ClientRectangle.Top + this.ClientRectangle.Height / 2,
this.ClientRectangle.Width / 2, this.ClientRectangle.Height / 2);

Rectangle rc2 = new Rectangle(this.ClientRectangle.Left + this.ClientRectangle.Width / 2,
this.ClientRectangle.Top + this.ClientRectangle.Height / 2,
this.ClientRectangle.Width / 2, this.ClientRectangle.Height / 2);

Color c1 = BackColor;
Color c2 = m_bottomShineColor;

using (LinearGradientBrush lbrush = new LinearGradientBrush(rc1, c1, c2,
LinearGradientMode.ForwardDiagonal))
{
g.FillRectangle(lbrush, rc1);
}

using (LinearGradientBrush lbrush = new LinearGradientBrush(rc2, c1, c2,
LinearGradientMode.BackwardDiagonal))
{
g.FillRectangle(lbrush, rc2);
}
}

protected virtual void DrawDisable(Graphics g,Brush brush,Pen pen)
{
g.FillPath(brush, m_Region);

DrawBorder(g, pen);

brush.Dispose();
pen.Dispose();
brush = null;
pen = null;
}

protected virtual void DrawString(Graphics g)
{
if (this.Text.Trim() == "")
return;

int x = 0, y = 0;
int w = 0, h = 0;
Size sz = g.MeasureString(Text, Font).ToSize();

w = sz.Width > Width ? Width : sz.Width;
h = sz.Height > Height ? Height : sz.Height;

switch (TextAlign)
{
case ContentAlignment.MiddleCenter:
{
x = sz.Width > Width ? 0 : (Width - sz.Width) / 2;
y = sz.Height > Height ? 0 : (Height - sz.Height) / 2;
}
break;

case ContentAlignment.MiddleLeft:
{
x = 2;
y = sz.Height > Height ? 0 : (Height - sz.Height) / 2;
} break;

case ContentAlignment.MiddleRight:
{
x = sz.Width > sz.Width ? 0 : (Width - sz.Width) - 2;
y = sz.Height > Height ? 0 : (Height - sz.Height) / 2;
} break;

default:
{
//the other tyles in middle center.
x = sz.Width > Width ? 0 : (Width - sz.Width) / 2;
y = sz.Height > Height ? 0 : (Height - sz.Height) / 2;
} break;
}

Pen pen = new Pen(ForeColor);
if (!Enabled)
pen = new Pen(Color.Gray);

g.DrawString(Text, Font, pen.Brush, new RectangleF(
(float)x, (float)y, (float)w+3, (float)h));

pen.Dispose();
pen = null;
}

protected override void OnPaint(PaintEventArgs pevent)
{
Pen pen = new Pen(m_outBorderColor);
Brush brush = new SolidBrush(BackColor);

if (!this.Enabled)
{
DrawDisable(pevent.Graphics, brush, pen);
DrawString(pevent.Graphics);
return;
}

pevent.Graphics.FillPath(brush, m_Region);

DrawUpperShine(pevent.Graphics);

if(IsMouseHover)
DrawBottomShine(pevent.Graphics);

DrawString(pevent.Graphics);

DrawBorder(pevent.Graphics, pen);
//base.OnPaint(pevent);
}


}
}
...全文
1383 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
碎片球球 2011-04-04
  • 打赏
  • 举报
回复
using System.Drawing.Drawing2D;
海风33 2010-05-12
  • 打赏
  • 举报
回复
引入命名空间
wuyq11 2010-05-12
  • 打赏
  • 举报
回复
GraphicsPath 类
命名空间:System.Drawing.Drawing2D
程序集:System.Drawing(在 system.drawing.dll 中)
mngzilin 2010-05-12
  • 打赏
  • 举报
回复
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
sxldfang 2010-05-12
  • 打赏
  • 举报
回复
学会自己找类型的定义:比如:
GraphicsPath”(是否缺少 using 指令或程序集引用?)
打开对象浏览器,输入GraphicsPath,查找,。。。,看结果吧!
xingyuebuyu 2010-05-12
  • 打赏
  • 举报
回复

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧