C#创建不规则窗体

 

          using system;
          using system.Collections.Generic;
          using system.ComponentModel;
          using system.Data;
          using system.Drawing;
          using system.Text;
          using system.windows.Forms;
          using system.Runtime.InteropServices;
          namespace APIDemo
          {
              public partial class Form1 : Form
              {
                  [StructLayout(LayoutKind.Sequential)]
                  private struct POINTAPI
                  {
                      internal int x;
                      internal int y;
                  }
                  [DllImport("gdi32.dll")]
                  private static extern IntPtr  CreatePolygonRgn(
                       ref POINTAPI lpPoint,
                       int nCount,
                       int nPolyFillMode);
                  [DllImport("user32.dll")]
                  private static extern IntPtr  SetWindowRgn(
                       IntPtr  hWnd,
                       IntPtr  hRgn,
                       ref Boolean bRedraw);
                  public Form1()
                  {
                      InitializeComponent();
                      //创建不规则窗体
                      POINTAPI[] poin;
                      poin =new POINTAPI [5];
                      poin[0].x = 90;
                      poin[0].y = 90;
                      poin[1].x = this.Width;
                      poin[1].y = 0;
                      poin[2].x = Width ;
                      poin[2].y = this.Height/2;
                      poin[3].x = Width / 2;
                      poin[3].y = Height / 2;
                      poin[4].x = 0;
                      poin[4].y = Width;
                      Boolean flag = true;
                     IntPtr  hRgn= CreatePolygonRgn(ref poin[0],8,1);
                     SetWindowRgn(this.Handle, hRgn, ref flag );
                     this.BackColor = Color.BurlyWood;
                  }
                  //设置窗体显示状态
                  [DllImport("user32.dll")]
                  private static extern int SetWindowPos(
                       IntPtr  hwnd,
                       int hWndInsertAfter,
                       int x,
                       int y,
                       int cx,
                       int cy,
                       int wFlags);
                  private void Start_Btn_Click(object sender, EventArgs e)
                  {//始终显示在前面
                      SetWindowPos(this.Handle, -1, 0, 0, 0, 0, 1);
                  }
                  private void button1_Click(object sender, EventArgs e)
                  {
                      //最小化始终显示在前面
                      SetWindowPos(this.Handle, -1, 0, 0, 0, 0, 0);
                  }
              }
         }

 

posted @ 2010-10-14 00:08  base  阅读(265)  评论(0编辑  收藏  举报