C#创建不规则窗体

时间:2008-07-16 03:26:30  来源:  作者:wyhjianhw  【背景色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白

  我们常见的窗体都是规则的,那么如何用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);
  }
  }
  }


文章评论

共有 0位网翼网友发表了评论 查看完整内容