五星红旗是由红色背景,加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. 机器学习中的规则化范数(L0, L1, L2, 核范数)

    目录: 一.L0,L1范数 二.L2范数 三.核范数 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的L0.L1.L2和核范数规则化.最后聊下规则化项参数的选择问 ...

  2. RMAN-05541: no archived logs found in target database

    执行 duplicate target databaseto orcl from active database nofilenamecheck报错如下: RMAN> duplicate tar ...

  3. windows下vbs脚本隐藏控制台

    每次想写python代码时,都需要打开IDE进行编写,并且需要创建许多小文件.如果使用jupyter就能够直接书写.但是jupyter需要手动通过控制台打开,这不够方便.通过把jupyter note ...

  4. PyCharm for Mac(Python 开发工具)破解版安装

    1.软件简介    PyCharm 是 macOS 系统上一款 Python 编辑利器,具有智能代码编辑器,能理解 Python 的特性并提供卓越的生产力推进工具:自动代码格式化.代码完成.重构.自动 ...

  5. fft ocean注解

    针对这两篇教程: http://www.keithlantz.net/2011/10/ocean-simulation-part-one-using-the-discrete-fourier-tran ...

  6. Android 网络知识必知必会

    目录: 网络分层 TCP 和 UDP 区别 TCP 三次握手以及为什么需要三次握手 UDP 四次挥手以及为什么需要四次挥手 socket 开发相关 Http 是什么 Https 是什么以及和 HTTP ...

  7. Linux之sort

    sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按AS ...

  8. linux每日命令(36):wc命令

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 一.命令格式 wc [-clw][--help][--version][文件... ...

  9. 树莓派2上手 —— Raspbian的一些基本配置问题

    先说点废话: 原来的笔记本因为上次被儿子拿着充电器玩的时候漏电烧了主板,修了之后还是时不时就突然宕机,Windows也完全起不来.后面这个问题倒是不大,真要用Windows的时候拿老婆的用一下就是了, ...

  10. Public key for ambari-server-2.4.2.0-136.x86_64.rpm is not installed 安装ambari报错总结

    提示;# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 就是导入这个安装包的key 可以使用http的协议 比如我用的就是 rpm ...