关闭

使用Graphic画圆角矩形和填充圆角矩形的方法

1136人阅读 评论(0) 收藏 举报

使用Graphic画圆角矩形和填充圆角矩形的方法

2008-01-05 21:57

/*
*   Copyright (c) 2004-2007 D8HOME.CN
*   All rights reserved.
*
* http://www.d8home.cn/
*
* This library is only free for any non commercial usage. In the case of
* modifying and/or redistributing the code, it's obligate to retain
* the original copyright notice.
*
*/
using System;
using System.Windows.Forms;
using System.Drawing;

namespace D8Drawing
{
/// <summary>
/// RoundRect 的摘要说明。
/// </summary>
public class RoundRect
{
   /// <summary>
   /// 最大圆角半径
   /// </summary>
   protected const int MaxRoundRadius = 3;
   /// <summary>
   /// 最小矩形边长,用于自动处理圆角大小
   /// </summary>
   protected const int MinBorderLength = 20;
   /// <summary>
   /// 绘制一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="nLeft">矩形左上角X坐标</param>
   /// <param name="nTop">矩形左上角Y坐标</param>
   /// <param name="nRight">矩形右下角X坐标</param>
   /// <param name="nBottom">矩形右下角Y坐标</param>
   /// <param name="round">圆角的半径长度</param>
   public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,int nLeft,int nTop,int nRight,int nBottom,int round)
   {
    if(round > MaxRoundRadius)
    {
     round = MaxRoundRadius;
    }
    else if( round < 0)
    {
     round = 0;
    }
    if(Math.Abs(nRight - nLeft) < MinBorderLength && Math.Abs(nBottom - nTop) < MinBorderLength)
    {
     round = 1;
    }

    Point Polygon1 = new Point (nLeft+round,nTop);
    Point Polygon2 = new Point (nRight-round+1,nTop);

    Point Polygon3 = new Point (nLeft,nTop+round);
    Point Polygon4 = new Point (nRight+1,nTop+round);

    Point Polygon5 = new Point (nLeft,nBottom-round);
    Point Polygon6 = new Point (nRight+1,nBottom-round);

    Point Polygon7 = new Point (nLeft+round,nBottom+1);
    Point Polygon8 = new Point (nRight-round,nBottom+1);

    //四条主线(上下左右)
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon1.X,Polygon1.Y,Polygon2.X,Polygon2.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon7.X,Polygon7.Y,Polygon8.X,Polygon8.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon3.X,Polygon3.Y,Polygon5.X,Polygon5.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon4.X,Polygon4.Y,Polygon6.X,Polygon6.Y);

    //四个边角
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon1.X,Polygon1.Y,Polygon3.X,Polygon3.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon2.X,Polygon2.Y,Polygon4.X,Polygon4.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon5.X,Polygon5.Y,Polygon7.X,Polygon7.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon6.X,Polygon6.Y,Polygon8.X,Polygon8.Y);
   }
   /// <summary>
   /// 绘制一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="rect">要绘制的矩形对象</param>
   /// <param name="round">圆角的半径长度</param>
   public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,Rectangle rect,int round)
   {
    DrawRoundRect(currentGraphicObject,lineColor,rect.Left,rect.Top,rect.Right,rect.Bottom,round);
   }
   /// <summary>
   /// 绘制一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="rect">要绘制的矩形对象</param>
   public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,Rectangle rect)
   {
    DrawRoundRect(currentGraphicObject,lineColor,rect.Left,rect.Top,rect.Right,rect.Bottom,2);
   }

   /// <summary>
   /// 填充一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="nLeft">矩形左上角X坐标</param>
   /// <param name="nTop">矩形左上角Y坐标</param>
   /// <param name="nRight">矩形右下角X坐标</param>
   /// <param name="nBottom">矩形右下角Y坐标</param>
   /// <param name="round">圆角的半径长度</param>
   public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject,Color fillColor,int nLeft,int nTop,int nRight,int nBottom,int round)
   {
    if(round > MaxRoundRadius)
    {
     round = MaxRoundRadius;
    }
    else if( round < 0)
    {
     round = 0;
    }
    if(Math.Abs(nRight - nLeft) < MinBorderLength && Math.Abs(nBottom - nTop) < MinBorderLength)
    {
     round = 1;
    }

    Point Polygon1 = new Point (nLeft+round,nTop);
    Point Polygon2 = new Point (nRight-round+1,nTop);

    Point Polygon3 = new Point (nLeft,nTop+round);
    Point Polygon4 = new Point (nRight+1,nTop+round);

    Point Polygon5 = new Point (nLeft,nBottom-round);
    Point Polygon6 = new Point (nRight+1,nBottom-round);

    Point Polygon7 = new Point (nLeft+round,nBottom+1);
    Point Polygon8 = new Point (nRight-round,nBottom+1);
  
    currentGraphicObject.FillPolygon(new System.Drawing.SolidBrush(fillColor),new Point[]{   Polygon1,
                      Polygon3,
                      Polygon5,
                      Polygon7,
                      Polygon8,
                      Polygon6,
                      Polygon4,
                      Polygon2});
   }
   /// <summary>
   /// 填充一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="rect">要填充的矩形</param>
   /// <param name="indentSize">填充区域针对矩形的缩进距离</param>
   /// <param name="round">圆角的半径长度</param>
   public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,Rectangle rect,int indentSize,int round)
   {
    FillRoundRect(currentGraphicObject,lineColor,rect.Left+indentSize,rect.Top+indentSize,rect.Right-indentSize+1,rect.Bottom-indentSize+1,round);
   }
   /// <summary>
   /// 填充一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="rect">要填充的矩形</param>
   public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,Rectangle rect)
   {
    FillRoundRect(currentGraphicObject,lineColor,rect,0,2);
   }    
}
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3624631次
    • 积分:36059
    • 等级:
    • 排名:第129名
    • 原创:58篇
    • 转载:1368篇
    • 译文:0篇
    • 评论:392条
    最新评论