五星红旗是由红色背景,加5个黄色五角星组成。绘制一个五星红旗的思路,就是先定义一个五角星的自定义控件,然后通过设置五角星的大小、位置、旋转角度等属性,组合成一个五星红旗。

五角星自定义控件代码:

public partial class MyStar : Control
{
public MyStar()
{
InitializeComponent();
} protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe); Graphics g = pe.Graphics;
PointF[] points = new PointF[]
{
new PointF(Center.X, Center.Y - Radius),
new PointF((float)(Center.X + Radius * Math.Sin( * Math.PI / )), (float)(Center.Y - Radius * Math.Cos( * Math.PI / ))),
new PointF((float)(Center.X + Radius * Math.Sin( * Math.PI / )), (float)(Center.Y + Radius * Math.Cos(* Math.PI / ))),
new PointF((float)(Center.X - Radius * Math.Sin( * Math.PI / )),(float)( Center.Y + Radius * Math.Cos( * Math.PI / ))), new PointF((float)(Center.X - Radius * Math.Sin( * Math.PI / )), (float)(Center.Y - Radius * Math.Cos( * Math.PI / ))),
}; GraphicsPath path = new GraphicsPath(FillMode.Winding);
path.AddLine(points[], points[]);
path.AddLine(points[], points[]);
path.AddLine(points[], points[]);
path.AddLine(points[], points[]);
path.AddLine(points[], points[]);
path.CloseFigure(); g.SmoothingMode = SmoothingMode.AntiAlias;
g.RotateTransform(Angle);
g.FillPath(new SolidBrush(ColorTranslator.FromHtml("#FFDF00")), path);
} /// <summary>
/// 中心点
/// </summary>
public Point Center { get; set; } /// <summary>
/// 半径
/// </summary>
public int Radius { get; set; } /// <summary>
/// 旋转角度
/// </summary>
public float Angle { get; set; }
}

如上的Center、Radius、Angle都是public类型暴露出来的公共属性,以便在初始化时动态的设置MyStar相关属性。

然后创建一个窗体(450*300),并拖动一个Panel容器。

在VS中编译后会在工具栏生成MyStar控件,我们在窗体的Load事件中动态的添加MyStar控件即可。

private void Form1_Load(object sender, EventArgs e)
{
this.panel1.BackColor = Color.Red; MyStar c1 = new MyStar();
c1.Angle = 0F;
c1.Location = new System.Drawing.Point(, );
c1.Size = new System.Drawing.Size(, );
c1.Center = new Point(, );
c1.Radius = ; MyStar c2 = new MyStar();
c2.Angle = 20F;
c2.Location = new System.Drawing.Point(, -);
c2.Size = new System.Drawing.Size(, );
c2.Center = new Point(, );
c2.Radius = ; MyStar c3 = new MyStar();
c3.Angle = -20F;
c3.Location = new System.Drawing.Point(, );
c3.Size = new System.Drawing.Size(, );
c3.Center = new Point(, );
c3.Radius = ; MyStar c4 = new MyStar();
c4.Angle = 0F;
c4.Location = new System.Drawing.Point(, );
c4.Size = new System.Drawing.Size(, );
c4.Center = new Point(, );
c4.Radius = ; MyStar c5 = new MyStar();
c5.Angle = 20F;
c5.Location = new System.Drawing.Point(, );
c5.Size = new System.Drawing.Size(, );
c5.Center = new Point(, );
c5.Radius = ; this.panel1.Controls.Add(c1);
this.panel1.Controls.Add(c2);
this.panel1.Controls.Add(c3);
this.panel1.Controls.Add(c4);
this.panel1.Controls.Add(c5); this.panel1.Click += (ss, ee) => { this.Close(); };
}

效果图:

