C# winform製作不規則表單(代碼)

來源:互聯網
上載者:User
以前想製作不規則表單,大多使用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.Width = 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;        }

完美!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.