2023年12月2日发(作者:)

c#模拟看板控件_C#实现完整功能的截图控件(1)-实现绘图工具栏控件之前写了一篇关于截图的文章(查看),只实现了简单的截图,接下的文章将介绍怎样一步步的实现一个完整的截图控件。这篇文章将介绍怎样实现绘图工具栏控件DrawToolsControl,先来了解一下这个工具栏控件包含些什么内容。因为只对截图实现添加一些简单的图形和文字绘制,所以只实现了添加矩形、椭圆、箭头、文字和线条,所以工具栏需要包含绘制矩形、椭圆、箭头、文字和线条按钮。因为还要实现撤销、保存截图等,所以工具栏还要添加撤销、保存、退出和保存当前图形的按钮。需要的按钮就这么多了,我们可以用ToolStrip来添加这些按钮,但是为了控件看起来更漂亮,需要对ToolStrip进行重绘,下面就具体怎样实现DrawToolsControl控件。第一步:继承UserControl控件,在上面添加一个ToolStrip,然后添加前面所说的所有按钮,调整好UserControl控件的大小,让它刚好可以显示完整的ToolStrip。第二步:添加相应按钮的点击事件,具体就不一一列出了。第三步:对UserControl进行重绘。先改变UserControl的Region,让它为圆角的样式,然后重绘背景和边框。第四步:对ToolStrip进行重绘。这是比较重要的,绘制好的ToolStrip还可以在其他地方使用。对ToolStrip实现重绘,需要继承ToolStripRenderer类实现一个新的ToolStripRendererEx类,根据需要,对OnRenderToolStripBackground、OnRenderButtonBackground和OnRenderSeparator方法进行重写,然后把ToolStrip的Renderer属性设置为新的ToolStripRendererEx就行了。来看看实现的关键代码:1、UserControl设置Region和绘制代码:protectedoverride void OnPaint(PaintEventArgs e){t(e);Graphics g = cs;ingMode = ias;using (GraphicsPath path = Path(ClientRectangle, 8, , false)){using (SolidBrush brush = new SolidBrush(lorNormal)){th(brush, path);}using (Pen pen = new Pen(Color)){th(pen, path);using (GraphicsPath innerPath = Path(ClientRectangle, 8, , true)){th(pen, innerPath);}}}}private void SetRegion(){using (GraphicsPath path = Path(ClientRectangle, 8, , false)){if ( != null){e();} = new Region(path);}}2、ToolStripRendererEx重绘代码:protectedoverride void OnRenderToolStripBackground(ToolStripRenderEventArgs e){Graphics g = cs;ingMode = ias;LinearGradientMode mode =ation == ntal ?al : ntal;RenderBackgroundInternal(g,edBounds,lorHover,Color,lorNormal,,false,true,mode);}protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e){ToolStripButton item = as ToolStripButton;if (item != null){LinearGradientMode mode =ation == ntal ?al : ntal;Graphics g = cs;ingMode = ias;Rectangle bounds = new Rectangle(, );if (oundImage != null){Rectangle clipRect = ed ? tRectangle : bounds;ckgroundImage(g,oundImage,lorNormal,oundImageLayout,bounds,clipRect);}if (tate == ked){if (ed){Color color = lorHover;if (d){color = lorPressed;}RenderBackgroundInternal(g,bounds,color,Color,lorNormal,,true,true,mode);return;}else{if (rip is ToolStripOverflow){using (Brush brush = new SolidBrush(lorNormal)){ctangle(brush, bounds);}return;}}}else{Color color = (lorHover);if (ed){color = lorHover;}if (d){color = lorPressed;}RenderBackgroundInternal(cs,bounds,color,Color,lorNormal,,true,true,mode);return;}}erButtonBackground(e);}protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e){Rectangle rect = tRectangle;if (rip is ToolStripDropDown){if (oLeft == ){//rect.X -= OffsetMargin + 4;}else{rect.X += OffsetMargin + 4;} -= OffsetMargin + 8;}RenderSeparatorLine(cs,rect,lorPressed,lorNormal,lLightLight,al);}单独的源码就先不传上来提供下载了,等整个项目写好后一起提供吧,看看DrawToolsControl的效果:声明:本文版权归作者和CS程序员之窗所有,欢迎转载,转载必须保留以下版权信息,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。作者:Starts_2000你可以免费使用或修改提供的源代码,但请保留源代码中的版权信息,详情请查看: