简单的方法实现不规则控件

本控件的新版本在这里查看: http://blog.csdn.net/aimeast/archive/2008/07/21/2687029.aspx
    这个命名空间的功能是提供不规则外形控件的支持。它可以像普通的控件一样的进行操作,使用非常简单。
    目前该版本只提供了Form和Botton的支持。目前来看,常用的外形不规则的控件就是这两种。而Form还添加了拖动的支持。
    具体的实现请参阅附件里的例子。
/***********************************************************************/
//
//       名称:  AbnormityFrame V0.1
//       功能:  进行外形不规则控件的支持(目前只支持From和Button)
//       作者:  李向东
//       Email: lixd3389@gmail.com
//       未经允许,严禁用于商业用途
//
/***********************************************************************/

using  System;
using  System.ComponentModel;
using  System.Drawing;
using  System.Drawing.Drawing2D;
using  System.Windows.Forms;

namespace  AbnormityFrame
{
    
//AbnormityControl类摘自
    
//http://www.codeproject.com/KB/graphics/bmprgnform.aspx?target=region
    internal static class AbnormityControl
    
{
        
public static GraphicsPath CalculateControlGraphicsPath(Image image)
        
{
            GraphicsPath graphicsPath 
= new GraphicsPath();
            Bitmap bitmap 
= (Bitmap)image;
            Color colorTransparent 
= bitmap.GetPixel(00);
            
int colOpaquePixel = 0;
            
for (int row = 0; row < bitmap.Height; row++)
            
{
                colOpaquePixel 
= 0;
                
for (int col = 0; col < bitmap.Width; col++)
                
{
                    
if (bitmap.GetPixel(col, row) != colorTransparent)
                    
{
                        colOpaquePixel 
= col;
                        
int colNext = col;
                        
for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext++)
                            
if (bitmap.GetPixel(colNext, row) == colorTransparent)
                                
break;
                        graphicsPath.AddRectangle(
new Rectangle(colOpaquePixel, row, colNext - colOpaquePixel, 1));
                        col 
= colNext;
                    }

                }

            }

            
return graphicsPath;
        }

    }


    
public class AbnormityForm : Form
    
{
        
public override Image BackgroundImage
        
{
            
get
            
{
                
return base.BackgroundImage;
            }

            
set
            
{
                
this.FormBorderStyle = FormBorderStyle.None;
                
this.Width = value.Width;
                
this.Height = value.Height;
                
base.BackgroundImage = value;
                
this.Region = new Region(AbnormityControl.CalculateControlGraphicsPath(value));
            }

        }


        
支持窗体拖动的代码
    }


    
public class AbnormityButton : Button
    
{
        
public override Image BackgroundImage
        
{
            
get
            
{
                
return base.BackgroundImage;
            }

            
set
            
{
                
this.Width = value.Width;
                
this.Height = value.Height;
                
base.BackgroundImage = value;
                
this.Region = new Region(AbnormityControl.CalculateControlGraphicsPath(value));
            }

        }

    }

}

   单击 这里下载此文件。

    单击 这里下载使用样例。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值