在很多的视频播放器中,控制按钮都是不规则的,界面非常友好。在我们很多的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来显示图片,减少开发的工作量,效果图如下(三个按钮)
不知怎样上传源文件,有需要的请留言。源代码