/// <summary> /// Draws a box of text /// </summary> /// <param name="e"></param> private void DrawBox(MonthViewBoxEventArgs e) { if (!e.BackgroundColour.IsEmpty) { using (SolidBrush b = new SolidBrush(e.BackgroundColour)) { e.Graphics.FillRectangle(b, e.Bounds); } } if (!e.TextColour.IsEmpty && !string.IsNullOrEmpty(e.Text)) { TextRenderer.DrawText(e.Graphics, e.Text, e.Font != null ? e.Font : Font, e.Bounds, e.TextColour, e.TextFlags); } if (!e.BorderColour.IsEmpty) { using (Pen p = new Pen(e.BorderColour)) { Rectangle r = e.Bounds; r.Width--; r.Height--; e.Graphics.DrawRectangle(p, r); } } }
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.Clear(SystemColors.Window); for (int i = 0; i < Months.Length; i++) { if (Months[i].Bounds.IntersectsWith(e.ClipRectangle)) { #region MonthTitle string title = Months[i].Date.ToString(MonthTitleFormat); MonthViewBoxEventArgs evtTitle = new MonthViewBoxEventArgs(e.Graphics, Months[i].MonthNameBounds, title, Focused ? MonthTitleTextColour : MonthTitleTextColourInactive, Focused ? MonthTitleColour : MonthTitleColourInactive); DrawBox(evtTitle); #endregion #region DayNames for (int j = 0; j < Months[i].DayNamesBounds.Length; j++) { MonthViewBoxEventArgs evtDay = new MonthViewBoxEventArgs(e.Graphics, Months[i].DayNamesBounds[j], Months[i].DayHeaders[j], StringAlignment.Far, ForeColor, DayBackgroundColour); DrawBox(evtDay); } if (Months[i].DayNamesBounds != null && Months[i].DayNamesBounds.Length != 0) { using (Pen p = new Pen(MonthTitleColour)) { int y = Months[i].DayNamesBounds[0].Bottom; e.Graphics.DrawLine(p, new Point(Months[i].Bounds.X, y), new Point(Months[i].Bounds.Right, y)); } } #endregion #region Days foreach (MonthViewDay day in Months[i].Days) { if (!day.Visible) { continue; } MonthViewBoxEventArgs evtDay = new MonthViewBoxEventArgs(e.Graphics, day.Bounds, day.Date.Day.ToString(), StringAlignment.Far, day.Grayed ? DayGrayedText : (day.Selected ? DaySelectedTextColour : ForeColor), day.Selected ? DaySelectedBackgroundColour : DayBackgroundColour); if (day.Date.Equals(DateTime.Now.Date)) { evtDay.BorderColour = TodayBorderColour; } DrawBox(evtDay); } #endregion #region Arrows if (i == 0) { Rectangle r = BackwardButtonBounds; using (Brush b = new SolidBrush(BackwardButtonSelected ? ArrowsSelectedColour : ArrowsColour)) { e.Graphics.FillPolygon(b, new Point[] { new Point(r.Right, r.Top), new Point(r.Right, r.Bottom - 1), new Point(r.Left + r.Width / 2, r.Top + r.Height / 2), }); } } if (i == _forwardMonthIndex) { Rectangle r = ForwardButtonBounds; using (Brush b = new SolidBrush(ForwardButtonSelected ? ArrowsSelectedColour : ArrowsColour)) { e.Graphics.FillPolygon(b, new Point[] { new Point(r.X, r.Top), new Point(r.X, r.Bottom - 1), new Point(r.Left + r.Width / 2, r.Top + r.Height / 2), }); } } #endregion } } }