VS2017中GDI+绘图轻松入门(2)

37 篇文章 15 订阅

上一篇,我们利用窗体的Paint事件中的参数实例化了一个Graphic,在这个基础上完成了绘图,这个绘图是窗体的事件,所绘的图也就限定在窗体上了。这个和在窗体内重载Paint事件绘图基本效果基本一样。我们来看看具体的代码实对应的函数。

一、对应的函数 onPaint

控件的绘图和窗体的绘图所对应的函数名不一样,窗体的叫做Paint,而控件的叫做OnPaint,而且是重载的函数。

namespace formDraw
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            //这里放弃不用,我们重载OnPaint效果是一样的
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.DrawRectangle(new Pen(Color.Green), new Rectangle(Width / 4, Height / 4, Width / 2, Height / 2));
        }
    }
}

如果我们想绘制在其他的控件上面,比如一个Button上,那么我们就不能借助于上面的方法了。我们要开启一种新思路,那就是利用CreateGraphics()来直接实例话一个Graphic对象。

二、准备按钮

建一个窗体并拖放一个按钮在窗体上,如下图所示:
在这里插入图片描述

三、代码实现

我们准备在窗体加载的时候来实现绘图,那么我们在双击窗体进入Form_Click事件,或者在form的事件中直接激活Click事件,代码如下:

 private void Form1_Click(object sender, EventArgs e)
        {
            Graphics gb = this.button1.CreateGraphics();
            gb.DrawRectangle(new Pen(Color.Black), new Rectangle(button1.Width / 4-2, button1.Height / 4-2, button1.Width / 2+3, button1.Height / 2+3));
            gb.FillRectangle(new SolidBrush(Color.Blue), new Rectangle(button1.Width / 4, button1.Height / 4, button1.Width / 2, button1.Height / 2));
        }

点击窗体,运行效果如下:
在这里插入图片描述
从代码和运行效果我们可以看出,这个基本和Paint事件中利用参数实例化出来的Graphic对象绘图没有任何差别。但值得注意的是,这个图形在窗体重绘的时候会被窗体的绘图事件给覆盖,所以要真正使我们的绘图能够随窗体更新,还是要放在重绘事件中去。

感兴趣的童鞋可以继续关注
VS2017中GDI+绘图轻松入门(3)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河西石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值