📄 ndkalendar.cpp
字号:
#include "NDKalendar.h"
#include "KalendarManage.h"
CCalendarManage* CCalendarManage::NewL()
{
CCalendarManage* self = NewLC();
CleanupStack::Pop(self);
return self;
}
CCalendarManage* CCalendarManage::NewLC()
{
CCalendarManage* self = new(ELeave) CCalendarManage;
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CCalendarManage::CCalendarManage()
{
}
void CCalendarManage::ConstructL()
{
TTime time;
time.HomeTime();
TDateTime dateTime = time.DateTime();
iSolarYear = dateTime.Year();
iSolarMonth = dateTime.Month();
iSolarDate = dateTime.Day();
if(IsLeapYear())
{
iWeekDay = (SolarDays[1][iSolarMonth] + LunarCal[iSolarYear-FirstYear].BaseWeekday)%7 + 1;
iMonthDays = SolarCal[1][iSolarMonth];
}
else
{
iWeekDay = (SolarDays[0][iSolarMonth] + LunarCal[iSolarYear-FirstYear].BaseWeekday)%7 + 1;
iMonthDays = SolarCal[0][iSolarMonth];
}
}
CCalendarManage::~CCalendarManage()
{
}
void CCalendarManage::SetSolarYear(TInt aYear)
{
iSolarYear = aYear;
}
TInt CCalendarManage::GetSolarYear()
{
return iSolarYear;
}
void CCalendarManage::SetSolarMonth(TInt aMonth)
{
iSolarMonth = aMonth;
}
TInt CCalendarManage::GetSolarMonth()
{
return iSolarMonth;
}
void CCalendarManage::SetSolarDate(TInt aDate)
{
iSolarDate = aDate;
}
TInt CCalendarManage::GetSolarDate()
{
return iSolarDate;
}
void CCalendarManage::SetWeekDay(TInt aWeekDay)
{
iWeekDay = aWeekDay;
}
TInt CCalendarManage::GetweekDay()
{
return iWeekDay;
}
TInt CCalendarManage::GetMonthDay()
{
return iMonthDays;
}
TBool CCalendarManage::IsLeapYear()
{
if(0 == iSolarYear%400)
{
return ETrue;
}
else if(0 == iSolarYear%100)
{
return EFalse;
}
else if(0 == iSolarYear%4)
{
return ETrue;
}
return EFalse;
}
//构造函数
CNDCalendar::CNDCalendar()
{
}
void CNDCalendar::ConstructL()
{
iCalendarManage = CCalendarManage::NewL();
iWeekDayArray = new(ELeave) CDesC16ArrayFlat(7);
iWeekDayArray->AppendL(KMonday);
iWeekDayArray->AppendL(KTuesday);
iWeekDayArray->AppendL(KWednesday);
iWeekDayArray->AppendL(KThursday);
iWeekDayArray->AppendL(KFriday);
iWeekDayArray->AppendL(KSaturday);
iWeekDayArray->AppendL(KSunday);
iDateArray = new(ELeave) CDesC16ArrayFlat(31);
iDateArray->AppendL(KOne);
iDateArray->AppendL(KTwo);
iDateArray->AppendL(KThree);
iDateArray->AppendL(Kfour);
iDateArray->AppendL(KFive);
iDateArray->AppendL(KSix);
iDateArray->AppendL(KSeven);
iDateArray->AppendL(KEight);
iDateArray->AppendL(KNine);
iDateArray->AppendL(KTen);
iDateArray->AppendL(KEleven);
iDateArray->AppendL(KTwelve);
iDateArray->AppendL(KThirteen);
iDateArray->AppendL(KFourteen);
iDateArray->AppendL(KFifiteen);
iDateArray->AppendL(KSixteen);
iDateArray->AppendL(KSeventeen);
iDateArray->AppendL(Keighteen);
iDateArray->AppendL(KNinteen);
iDateArray->AppendL(KTwenty);
iDateArray->AppendL(KtwentyOne);
iDateArray->AppendL(KTwentyTwo);
iDateArray->AppendL(KTwentyThree);
iDateArray->AppendL(KTwentyFour);
iDateArray->AppendL(KTwentyFive);
iDateArray->AppendL(KTwentySix);
iDateArray->AppendL(KTwentySeven);
iDateArray->AppendL(KTwentyEight);
iDateArray->AppendL(KTwentyNine);
iDateArray->AppendL(KThirty);
iDateArray->AppendL(KThirtyOne);
}
//析构函数
CNDCalendar::~CNDCalendar()
{
delete iCalendarManage;
delete iWeekDayArray;
delete iDateArray;
}
//绘制Calendar
void CNDCalendar::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
gc.SetBrushColor(KRgbWhite);
gc.DrawRect(Rect());
gc.SetBrushColor(KRgbBlack);
gc.DrawLine(TPoint(22,18),TPoint(22,144));
gc.DrawLine(TPoint(0,18),TPoint(176,18));
gc.DrawLine(TPoint(0,36),TPoint(176,36));
gc.SetBrushColor(KRgbGray);
for(TInt i=2;i<8;i++)
{
gc.DrawLine(TPoint(i*22,36),TPoint(i*22,144));
gc.DrawLine(TPoint(22,i*18),TPoint(176,i*18));
}
const CFont* iFontTemp = iEikonEnv->LegendFont();
gc.UseFont(iFontTemp);
for(i=0;i<7;i++)
{
gc.DrawText((*iWeekDayArray)[i],TPoint((i+1)*22+5,34));
}
TInt weekDay = iCalendarManage->GetweekDay();
TInt monthDay = iCalendarManage->GetMonthDay();
TBuf<30> date;
date.Num(iCalendarManage->GetSolarDate());
gc.DrawText(date,TPoint(27,20));
TInt x = weekDay;
TInt y = 54;
gc.SetBrushColor(KRgbDarkCyan);
for(i=0;i<monthDay;i++)
{
date.Num(i+1);
if(i==iCalendarManage->GetSolarDate())
{
gc.DrawRect(TRect(x*22,y-18,x*22+22,y));
}
gc.DrawText(date,TPoint(x*22+5,y));
x++;
if(0 == x%8)
{
y += 18;
x = 1;
}
}
}
//按键处理
TKeyResponse CNDCalendar::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
return EKeyWasConsumed;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -