• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C# winform制作不规则窗体(代码)

c# 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

以前想制作不规则窗体,大多使用API函数来实现,在C#中,也可以不使用API函数照样能制作出漂亮的不规则窗体,下面就介绍一下相关方法,下面是代码。

        private void Form1_Load(object sender, EventArgs e)        {            //重新绘制窗口样式            string fileName = @"C:\Users\admin\Desktop\Yuan1.png";            Bitmap mybitmap = new Bitmap(fileName);            CreateControlRegion(this, mybitmap);            this.BackColor = Color.White;// 此处为添加部分              this.TransparencyKey = Color.White;//此处为添加部分          }
        /// <summary>        /// 重新绘制窗口样式        /// </summary>        /// <param name="control"></param>        /// <param name="bitmap"></param>        public static void CreateControlRegion(Control control, Bitmap bitmap)        {            // Return if control and bitmap are null              //判断是否存在控件和位图              if (control == null || bitmap == null)                return;            //设置控件大小为位图大小              control.Width = bitmap.Width;            control.Height = bitmap.Height;            // Check if we are dealing with Form here               //当控件是form时              if (control is System.Windows.Forms.Form)            {                // Cast to a Form object                  //强制转换为FORM                  Form form = (Form)control;                //当FORM的边界FormBorderStyle不为NONE时,应将FORM的大小设置成比位图大小稍大一点                  form.Width = control.Width;                form.Height = control.Height;                //没有边界                  form.FormBorderStyle = FormBorderStyle.None;                //将位图设置成窗体背景图片                  form.BackgroundImage = bitmap;                //计算位图中不透明部分的边界                  GraphicsPath graphicsPath = CalculateControlGraphicsPath(bitmap);                //应用新的区域                  form.Region = new Region(graphicsPath);                // 以下为自己添加的语句,不添加此两句会出现问题                  form.Wi<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码网@</strong>dth = bitmap.Width;                form.Height = bitmap.Height;            }            //当控件是button时              else if (control is System.Windows.Forms.Button)            {                //强制转换为 button                  Button button = (Button)control;                //不显示button text                  button.Text = "";                //改变 cursor的style                  button.Cursor = Cursors.Hand;                //设置button的背景图片                  button.BackgroundImage = bitmap;                //计算位图中不透明部分的边界                  GraphicsPath graphicsPath = CalculateControlGraphicsPath(bitmap);                // Apply new region                   //应用新的区域                  button.Region = new Region(graphicsPath);                button.Width = bitmap.Width;                button.Height = bitmap.Height;                button.FlatStyle = FlatStyle.Popup;//此处为添加部分              }        }        private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)        {            //创建 GraphicsPath              GraphicsPath graphicsPath = new GraphicsPath();            //使用左上角的一点的颜色作为我们透明色              Color colorTransparent = bitmap.GetPixel(0, 0);            //第一个找到点的X              int colOpaquePixel = 0;            // 偏历所有行(Y方向)              for (int row = 0; row < bitmap.Height - 1; row++)            {                // Reset value                   //重设                  colOpaquePixel = 0;                //偏历所有列(X方向)                  for (int col = 0; col < bitmap.Width - 1; col++)                {                    //如果是不需要透明处理的点则标记,然后继续偏历                      if (bitmap.GetPixel(col, row) != colorTransparent)                    {                        colOpaquePixel = col;                        //建立新变量来记录当前点                          int colNext = col;                        ///从找到的不透明点开始,继续寻找不透明点,一直到找到或则达到图片宽度                           for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext++)                        {                            Color gpi = bitmap.GetPixel(colNext, row);                            if (bitmap.GetPixel(colNext, row) == colorTransparent)                            {                                break;                            }                        }                        //将不透明点加到graphics path                          {                            graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, row, colNext - colOpaquePixel, 1));                        }                        col = colNext;                    }                }            }            return graphicsPath;        }

完美!

以上就是C# winform制作不规则窗体(代码)的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C# winform制作不规则窗体(代码)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址