• C# 背景与前景


    一 背景与前景

    背景:填充整个区域的、一般不变化的;

    OnPaintBackground();
    
    • 1

    安装官方的建议,背景的绘制应该和前景分开。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.CompilerServices;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    //using System.Drawing.Color;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    
    namespace 自定义控件
    {
        internal class selfControl:Control
        {
            public selfControl()
            {
                this.BackColor = Color.White;
                this.Size = new Size(100, 100);
            }
    
            protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
    
                Graphics g = e.Graphics;
                int w = this.Width, h = this.Height;
                Rectangle rect = new Rectangle(0, 0, w, h);
    
                //平滑绘制 反锯齿
                g.SmoothingMode = SmoothingMode.HighQuality;
    
                using (Brush brush = new SolidBrush(Color.LightSkyBlue))
                {
                    rect.Inflate(-40, -40);//往里缩小一点
                    Point[] points =
                        {
                    new Point(rect.Left,rect.Top),
                    new Point(rect.Right,rect.Top),
                    new Point(rect.Left+rect.Width/2,rect.Bottom)
                    };
                    g.FillPolygon(brush, points);
                }
            }
    
            protected override void OnPaintBackground(PaintEventArgs pevent)
            {
                base.OnPaintBackground(pevent);
    
                Graphics g = pevent.Graphics;
                int w = this.Width, h = this.Height;
                Rectangle rect = new Rectangle(0, 0, w, h);
    
                //渐变色
                Brush lgbrush = new LinearGradientBrush(
                    new Point(rect.Left, rect.Top),
                    new Point(rect.Right, rect.Bottom),
                    Color.FromArgb(255, 0, 0),
                    Color.FromArgb(255, 255, 255));
                using(lgbrush)
                {
                    g.FillRectangle(lgbrush, rect);
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    二 正弦曲线

    WinForm API支持的三种线条:
    ① 直线 DrawLine;
    ② 圆弧、椭圆弧DrawArc;
    ③ 贝赛尔曲线 DrawBezier;

    像正弦这种特殊的曲线,API并不支持。

    1 多段拟合法

    一条曲线可以看成由无数条极小线段连接二成,当线段足够短时,视觉上近似为一条曲线。

    二 曲线的设置

    演示:在界面上调整曲线的参数设置。
    NumericUpDown控件,用于数字微雕。

    1 实现

    ① 添加3个NumericUpDown控件,分别控制粒度、周期、振幅参数;
    ② 添加事件响应处理:一个回调方法,同时注册给三个控件;
    ③ 更新曲线的显示;

    三 要点与细节

    1 一个回调方法可以同时注册给多个控件;

    2 为了减轻重绘时的闪烁问题,可以使用“双缓冲”在自定义控件中,启用DoubleBuffer双缓冲特性;

    源代码
    曲线的设置.rar: https://url09.ctfile.com/f/22158009-727364279-442f9a?p=5939 (访问密码: 5999)

  • 相关阅读:
    k8s学习--资源控制器StatefulSet详细解释与应用
    Kafka学习笔记
    Android Studio——android项目运行main()函数
    linux系统Jenkins工具参数化构建
    python 脚本一键搭建socks5代理
    Blind Signature盲签名与fabric区块链结合的应用
    [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
    【如何使用vscode用户代码】
    来看看如何使用CLOUDFARE_实现网络聚合_利用安全的网络协议实现网络通讯---工具箱工作笔记002
    avalanche 少量tcp长连接持续构建HTTP请求测试
  • 原文地址:https://blog.csdn.net/weixin_42291376/article/details/127912841