GDI+绘制五星红旗的更多相关文章

  1. 通过GDI+绘制 验证码

    只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 using System; using System.Collections.Generic; using Syste ...

  2. Html5 绘制五星红旗

    Html5+JavaScript 在Canvas上绘制五星红旗,具体思路如下图所示: 绘制思路在上图中已有说明,具体代码如下: <script type="text/javascrip ...

  3. C#利用GDI+绘制旋转文字等效果

    C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...

  4. C# 使用GDI+绘制漂亮的MenuStrip和ContextMenuStrip皮肤

    通过上面的效果截图可以看到,重绘后的MenuStrip和ContextMenuStrip可以添加自己的LOGO信息,实现了类似OFFICE2007的菜单显示效果. .NET对菜单控件的绘制提供了一个抽 ...

  5. HTML5 canvas 绘制五星红旗

    这个例子并不是自己写的,在网上找的案列,仿照写的,,,自己真的公布董这些算法,看完这个例子还是有一点模糊,,, 如果谁看的比较明白,指点一下,,,多谢!!!! <!doctype html> ...

  6. MFC 用gdi绘制填充多边形区域

    MFC 用gdi绘制填充多边形区域 这里的代码是实现一个三角形的绘制,并用刷子填充颜色 在OnPaint()函数里面 运用的是给定的三角形的三个点,很多个点可以绘制多边形 CBrush br(RGB( ...

  7. GDI绘制时钟效果,与系统时间保持同步,基于Winform

    2018年工作之余,想起来捡起GDI方面的技术,特意在RichCodeBox项目中做了两个示例程序,其中一个就是时钟效果,纯C#开发.这个CSharpQuartz是今天上午抽出一些时间,编写的,算是偷 ...

  8. 『备注』GDI+ 绘制文本有锯齿,透明背景文本绘制

    背景: GDI+ 绘制文本 时,如果 背景是透明的 —— 则会出现 锯齿. //其实,我不用这三个 属性 好多年了 //而且,这三个属性 在关键时刻还有可能 帮倒忙 //关键是:这三个属性,鸟用都没有 ...

  9. C#GDI+ 绘制线段(实线或虚线)、矩形、字符串、圆、椭圆

    C#GDI+ 绘制线段(实线或虚线).矩形.字符串.圆.椭圆 绘制基本线条和图形 比较简单,直接看代码. Graphics graphics = e.Graphics; //绘制实线 )) { pen ...

随机推荐

  1. Javascript:自己写模板引擎

    背景 因为JS没有提供“字符串插入”和“多行字符串”特性,传统的拼凑字符串容易出错.性能不高和不容易理解代码,为了应对这些问题,很多个人和团队开发了模板引擎,现在主流的JS框架几乎都提供此类功能了. ...

  2. 如何用C#动态编译、执行代码

    在开始之前,先熟悉几个类及部分属性.方法:CSharpCodeProvider.ICodeCompiler.CompilerParameters.CompilerResults.Assembly. 一 ...

  3. art.template 循环里面分组。

    后台提供给我们一个数组,我们要用模版实现上面的格式输出怎么版呢? 下面就是解决方案: <h2>循环4个一组</h2> <script type="text/ht ...

  4. [Java] LinkedHashMap 源码简要分析

    特点 * 各个元素不仅仅按照HashMap的结构存储,而且每个元素包含了before/after指针,通过一个头元素header,形成一个双向循环链表.使用循环链表,保存了元素插入的顺序. * 可设置 ...

  5. 问题解决java.lang.IllegalArgumentException at org.springframework.asm.ClassReader

    手上拿到一个老的项目,使用的是spring3.2,启动的时候报错了: 查了一下,发现spring3.2不兼容jdk8,只能使用jdk8以下的版本,使用jdk6可以启动,但是maven构建的时候又提示不 ...

  6. 【Zookeeper】源码分析之服务器(二)之ZooKeeperServer

    一.前言 前面阐述了服务器的总体框架,下面来分析服务器的所有父类ZooKeeperServer. 二.ZooKeeperServer源码分析 2.1 类的继承关系 public class ZooKe ...

  7. V-rep学习笔记:机器人路径规划2

    路径规划问题是机器人学研究的一个重要领域,它是指给定操作环境以及起始和目标的位置姿态,要求选择一条从起始点到目标点的路径,使运动物体(移动机器人或机械臂)能安全.无碰撞地通过所有的障碍物而达到目标位置 ...

  8. Mongodb对集合(表)和数据的CRUD操作

    一.集合(对应数据库的表) 1.查看当前库里的所有集合 show collections 2.新建集合 显式创建 db.createCollection("user") 隐式创建 ...

  9. 创建py模板

    创建模板之后,每次新建py文件,已初始定义的代码段将会自动出现在py文件中.

  10. 基于ubuntu搭建 WordPress 个人博客

    系统要求:Ubuntu 16.04.1 LTS 64 位操作系统 准备 LAMP 环境:(LAMP 是 Linux.Apache.MySQL 和 PHP 的缩写,是 Wordpress 系统依赖的基础 ...