本文实例报告了C# WinForm制造异形窗体与控件的要领。分享给人人供人人参考,细致以下:
制造异形窗体或控件的思绪平常都是想办法生成一个region,然后设置给指定的窗口或控件。生成region的要领有许多,最经常使用的就是从一幅图片生成,把该图片中的通明色部份“抠”掉,剩下的部份作为一个region。设置窗口或控件的region能够用SetWindowRgn API,不过.NET framework封装了这个操纵,在C#中只要对窗口或控件的Region属性赋值就能够了。下面我就把我在C#中完成异形窗体的中心代码贴出来给人人看看,有什么看法只管提,别客套哦
起首,是一个依据Bitmap对象生成Region的要领:
/// <summary> /// 获得一个图片中非通明色部份的地区。 /// </summary> /// <param name="Picture">取其地区的图片。</param> /// <param name="TransparentColor">通明色。</param> /// <returns>图片中非通明色部份的地区</returns> private Region BmpRgn(Bitmap Picture, Color TransparentColor) { int nWidth = Picture.Width; int nHeight = Picture.Height; Region rgn = new Region(); rgn.MakeEmpty(); bool isTransRgn;//前一个点是不是在通明区 Color curColor;//当前点的色彩 Rectangle curRect = new Rectangle(); curRect.Height = 1; int x = 0, y = 0; //逐像素扫描这个图片,找出非通明色部份地区并兼并起来。 for(y = 0; y < nHeight; ++y) { isTransRgn = true; for (x = 0; x < nWidth; ++x) { curColor = Picture.GetPixel(x,y); if(curColor == TransparentColor || x == nWidth - 1)//假如碰到通明色或行尾 { if(isTransRgn == false)//退出有用区 { curRect.Width = x - curRect.X; rgn.Union(curRect); } } else//非通明色 { if(isTransRgn == true)//进入有用区 { curRect.X = x; curRect.Y = y; } }//if curColor isTransRgn = curColor == TransparentColor; }//for x }//for y return rgn; }
道理很简朴,就是对该图片逐行扫描,在每一行中把那些非通明色的矩形(只要一个像素高)兼并(union)到一个Region对象中,当扫描完全部图片,获得的也就是我们想要的Region了。这类算法在许多文章里都有引见的。
有了region,下面就简朴了:
this.Region = BmpRgn(new Bitmap("d:\\a.bmp"), Color.FromArgb(0, 0, 0));
上面的代码就是把d:\a.bmp的表面作为主窗口的region的,假定该图片的背景黑色(Color.FromArgb(0, 0, 0))。
实在不光是Form,任何控件都能够用这个要领设置Region,制造出异形控件。
以上就是C#中WinForm制造异形窗体与控件的完成要领的细致内容,更多请关注ki4网别的相干文章!