C# WinForm 绘制圆角窗体

public   void  SetWindowRegion()
{
    System.Drawing.Drawing2D.GraphicsPath FormPath;
    FormPath 
=   new  System.Drawing.Drawing2D.GraphicsPath();
    Rectangle rect 
=   new  Rectangle( 0 22 this .Width,  this .Height  -   22 ); // this.Left-10,this.Top-10,this.Width-10,this.Height-10);                 
    FormPath  =  GetRoundedRectPath(rect,  30 );
    
this .Region  =   new  Region(FormPath);
}
private  GraphicsPath GetRoundedRectPath(Rectangle rect,  int  radius)
{
    
int  diameter  =  radius;
    Rectangle arcRect 
=   new  Rectangle(rect.Location,  new  Size(diameter, diameter));
    GraphicsPath path 
=   new  GraphicsPath();
    
//    左上角   
    path.AddArc(arcRect,  180 90 );
    
//    右上角   
    arcRect.X  =  rect.Right  -  diameter;
    path.AddArc(arcRect, 
270 90 );
    
//    右下角   
    arcRect.Y  =  rect.Bottom  -  diameter;
    path.AddArc(arcRect, 
0 90 );
    
//    左下角   
    arcRect.X  =  rect.Left;
    path.AddArc(arcRect, 
90 90 );
    path.CloseFigure();
    
return  path;
}
protected   override   void  OnResize(System.EventArgs e)
{
    
this .Region  =   null ;
    SetWindowRegion();
}




增加命名空间:using System.Drawing.Drawing2D; 
添加方法如下:当然各角的点可根据需要确定.
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt private   void  Type(Control sender,  int  p_1,  double  p_2)
{
    GraphicsPath oPath 
=   new  GraphicsPath();
    oPath.AddClosedCurve(
        
new  Point[] {
            
new  Point( 0 , sender.Height  /  p_1),
            
new  Point(sender.Width  /  p_1,  0 ), 
            
new  Point(sender.Width  -  sender.Width  /  p_1,  0 ), 
            
new  Point(sender.Width, sender.Height  /  p_1),
            
new  Point(sender.Width, sender.Height  -  sender.Height  /  p_1), 
            
new  Point(sender.Width  -  sender.Width  /  p_1, sender.Height), 
            
new  Point(sender.Width  /  p_1, sender.Height),
            
new  Point( 0 , sender.Height  -  sender.Height  /  p_1) },

        (
float ) p_2);

    sender.Region 
=   new  Region(oPath);
}

在窗体的paint和resize事件中增加:Type(this,20,0.1); 
参数20和0.1也可以根据自己的需要调整到最佳效

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-557460/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639172/viewspace-557460/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值