C#中实现不规则的按钮

在很多的视频播放器中,控制按钮都是不规则的,界面非常友好。在我们很多的WinForm项目中,为了增加界面的效果,有时也想加入一些闪亮的按钮,但光是有好看的图片也未必做出好的效果,在此,介绍一下如果制作一个不规则的按钮控件。

1、考虑如何改变Control.Region,我是使用图片生成一个GraphicsPath,按钮的形态就是这个GraphicsPath了。

        private GraphicsPath GetAutoRgn(Image img, Color transColor)
        {
            int posT = 0;
            int posS = 0;
            Bitmap bm = null;
            bm = new Bitmap(img, this.ClientSize);
            //   Bitmap bm = new Bitmap(this.shapeImage);
            GraphicsPath myGraphicsPath = new System.Drawing.Drawing2D.GraphicsPath();
            //   myGraphicsPath.AddRectangle(new Rectangle(0,0,20,20));
            //   myGraphicsPath.AddRectangle(new Rectangle(20,6,12,12));
            for (int y = 0; y < bm.Height; y++)
            {
                int x = 0;
                while (x < bm.Width)
                {
                    while (x < bm.Width && bm.GetPixel(x, y).ToArgb() == transColor.ToArgb())
                    {
                        x++;
                    }
                    posT = x;      //透明颜色的结束位置,即不透明颜色的起始位置

                    while (x < bm.Width && bm.GetPixel(x, y).ToArgb() != transColor.ToArgb())
                    {
                        x++;
                    }
                    posS = x - 1;      //不透明颜色的结束位置
                    if (posT <= posS)
                    {
                        //合并区域
                        myGraphicsPath.AddRectangle(new Rectangle(posT, y, x - posT, 1));
                    }
                }

            }
            return myGraphicsPath;
        }

生成了GraphicsPath 后,就可以设定现在控件的Region。

this.Region = new Region(gp) 按钮的形状就是图片的形状了。

本控件是从Label继承,利用Label来显示图片,减少开发的工作量,效果图如下(三个按钮)

 

不知怎样上传源文件,有需要的请留言。源代码

你可能感兴趣的:(C#,WinForm,不规则按钮)