/// <summary> /// Render a plum colored circle at pre-render tick label time /// </summary> /// <param name="sender">KnobControl</param> /// <param name="e">PreRenderEventArgs</param> private void PreRenderTickLabel(object sender, PreRenderEventArgs e) { KnobControl kc = sender as KnobControl; if (kc != null) { // Locate where the current "value label" is located, // and then render our circle accordingly Point pt = GetLabelPoint(kc, e); e.Graphics.FillEllipse(Brushes.Plum, new Rectangle(pt.X, pt.Y, 20, 20)); } }
/// <summary> /// Returns tick label point /// </summary> /// <returns>Upper left tick label rect of the control</returns> private Point GetLabelPoint(KnobControl kc, PreRenderEventArgs e) { decimal count = kc.MaxValue - kc.MinValue; double rad = GetRadians( (float)((kc.SweepAngle * kc.Value) / count + kc.StartAngle)); int x = e.Bounds.X + e.Bounds.Width / 2; int dx = e.Bounds.Width / 2; Point pt = new Point(); pt.X = (int)(Math.Cos(rad) * dx + x - 10); pt.Y = (int)(Math.Sin(rad) * dx + x - 10); return(pt); }