介绍单据状态图片显示,能够很美观的看到单据的状态,源码不是我写的 是网上下载的 只是时间久了 忘记哪位博主大神写的了 只是略作修改,系统能够正常使用。
这里粘贴系统用的代码,希望能帮助各位。
1 namespace RwxFramework.Library 2 { 3 ///4 /// 提供透明和旋转功能的基础控件 5 /// 6 public partial class CYBaseControl : Control 7 { 8 private float _iBorderThickness = 1f; 9 private float _iOpacity = 1f; 10 private Brush _brushBg = null; 11 private Pen _penFg = null; 12 13 public CYBaseControl() 14 { 15 this.SetStyle(ControlStyles.SupportsTransparentBackColor | 16 ControlStyles.Opaque, true); 17 this.BackColor = Color.Transparent; 18 BackgroundBrush = Brushes.Transparent; 19 ForegroundPen = Pens.Black; 20 this.TabStop = false; 21 } 22 23 #region Propertys 24 #region HideParent 25 [Browsable(false)] 26 [EditorBrowsable(EditorBrowsableState.Never)] 27 public override string Text 28 { 29 get { return base.Text; } 30 set { base.Text = value; } 31 } 32 33 [Browsable(false)] 34 [EditorBrowsable(EditorBrowsableState.Never)] 35 public override Image BackgroundImage 36 { 37 get { return base.BackgroundImage; } 38 set { base.BackgroundImage = value; } 39 } 40 41 [Browsable(false)] 42 [EditorBrowsable(EditorBrowsableState.Never)] 43 public override ImageLayout BackgroundImageLayout 44 { 45 get 46 { 47 return base.BackgroundImageLayout; 48 } 49 set 50 { 51 base.BackgroundImageLayout = value; 52 } 53 } 54 #endregion 55 56 public override Color BackColor 57 { 58 get 59 { 60 return base.BackColor; 61 } 62 set 63 { 64 base.BackColor = value; 65 ResetBgBrush(); 66 } 67 } 68 69 //[EditorAttribute(typeof(BrushTypeEditor), typeof(System.Drawing.Design.UITypeEditor))] 70 //public double Background 71 //{ 72 // get; 73 // set; 74 //} 75 76 public override Color ForeColor 77 { 78 get 79 { 80 return base.ForeColor; 81 } 82 set 83 { 84 base.ForeColor = value; 85 ResetFgPen(); 86 } 87 } 88 89 public float BorderThickness 90 { 91 get { return _iBorderThickness; } 92 set 93 { 94 if (value < 0) 95 { 96 throw new Exception("Out off range"); 97 } 98 _iBorderThickness = value; 99 ResetFgPen();100 ResetDrawRect();101 }102 }103 104 public virtual float RotateAngle105 {106 get;107 set;108 }109 110 111 public float Opacity112 {113 get { return _iOpacity; }114 set115 {116 if (value > 1 || value < 0)117 {118 throw new Exception("Out of range,the Value be in [0,1]");119 }120 else121 {122 _iOpacity = value;123 ResetBrushes();124 }125 }126 }127 128 protected override CreateParams CreateParams129 {130 get131 {132 CreateParams cp = base.CreateParams;133 cp.ExStyle = 0x20;134 return cp;135 }136 }137 138 protected virtual Brush BackgroundBrush139 {140 get { return _brushBg; }141 set { _brushBg = value; }142 }143 144 protected virtual Pen ForegroundPen145 {146 get { return _penFg; }147 set { _penFg = value; }148 }149 150 protected virtual RectangleF DrawRect151 {152 get;153 set;154 }155 #endregion156 157 #region Methods158 protected override void OnPaint(PaintEventArgs e)159 {160 base.OnPaint(e);161 e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;162 }163 164 protected override void OnSizeChanged(EventArgs e)165 {166 base.OnSizeChanged(e);167 ResetDrawRect();168 }169 protected override void OnPaddingChanged(EventArgs e)170 {171 base.OnPaddingChanged(e);172 ResetDrawRect();173 }174 175 protected void ResetBrushes()176 {177 ResetBgBrush();178 ResetFgPen();179 }180 181 protected void ResetBgBrush()182 {183 BackgroundBrush = new SolidBrush(GetOpacityColor(BackColor, Opacity));184 }185 186 protected void ResetFgPen()187 {188 ForegroundPen = new Pen(GetOpacityColor(ForeColor, Opacity), BorderThickness);189 }190 191 protected Color GetOpacityColor(Color baseColor, float op)192 {193 return Color.FromArgb(Convert.ToInt32(op * baseColor.A), baseColor);194 }195 196 private void ResetDrawRect()197 {198 float dbwidth = 2 * BorderThickness;199 float halfwidth = BorderThickness / 2;200 int paddingWhith = Padding.Left + Padding.Right;201 int paddingHeight = Padding.Top + Padding.Bottom;202 if (dbwidth > Width - paddingWhith || dbwidth > Height - paddingHeight)203 {204 DrawRect = this.Bounds;205 }206 else207 {208 DrawRect = new RectangleF(Padding.Left + halfwidth,209 Padding.Top + halfwidth,210 Width - BorderThickness - paddingWhith,211 Height - BorderThickness - paddingHeight);212 }213 }214 #endregion215 }216 }
1 namespace RwxFramework.Library 2 { 3 [ToolboxBitmap(typeof(OpacityImage), "Resources.PictureObject.png")] 4 public partial class OpacityImage : CYBaseControl 5 { 6 private Image _image = RwxFramework.Library.Properties.Resources.no; 7 private ImageFillMode _fillMode = ImageFillMode.Zoom; 8 9 public Image Image 10 { 11 get { return _image; } 12 set 13 { 14 if (value == null) 15 { 16 _image = RwxFramework.Library.Properties.Resources.no; 17 } 18 else 19 { 20 _image = value; 21 } 22 ResetPaintImage(); 23 } 24 } 25 public bool _isaudit = false; 26 public bool IsAudit 27 { 28 get { return _isaudit; } 29 set 30 { 31 _isaudit = value; 32 ShowImage(value); 33 } 34 } 35 36 37 public ImageFillMode FillMode 38 { 39 get { return _fillMode; } 40 set 41 { 42 _fillMode = value; 43 ResetPaintImage(); 44 } 45 } 46 47 protected override RectangleF DrawRect 48 { 49 get 50 { 51 return base.DrawRect; 52 } 53 set 54 { 55 base.DrawRect = value; 56 ResetPaintImage(); 57 } 58 } 59 60 protected Image PaintImage 61 { 62 get; 63 private set; 64 } 65 protected override void OnPaint(PaintEventArgs e) 66 { 67 base.OnPaint(e); 68 if (PaintImage != null) 69 { 70 e.Graphics.DrawImage(PaintImage, Point.Empty); 71 } 72 } 73 private void ResetPaintImage() 74 { 75 if (PaintImage != null) 76 { 77 PaintImage.Dispose(); 78 PaintImage = null; 79 } 80 if (_image != null && _image.Width > 0 && _image.Height > 0 && DrawRect.Width > 0 && DrawRect.Height > 0) 81 { 82 PaintImage = new Bitmap((int)DrawRect.Width, (int)DrawRect.Height); 83 using (Graphics g = Graphics.FromImage(PaintImage)) 84 { 85 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 86 g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 87 88 System.Drawing.Imaging.ImageAttributes ima = new System.Drawing.Imaging.ImageAttributes(); 89 ColorMatrix cm = new ColorMatrix(); 90 cm.Matrix33 = Opacity; 91 ima.SetColorMatrix(cm); 92 Point pt = Point.Empty; 93 switch (FillMode) 94 { 95 case ImageFillMode.Center: 96 pt = new Point((int)(DrawRect.Width - _image.Width) / 2, (int)(DrawRect.Height - _image.Height) / 2); 97 g.DrawImage(_image, new Rectangle(pt, _image.Size), 0, 0, _image.Width, _image.Height, GraphicsUnit.Pixel, ima); 98 break; 99 case ImageFillMode.Strength:100 g.DrawImage(_image, Rectangle.Round(DrawRect), 0, 0, _image.Width, _image.Height, GraphicsUnit.Pixel, ima);101 break;102 case ImageFillMode.Title:103 ima.SetWrapMode(System.Drawing.Drawing2D.WrapMode.Tile);104 TextureBrush brush = new TextureBrush(_image, new Rectangle(0, 0, _image.Width, _image.Height), ima);105 g.FillRectangle(brush, DrawRect);106 break;107 case ImageFillMode.Zoom:108 float IntWidth; //新的图片宽109 float IntHeight; //新的图片高 110 111 float TargetWidth = DrawRect.Width;112 float TargetHeight = DrawRect.Height;113 114 if (_image.Width > TargetWidth && _image.Height <= TargetHeight)//宽度比目的图片宽度大,长度比目的图片长度小115 {116 IntWidth = TargetWidth;117 IntHeight = (IntWidth * _image.Height) / _image.Width;118 }119 else if (_image.Width <= TargetWidth && _image.Height > TargetHeight)//宽度比目的图片宽度小,长度比目的图片长度大120 {121 IntHeight = TargetHeight;122 IntWidth = (IntHeight * _image.Width) / _image.Height;123 }124 else if (_image.Width <= TargetWidth && _image.Height <= TargetHeight) //长宽比目的图片长宽都小125 {126 IntHeight = _image.Width;127 IntWidth = _image.Height;128 }129 else//长宽比目的图片的长宽都大130 {131 IntWidth = TargetWidth;132 IntHeight = (IntWidth * _image.Height) / _image.Width;133 if (IntHeight > TargetHeight)//重新计算134 {135 IntHeight = TargetHeight;136 IntWidth = (IntHeight * _image.Width) / _image.Height;137 }138 }139 g.DrawImage(_image,140 (TargetWidth - IntWidth) / 2,141 (TargetHeight - IntHeight) / 2,142 IntWidth,143 IntHeight);144 break;145 } 146 g.Dispose();147 }148 }149 else150 {151 PaintImage = null;152 }153 }154 public void RefreshImage()155 {156 int width = base.Width;157 base.Width = width + 1;158 width = base.Width;159 base.Width = width - 1;160 }161 162 public void ShowImage(bool audit)163 {164 if (audit)165 {166 this.Image = RwxFramework.Library.Properties.Resources.Audit;167 }168 else169 {170 this.Image = RwxFramework.Library.Properties.Resources.no;171 }172 this.RefreshImage();173 }174 175 }176 177 public enum ImageFillMode178 {179 Zoom,180 Title,181 Strength,182 Center183 }184 }