C# 实现完整功能的截图控件(1)-实现绘图工具栏控件(转载)

本文介绍了如何使用C#实现一个完整的截图控件,特别是绘图工具栏DrawToolsControl的创建过程。控件包含了绘制矩形、椭圆、箭头、文字和线条等功能,并提供了撤销、保存等操作。文章详细阐述了控件的四个实现步骤:添加ToolStrip,设置按钮事件,重绘UserControl以及自定义ToolStripRenderer。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

之前写了一篇关于截图的文章(查看),只实现了简单的截图,接下的文章将介绍怎样一步步的实现一个完整的截图控件。这篇文章将介绍怎样实现绘图工具栏控件DrawToolsControl,先来了解一下这个工具栏控件包含些什么内容。因为只对截图实现添加一些简单的图形和文字绘制,所以只实现了添加矩形、椭圆、箭头、文字和线条,所以工具栏需要包含绘制矩形、椭圆、箭头、文字和线条按钮。因为还要实现撤销、保存截图等,所以工具栏还要添加撤销、保存、退出和保存当前图形的按钮。需要的按钮就这么多了,我们可以用ToolStrip来添加这些按钮,但是为了控件看起来更漂亮,需要对ToolStrip进行重绘,下面就具体怎样实现DrawToolsControl控件。

第一步:继承UserControl控件,在上面添加一个ToolStrip,然后添加前面所说的所有按钮,调整好UserControl控件的大小,让它刚好可以显示完整的ToolStrip

第二步:添加相应按钮的点击事件,具体就不一一列出了。

第三步:对UserControl进行重绘。先改变UserControlRegion,让它为圆角的样式,然后重绘背景和边框。

第四步:对ToolStrip进行重绘。这是比较重要的,绘制好的ToolStrip还可以在其他地方使用。对ToolStrip实现重绘,需要继承ToolStripRenderer类实现一个新的ToolStripRendererEx类,根据需要,对OnRenderToolStripBackgroundOnRenderButtonBackgroundOnRenderSeparator方法进行重写,然后把ToolStripRenderer属性设置为新的ToolStripRendererEx就行了。

来看看实现的关键代码:

1、  UserControl设置Region和绘制代码:

        protected override void OnPaint(PaintEventArgs e)

        {

            base.OnPaint(e);

 

            Graphics g = e.Graphics;

            g.SmoothingMode = SmoothingMode.AntiAlias;

 

            using (GraphicsPath path = GraphicsPathHelper.CreatePath(

               ClientRectangle, 8, RoundStyle.All, false))

            {

                using (SolidBrush brush = new SolidBrush(ColorTable.BackColorNormal))

                {

                    g.FillPath(brush, path);

                }

                using (Pen pen = new Pen(ColorTable.BorderColor))

                {

                    g.DrawPath(pen, path);

 

                    using (GraphicsPath innerPath = GraphicsPathHelper.CreatePath(

                        ClientRectangle, 8, RoundStyle.All, true))

                    {

                        g.DrawPath(pen, innerPath);

                    }

                }

            }

        }

 

        private void SetRegion()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值