C# winfrom项目,如何将form窗体由矩形变成圆形窗体

.Net技术 码拜 6年前 (2015-05-11) 453次浏览 0个评论
 

在C# winfrom项目,如何将form窗体由矩形绘制成圆形窗体。
请各位帮忙提供下这方面的相关源码或资料。谢谢。

2分
建议楼主还是考虑用WPF
3分
本帖最后由 bdmh 于 2015-04-22 08:34:04 编辑

很多方法
http://blog.163.com/chenjunfeng_2007/blog/static/11938508320101665811207/

刚刚看了一个文章讲解github for windows的设计,也是用wpf,但是我没学过,只懂一点点,与winform设计的区别很大么?学习时间需要多久?
7分
http://www.cnblogs.com/haiq/articles/1751777.html
3分
/// <summary>
        /// 窗体圆角
        /// </summary>
        /// <param name="sender"></param>
        private void Type(Control sender)
        {
            GraphicsPath oPath = new GraphicsPath();
            oPath.AddPolygon(
                new Point[] {
                new Point(0, 1),
                new Point(1, 0),

                new Point(sender.Width -1, 0),
                new Point(sender.Width , 1),

                new Point(sender.Width, sender.Height-2),
                new Point(sender.Width-1, sender.Height-1),
                new Point(sender.Width-1, sender.Height),

                 new Point(1, sender.Height),
                new Point(1, sender.Height-1),
                new Point(0, sender.Height-2),
               }
             );
            sender.Region = new Region(oPath);
        }
 f.Paint += delegate(object sender, PaintEventArgs e)
            {
                Type(f);
                //窗体头部颜色设置
                e.Graphics.FillPolygon(new SolidBrush(HeadColor), new Point[] {
                new Point(0, 1),
                new Point(1, 0),

                new Point(this.Width -1, 0),
                new Point(this.Width , 1),

                new Point(this.Width, 50),
                new Point(0, 50),
               });
            };



想怎么画就怎么画。

运行窗体后,圆形的边框不平滑,有齿轮效果,怎么样做到圆形的边框平整圆滑的效果。
我采用的是圆形图片作为picturebox图形,代码如下,看看怎么修改下。
private void Form1_Load(object sender, EventArgs e)
{
//程序启动后,窗体在屏幕中央显示
this.Left = (SystemInformation.PrimaryMonitorMaximizedWindowSize.Width – this.Width) / 2;
this.Top = (SystemInformation.PrimaryMonitorMaximizedWindowSize.Height – this.Height) / 2;

        //从指定的位图中获取透明度大于 10 的区域;               
        Bitmap img = (Bitmap)pictureBox1.Image;
        GraphicsPath grapth = GetNoneTransparentRegion(img, 110);         
        this.Region = new Region(grapth);            
        //要显示的图片设置为窗体背景;
        this.BackgroundImage = pictureBox1.Image;
        this.BackgroundImageLayout = ImageLayout.Zoom;
        //在修改窗体尺寸之前设置窗体为无边框样式;
        this.FormBorderStyle = FormBorderStyle.None;
        this.Width = pictureBox1.Image.Width;
        this.Height = pictureBox1.Image.Height;

    }

             /// <summary>     
    /// 返回指定图片中的非透明区域; 
    /// </summary>
    /// <param name=”img”>位图</param>
    /// <param name=”alpha”>alpha 小于等于该值的为透明</param>
    /// <returns></returns>
    public static GraphicsPath GetNoneTransparentRegion(Bitmap img, byte alpha)
    {
        int height = img.Height;
        int width = img.Width;
        int xStart, xEnd;
        GraphicsPath grpPath = new GraphicsPath();
        for (int y = 0; y < height; y++)
        {
            //逐行扫描;
            for (int x = 0; x < width; x++)
            {
                //略过连续透明的部分;
                while (x < width && img.GetPixel(x, y).A <= alpha)
                {
                    x++;
                }
                //不透明部分;
                xStart = x;
                while (x < width && img.GetPixel(x, y).A > alpha)
                {
                    x++;
                }
                xEnd = x;
                if (img.GetPixel(x – 1, y).A > alpha)
                {
                    grpPath.AddRectangle(new Rectangle(xStart, y, xEnd – xStart, 1));
                }
            }
        }
        return grpPath;
    }

请帮忙看看,谢谢。
winfrom不行,wpf可以
引用 8 楼 xuanbg 的回复:

winfrom不行,wpf可以

有没有其它办法?

SetWindowRgn 
有没有其它办法? 
用第三方界面库可以实现,各种各样的形状和透明都可以。

http://bbs.cskin.net/   你可以去看看

C# winfrom项目,如何将form窗体由矩形变成圆形窗体

引用 8 楼 xuanbg 的回复:

winfrom不行,wpf可以

winform也是可以的。设置窗体Region就可以了。

引用 13 楼 yuwenge 的回复:
Quote: 引用 8 楼 xuanbg 的回复:

winfrom不行,wpf可以

winform也是可以的。设置窗体Region就可以了。

能不能,具体点?

5分
引用 5 楼 wawd74520 的回复:
/// <summary>
        /// 窗体圆角
        /// </summary>
        /// <param name="sender"></param>
        private void Type(Control sender)
        {
            GraphicsPath oPath = new GraphicsPath();
            oPath.AddPolygon(
                new Point[] {
                new Point(0, 1),
                new Point(1, 0),

                new Point(sender.Width -1, 0),
                new Point(sender.Width , 1),

                new Point(sender.Width, sender.Height-2),
                new Point(sender.Width-1, sender.Height-1),
                new Point(sender.Width-1, sender.Height),

                 new Point(1, sender.Height),
                new Point(1, sender.Height-1),
                new Point(0, sender.Height-2),
               }
             );
            sender.Region = new Region(oPath);
        }
 f.Paint += delegate(object sender, PaintEventArgs e)
            {
                Type(f);
                //窗体头部颜色设置
                e.Graphics.FillPolygon(new SolidBrush(HeadColor), new Point[] {
                new Point(0, 1),
                new Point(1, 0),

                new Point(this.Width -1, 0),
                new Point(this.Width , 1),

                new Point(this.Width, 50),
                new Point(0, 50),
               });
            };



想怎么画就怎么画。

这个方法不错,可以试一下


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# winfrom项目,如何将form窗体由矩形变成圆形窗体
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!