winform创建不规则窗体的方法

 更新时间:2015年09月07日 15:03:05   作者:我心依旧  
这篇文章主要介绍了winform创建不规则窗体的方法,涉及C#窗体创建的相关参数设置技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了winform创建不规则窗体的方法。分享给大家供大家参考。具体如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Drawing.Drawing2D;
using System.IO;
namespace WindowsApplication2
{
 public partial class Form3 : Form
 {
  public Form3()
  {
   InitializeComponent();
   this.FormBorderStyle = FormBorderStyle.None;
   ColorConverter colorconvert = new ColorConverter();
   this.BackColor = (Color)colorconvert.ConvertFromString("window");
   this.TransparencyKey = (Color)colorconvert.ConvertFromString("window");
  }
  private void button1_Click(object sender, EventArgs e)
  {
   this.Close();
  }
  protected override void OnPaint(PaintEventArgs e)
  {
   Graphics g = e.Graphics;
   Rectangle mainRect = new Rectangle(0, 0, 695, 278);
   Region mainRegion = new Region(mainRect);
   e.Graphics.SetClip(mainRegion, CombineMode.Replace);
   //设置窗体的外观形式
   Point point1 = new Point(0, 32);
   Point point2 = new Point(9, 20);
   Point point3 = new Point(21, 13);
   Point point4 = new Point(34, 9);
   // 创建一个以点为元素的数组
   Point[] curvePoints = { point1, point2, point3, point4 };
   // 创建一个GraphicsPath 对象并添加一条曲线
   GraphicsPath gPath = new GraphicsPath();
   gPath.AddCurve(curvePoints, 0, 3, 0.8f);
   gPath.AddLine(36, 9, 378, 9);
   point1.X = 378; point1.Y = 9;
   point2.X = 387; point2.Y = 5;
   point3.X = 394; point3.Y = 0;
   Point[] curvePoints2 = { point1, point2, point3 };
   gPath.AddCurve(curvePoints2, 0, 2, 0.8f);
   gPath.AddLine(394, 0, 0, 0);
   Region rg = new Region(gPath);
   e.Graphics.ExcludeClip(rg);
  //可以为任意图片
   string str = Directory.GetCurrentDirectory() + "\\2.png";
   Image img = Image.FromFile(str);
   e.Graphics.DrawImage(img, 0, 0, 695, 278);
   // 重设剪切好的区域
   e.Graphics.ResetClip();
  }
 }
}

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • 使用mutex实现应用程序单实例运行代码分享

    使用mutex实现应用程序单实例运行代码分享

    本文主要介绍了使用Mutex实现应用程序单实例运行的方法,实现原理是在程序启动时,请求一个互斥体,如果能获取对指定互斥的访问权,就继续运行程序,否则就退出程序
    2014-01-01
  • C#中事件的继承实例分析

    C#中事件的继承实例分析

    这篇文章主要介绍了C#中事件的继承,通过一个面向对象程序实例来说明子类调用父类事件的实现方法,需要的朋友可以参考下
    2014-08-08
  • C#字典Dictionary的用法说明(注重性能版)

    C#字典Dictionary的用法说明(注重性能版)

    这篇文章主要介绍了C#字典Dictionary的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • c# wpf使用GMap.NET类库,实现地图轨迹回放

    c# wpf使用GMap.NET类库,实现地图轨迹回放

    这篇文章主要介绍了c# wpf使用GMap.NET类库,实现地图轨迹回放的方法,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • unity使用射线实现贴花系统

    unity使用射线实现贴花系统

    这篇文章主要为大家详细介绍了unity使用射线实现贴花系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C#结合JS解决Word添加无效位图导致进程停滞的问题

    C#结合JS解决Word添加无效位图导致进程停滞的问题

    这篇文章主要为大家详细介绍了C#如何结合JS解决Word添加无效位图导致进程停滞的问题,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • C#实现单例模式的6种方法小结

    C#实现单例模式的6种方法小结

    这篇文章主要介绍了C#实现单例模式的6种方法,C#中实现单例有很多种方法,本文将按顺序介绍非线程安全、完全懒汉式、线程安全和低/高性能集中版本,需要的朋友可以参考下
    2022-09-09
  • C#中的匿名函数、lambda表达式解读

    C#中的匿名函数、lambda表达式解读

    这篇文章主要介绍了C#中的匿名函数、lambda表达式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • C#使用Pipelines实现处理Socket数据包

    C#使用Pipelines实现处理Socket数据包

    这篇文章主要为大家详细介绍了C#如何使用Pipelines实现处理Socket数据包,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C#如何在自定义事件里传递自定义数据

    C#如何在自定义事件里传递自定义数据

    相信很多小伙伴都知道传值的一些方式,比如构造方法传值,属性传值等,这篇文章主要来给大家分享的另一种方式,通过自定义事件来传值,感兴趣的可以了解下
    2024-12-12

最新评论