示例#1
0
        /// <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;
        }