/// <summary> /// Draws the month header row. /// </summary> private void DrawMonthTitle(MonthInfo month, ref float topOffset) { // calcs the rect to draw the month title row SizeF monthTitleRowSize = CalendarData.GetMonthTitleRowSize(MonthAreaSize); RectangleF monthRowRect = new RectangleF( CalendarArea.X, CalendarArea.Y + topOffset, monthTitleRowSize.Width, monthTitleRowSize.Height); float borderWidth = CalendarData.MonthTitleBorderStyle.LineWidth.ToTwips() / 2; // get month name to draw string monthTitle = string.Format(CalendarData.Culture, CalendarData.FormatString(new DateTime(month.Year, month.Month, 1), CalendarData.MonthTitleFormat)); // fill the area using (BrushEx brush = Canvas.CreateSolidBrush(CalendarData.MonthTitleBackcolor)) Canvas.FillRectangle(brush, monthRowRect); // draw month title string var font = CalendarData.MonthTitleFontStyle.CreateFontInfo(); using (BrushEx brush = Canvas.CreateSolidBrush(CalendarData.MonthTitleFontStyle.FontColor)) { RectangleF titleRect = new RectangleF( monthRowRect.X + borderWidth, monthRowRect.Y + borderWidth, monthRowRect.Width - 2 * borderWidth, monthRowRect.Height - 2 * borderWidth); // HACK: we should consider the issue with drawing string later. the issue comes about in the designer when caledar has small width to fit titles. --SergeyP Canvas.PushState(); Canvas.DrawString(monthTitle, font, brush, titleRect, ToEx(CalendarData.MonthTitleStringFormat)); Canvas.PopState(); } // draw the borders using (PenEx pen = LineStyle.CreatePen(Canvas, CalendarData.MonthTitleBorderStyle)) { pen.Alignment = PenAlignment.Center; DrawRectangle(Canvas, pen, monthRowRect.X, monthRowRect.Y, monthRowRect.Width, monthRowRect.Height - borderWidth); // shift the bottom border to avoid overlapping } // set offset topOffset += monthTitleRowSize.Height; }