Und zwar habe ich einen Code um einen Button zu zeichnen.
Dieser Button wird mithilfe von insgesamt 9 Bitmaps gezeichnet.
3 Bitmaps setzen den Button zusammen und es gibt 3 Zustände (Clicked, Normal und Hover).
Ich weiß, dass es prinzipiell schlecht ist Controls per Bitmaps zu zeichnen und man
eher nur per GDI ohne Bitmaps zeichnen sollte. Dennoch
wollte ich mal fragen, was man an dem folgenden Code noch verbessern könnte.
Es wäre sehr nett, wenn ihr wirklich alles nennen könntet, was man besser machen könnte
an diesem Code (außer den Einwurf, den Button ohne Bitmaps zu zeichnen).
Danke im Voraus.
Dieser Button wird mithilfe von insgesamt 9 Bitmaps gezeichnet.
3 Bitmaps setzen den Button zusammen und es gibt 3 Zustände (Clicked, Normal und Hover).
Ich weiß, dass es prinzipiell schlecht ist Controls per Bitmaps zu zeichnen und man
eher nur per GDI ohne Bitmaps zeichnen sollte. Dennoch
wollte ich mal fragen, was man an dem folgenden Code noch verbessern könnte.
Es wäre sehr nett, wenn ihr wirklich alles nennen könntet, was man besser machen könnte
an diesem Code (außer den Einwurf, den Button ohne Bitmaps zu zeichnen).
Danke im Voraus.
C#-Quellcode
- [DefaultEvent("Click")] public class FakeMacButton : Control
- {
- private State CurrSt = State.Normal;
- private struct ButtonState
- {
- public readonly Bitmap Li,Mi,Ri;
- public ButtonState(Bitmap left, Bitmap middle, Bitmap right)
- {
- this.Li = left;
- this.Mi = middle;
- this.Ri = right;
- }
- }
- private ButtonState[] buttonStates =
- {
- new ButtonState(MangoETheme.Properties.Resources.MacBtnLeft, MangoETheme.Properties.Resources.MacBtnMiddle, MangoETheme.Properties.Resources.MacBtnRight),
- new ButtonState(MangoETheme.Properties.Resources.MacBtnLeftEntered, MangoETheme.Properties.Resources.MacBtnMiddleEntered, MangoETheme.Properties.Resources.MacBtnRightEntered),
- new ButtonState(MangoETheme.Properties.Resources.MacBtnLeftPressed, MangoETheme.Properties.Resources.MacBtnMiddlePressed, MangoETheme.Properties.Resources.MacBtnRightPressed)
- };
- public enum State : short
- {
- Normal = 0,
- Entered = 1,
- Down = 2
- }
- public FakeMacButton()
- {
- this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor, true);
- this.UpdateStyles();
- this.MinimumSize = new Size(53, 20);
- }
- public void Redraw(Graphics gr)
- {
- ButtonState buttonState = buttonStates[(int) CurrSt];
- gr.DrawImage(buttonState.Li, 0, 0, buttonState.Li.Width, this.Height);
- for (int i = buttonState.Li.Width; i <= this.Width - buttonState.Ri.Width - 1; i++) {
- gr.DrawImage(buttonState.Mi, i, 0, buttonState.Mi.Width, this.Height);
- }
- gr.DrawImage(buttonState.Ri, this.Width - buttonState.Ri.Width, 0, buttonState.Ri.Width, this.Height);
- SizeF textSize = this.CreateGraphics().MeasureString(Text, Font, Width - 4);
- StringFormat sf = new StringFormat() {LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center};
- gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
- gr.DrawString(Text, Font, Brushes.Black, new RectangleF(2, 2, this.Width - 5, this.Height - 4), sf);
- }
- protected override void OnTextChanged(EventArgs e)
- {
- base.OnTextChanged(e);
- Invalidate();
- }
- public override Font Font
- {
- get {return base.Font;}
- set
- {
- if (base.Font.Equals(value)) return;
- base.Font = value;
- Invalidate();
- }
- }
- [Browsable(true), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
- public override Color ForeColor
- {
- get { return Color.Empty; }
- set {
- if (base.ForeColor.Equals(value)) return;
- base.ForeColor = value;
- Invalidate();
- }
- }
- protected override void OnMouseDown(MouseEventArgs mevent)
- {
- CurrSt = State.Down;
- this.Invalidate();
- base.OnMouseDown(mevent);
- }
- protected override void OnMouseEnter(EventArgs e)
- {
- CurrSt = State.Entered;
- this.Invalidate();
- base.OnMouseEnter(e);
- }
- protected override void OnLeave(EventArgs e)
- {
- CurrSt = State.Normal;
- this.Invalidate();
- base.OnLeave(e);
- }
- protected override void OnMouseLeave(EventArgs e)
- {
- CurrSt = State.Normal;
- this.Invalidate();
- base.OnMouseLeave(e);
- }
- protected override void OnMouseUp(MouseEventArgs mevent)
- {
- CurrSt = State.Entered;
- this.Invalidate();
- base.OnMouseUp(mevent);
- }
- protected override void OnPaint(PaintEventArgs pevent){Redraw(pevent.Graphics);}
- }
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Daniel Baumert“ ()