⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.cs

📁 monthcalendar最全的日历monthcalendar最全的日历monthcalendar最全的日历
💻 CS
📖 第 1 页 / 共 5 页
字号:
                else m_NextTopPos = 0;


            }
            else
                m_NextTopPos = 0;
        }



        private void DrawHeader(PaintEventArgs e)
        {
            if (m_HeaderStyle.Visible == true)
            {
                //first step: draw the background
                int iTextHeight = m_HeaderStyle.Font.Height;
                Rectangle myRectangle;

                myRectangle = new Rectangle(0, m_NextTopPos, this.Width, iTextHeight + 2 * m_HeaderStyle.Padding.Vertical);
                int iLeftPosPrevButton = 0;
                //repos navbuttons
                m_PreviousYearButton.SetBounds(m_HeaderStyle.Padding.Horizontal, m_NextTopPos + ((int)(myRectangle.Height - 18) / 2), 18, 18);
                if (m_ViewMode == ViewMode.vmMonth)
                {
                    if (m_PreviousYearButton.Visible != m_HeaderStyle.ShowNav) m_PreviousYearButton.Visible = m_HeaderStyle.ShowNav;
                    iLeftPosPrevButton = m_HeaderStyle.Padding.Horizontal + m_PreviousYearButton.Width + 1;
                }
                else
                {
                    if (m_PreviousYearButton.Visible != false) m_PreviousYearButton.Visible = false;
                    iLeftPosPrevButton = m_HeaderStyle.Padding.Horizontal;
                }

                m_PreviousButton.SetBounds(iLeftPosPrevButton, m_NextTopPos + ((int)(myRectangle.Height - 18) / 2), 18, 18);
                if (m_PreviousButton.Visible != m_HeaderStyle.ShowNav) m_PreviousButton.Visible = m_HeaderStyle.ShowNav;

                int iLeftPosNextButton = 0;
                m_NextYearButton.SetBounds(this.Width - m_NextYearButton.Width -
                                           m_HeaderStyle.Padding.Horizontal,
                                           m_NextTopPos + ((int)(myRectangle.Height - 18) / 2), 18, 18);
                if (m_ViewMode == ViewMode.vmMonth)
                {
                    if (m_NextYearButton.Visible != m_HeaderStyle.ShowNav) m_NextYearButton.Visible = m_HeaderStyle.ShowNav;
                    iLeftPosNextButton = this.Width - m_NextButton.Width - m_HeaderStyle.Padding.Horizontal -
                                         m_NextYearButton.Width - 1;
                }
                else
                {
                    if (m_NextYearButton.Visible != false) m_NextYearButton.Visible = false;
                    iLeftPosNextButton = this.Width - m_NextYearButton.Width - m_HeaderStyle.Padding.Horizontal;
                }

                string sTitleText = "";
                switch (m_ViewMode)
                {
                    case ViewMode.vmMonth:
                        sTitleText = m_SelectedDate.ToString("MMMM yyyy"); ;
                        break;
                    case ViewMode.vmYear:
                        sTitleText = m_SelectedDate.ToString("yyyy");
                        break;
                    case ViewMode.vm12Years:
                        sTitleText = m_Start12YearsRange.ToString() + "-" + m_End12YearsRange.ToString();
                        break;
                    case ViewMode.vm120Years:
                        sTitleText = m_Start120YearsRange.ToString() + "-" + ((int)m_End120YearsRange + 9).ToString();
                        break;
                }

                //draw header through user (ownerdraw)
                HeaderRenderEventArgs myHeaderRenderEvent = new HeaderRenderEventArgs(e.Graphics, myRectangle,
                                                                                      sTitleText);
                if (HeaderRender != null) HeaderRender(this, myHeaderRenderEvent);

                if (myHeaderRenderEvent.OwnerDraw == false)
                {
                    m_NextButton.SetBounds(iLeftPosNextButton,
                                               m_NextTopPos + ((int)(myRectangle.Height - 18) / 2), 18, 18);
                    if (m_NextButton.Visible != m_HeaderStyle.ShowNav) m_NextButton.Visible = m_HeaderStyle.ShowNav;


                    if (m_HeaderStyle.Background.Style == EStyle.esColor)
                    {
                        //fill rectangle with the first backgroundcolor;
                        Brush myBrush = new SolidBrush(Color.FromArgb(m_HeaderStyle.Background.TransparencyStartColor,
                                                      m_HeaderStyle.Background.StartColor.R,
                                                      m_HeaderStyle.Background.StartColor.G,
                                                      m_HeaderStyle.Background.StartColor.B));
                        e.Graphics.FillRectangle(myBrush, myRectangle);
                    }
                    else if (m_HeaderStyle.Background.Style == EStyle.esParent)
                    {
                        //fill rectangle with the first backgroundcolor;
                        Brush myBrush = new SolidBrush(this.BackColor);
                        e.Graphics.FillRectangle(myBrush, myRectangle);
                    }
                    else if (m_HeaderStyle.Background.Style == EStyle.esGradient)
                    {
                        LinearGradientMode myMode;
                        if (m_HeaderStyle.Background.Gradient == GradientStyle.Vertical)
                            myMode = LinearGradientMode.Vertical;
                        else if (m_HeaderStyle.Background.Gradient == GradientStyle.Horizontal)
                            myMode = LinearGradientMode.Horizontal;
                        else if (m_HeaderStyle.Background.Gradient == GradientStyle.ForwardDiagonal)
                            myMode = LinearGradientMode.ForwardDiagonal;
                        else
                            myMode = LinearGradientMode.BackwardDiagonal;

                        Color Color1 = Color.FromArgb(m_HeaderStyle.Background.TransparencyStartColor,
                                                      m_HeaderStyle.Background.StartColor.R,
                                                      m_HeaderStyle.Background.StartColor.G,
                                                      m_HeaderStyle.Background.StartColor.B);
                        Color Color2 = Color.FromArgb(m_HeaderStyle.Background.TransparencyEndColor,
                                                      m_HeaderStyle.Background.EndColor.R,
                                                      m_HeaderStyle.Background.EndColor.G,
                                                      m_HeaderStyle.Background.EndColor.B);
                        LinearGradientBrush myGBrush = new LinearGradientBrush(myRectangle, Color1, Color2, myMode);
                        e.Graphics.FillRectangle(myGBrush, myRectangle);
                    }
                    //step two: draw the text (monthname and year


                    SizeF myTextDimension = e.Graphics.MeasureString(sTitleText, m_HeaderStyle.Font);

                    StringFormat myStringFormat = new StringFormat();
                    switch (m_HeaderStyle.Align)
                    {
                        case HeaderAlign.Left:
                            myStringFormat.Alignment = StringAlignment.Near;
                            break;
                        case HeaderAlign.Center:
                            myStringFormat.Alignment = StringAlignment.Center;
                            break;
                        case HeaderAlign.Right:
                            myStringFormat.Alignment = StringAlignment.Far;
                            break;
                    }

                    int iLeftOffset = (int)(this.Width - (int)myTextDimension.Width) / 2;
                    Rectangle myTextRect = new Rectangle(33, m_NextTopPos + m_HeaderStyle.Padding.Vertical, this.Width - 66,
                                                         m_HeaderStyle.Font.Height);
                    m_TitlebarHeight = myRectangle.Height;// (int)myTextDimension.Height + 2 * this.m_TitlebarOffset;
                    //save titletextpos for using with mousedown event
                    m_TitleTextLeftStartPos = iLeftOffset;
                    m_TitleTextWidth = (int)myTextDimension.Width;
                    m_TitleTextTopStartPos = m_NextTopPos + m_HeaderStyle.Padding.Vertical;
                    m_TitleTextHeight = m_HeaderStyle.Font.Height;
                    //draw text
                    if (m_bMOuseHoverHeader == false)
                    {
                        e.Graphics.DrawString(sTitleText, m_HeaderStyle.Font, new SolidBrush(Color.FromArgb(m_HeaderStyle.TextTransparency,
                                              m_HeaderStyle.ForeColor)), myTextRect, myStringFormat);
                    }
                    else
                    {
                        e.Graphics.DrawString(sTitleText, m_HeaderStyle.Font, new SolidBrush(Color.FromArgb(m_HeaderStyle.TextTransparency,
                          m_HeaderStyle.HoverColor)), myTextRect, myStringFormat);

                    }
                    //draw border
                    if (m_HeaderStyle.Border.Visible == true)
                    {
                        //border on titlebar bottom
                        e.Graphics.DrawLine(new Pen(Color.FromArgb(255, m_HeaderStyle.Border.BorderColor)),
                                            myRectangle.Left, myRectangle.Bottom, myRectangle.Width, myRectangle.Bottom);
                    }                    
                }
                m_NextTopPos += (myRectangle.Height + 1);
            }
            else
            {
                //titlebar is hidden
                if (m_PreviousButton.Visible != false) m_PreviousButton.Visible = false;
                if (m_PreviousYearButton.Visible != false) m_PreviousYearButton.Visible = false;
                if (m_NextButton.Visible != false) m_NextButton.Visible = false;
                if (m_NextYearButton.Visible != false) m_NextYearButton.Visible = false;
                m_TitlebarHeight = 0;
            }
        }

        private void DrawWeekNumbers(PaintEventArgs e)
        {
            if (m_WeekNumbers.Visible == true)
            {
                //draw weeknumbers                
                m_DrawedMonthDayHeight = 0;
                m_DrawedMonthDayTopStartPos = 0;
                //m_NextTopPos
                m_WeekDayHeight = GetMonthDayHeight();
                m_FirstWeekNumber = GetFirstWeekNumber(0);
                //befor we can draw the weeknumbers we will draw the weeknumbersbackground
                Rectangle myPaintRect = new Rectangle(0, m_NextTopPos, GetWeekNumbersWidth(),
                                                      GetMonthDaysHeight());
                //ownerdraw
                WeekNumbersBackgroundRenderEventArgs myEventArgs = new WeekNumbersBackgroundRenderEventArgs(
                                                                        e.Graphics, myPaintRect);
                if (WeekNumbersBackgroundRender != null) WeekNumbersBackgroundRender(this, myEventArgs);
                if (myEventArgs.OwnerDraw == false)
                {
                    if (m_WeekNumbers.Background.Style == EStyle.esColor)
                    {
                        SolidBrush myBrush = new SolidBrush(Color.FromArgb(m_WeekNumbers.Background.TransparencyStartColor,
                                                            m_WeekNumbers.Background.StartColor.R,
                                                            m_WeekNumbers.Background.StartColor.G,
                                                            m_WeekNumbers.Background.StartColor.B));
                        e.Graphics.FillRectangle(myBrush, myPaintRect);
                    }
                    else if (m_WeekNumbers.Background.Style == EStyle.esParent)
                    {
                        SolidBrush myBrush = new SolidBrush(Color.FromArgb(this.BackColor.R,
                                                            this.BackColor.G, this.BackColor.B));
                        e.Graphics.FillRectangle(myBrush, myPaintRect);
                    } if (m_WeekNumbers.Background.Style == EStyle.esGradient)
                    {
                        LinearGradientMode myMode;
                        if (m_WeekNumbers.Background.Gradient == GradientStyle.Vertical)
                            myMode = LinearGradientMode.Vertical;
                        else if (m_WeekNumbers.Background.Gradient == GradientStyle.Horizontal)
                            myMode = LinearGradientMode.Horizontal;
                        else if (m_WeekNumbers.Background.Gradient == GradientStyle.ForwardDiagonal)
                            myMode = LinearGradientMode.ForwardDiagonal;
                        else
                            myMode = LinearGradientMode.BackwardDiagonal;

                        Color StartColor = Color.FromArgb(m_WeekNumbers.Background.TransparencyStartColor,
                                                          m_WeekNumbers.Background.StartColor.R,
                                                          m_WeekNumbers.Background.StartColor.G,
                                                          m_WeekNumbers.Background.StartColor.B);
                        Color EndColor = Color.FromArgb(m_WeekNumbers.Background.TransparencyEndColor,
                                                        m_WeekNumbers.Background.EndColor.R,
                                                        m_WeekNumbers.Background.EndColor.G,
                                                        m_WeekNumbers.Background.EndColor.B);
                        LinearGradientBrush myGBrush = new LinearGradientBrush(myPaintRect, StartColor, EndColor, myMode);
                        e.Graphics.FillRectangle(myGBrush, myPaintRect);
                    }
                }
                //draw weeknumbers
                for (int iWeekNumbersCount = 0; iWeekNumbersCount < 6; iWeekNumbersCount++)
                {
                    //draw each weeknumber
                    DrawWeekNumber(e.Graphics, iWeekNumbersCount);
                }

                //draw border
                if (m_WeekNumbers.Border.Visible == true)
                {
                    int iRightPos = GetWeekNumbersWidth() - 1;
                    e.Graphics.DrawLine(new Pen(Color.FromArgb(m_WeekNumbers.Border.Transparency, 
                                        m_WeekNumbers.Border.BorderColor)),
                                        iRightPos, m_DrawedMonthDayTopStartPos,
                                        iRightPos, m_DrawedMonthDayHeight + m_DrawedMonthDayTopStartPos +
                                        m_MonthDaysStyle.DaysPadding.Vertical);
                }
            }           
        }

        private void DrawWeekNumber(Graphics e, int Index)
        {
            int iPaddingOffset = (Index * m_MonthDaysStyle.DaysPadding.Vertical) +
                                  m_MonthDaysStyle.DaysPadding.Vertical;
            //get offset to fill out the space between the full monthdayheights and controlheight
            int iTopHeightOffset = 0;
            int iHeightOffset = 0;
            if (m_MonthDayHeightOffset > 0 && Index < m_MonthDayHeightOffset)
            {
                iTopHeightOffset = Index;
            }
            else
            {
                int iTempOffset = m_MonthDayHeightOffset - 1;
                if (iTempOffset < 0) iTempOffset = 0;
                iTopHeightOffset = iTempOffset;
            }
            if (m_MonthDayHeightOffset > 0 && Index < m_MonthDayHeightOffset - 1)
            {
                iHeightOffset = 1;
            }
            int iWeekNumber = ((int)m_FirstWeekNumber + Index);
            if (iWeekNumber == 53) iWeekNumber = 1;
            string sWeekNumber = iWeekNumber.ToString();
            //get paintrect
            Rectangle myPaintRect = new Rectangle(0, m_NextTopPos + (Index * (m_WeekDayHeight + 
                                                  m_MonthDaysStyle.DaysPadding.Vertical)) + 1+
                                                  m_MonthDaysStyle.DaysPadding.Vertical + iTopHeightOffset,
                                                  GetWeekNumbersWidth(), m_WeekDayHeight + iHeightOffset);
            //ownerdraw
            WeeknumberRenderEventArgs myEventArgs = new WeeknumberRenderEventArgs(e, myPaintRect, iWeekNumber);
            if (WeekNumberRender != null) WeekNumberRender(this, myEventArgs);
            if (myEventArgs.OwnerDraw == false)
            {
                //WeekNumberRender
                if (Index == 0)
                {
                    //save startpos to draw border later
                    m_DrawedMonthDayTopStartPos = myPaintRect.Top - m_MonthDaysStyle.DaysPadding.Vertical - 1;
                }

                m_DrawedMonthDayHeight += myPaintRect.Height + m_MonthDaysStyle.DaysPadding.Vertical;
                

                //draw weeknumberstext
                System.Diagnostics.Debug.WriteLine("Draw Weeknumber: " + sWeekNumber);                

                StringFormat myStringFormat = new StringFormat();
                myStringFormat.Alignment = StringAlignment.Far;
                switch (m_WeekNumbers

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -