📄 calendar.cs
字号:
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 + -