电子万年历代码文档格式.docx
《电子万年历代码文档格式.docx》由会员分享,可在线阅读,更多相关《电子万年历代码文档格式.docx(59页珍藏版)》请在冰豆网上搜索。
=0)
break;
}
if(i<
=Ret)Ret=-1;
returnRet;
}
voidCalendar_Show(CALENDAR*pCalendarWindow,INT16Year,INT16Month)
显示月历
pCalendarWindow:
月历配置结构体
//Year:
年
月
INT16Tempx,Tempy,TempColor,i;
INT8Days;
INT8TempStr[20];
STR_WINDOWwCalendar;
STR_FONTFontCn12={12,12,RES_HZK12};
STR_FONTFontAsc24={12,24,RES_ASC24};
CLOCKNow;
INT8*T_WeekdayStr[]={
"
日"
"
一"
二"
三"
四"
五"
六"
};
pCalendar=pCalendarWindow;
Days=Calendar_Month(Year,Month);
TFT_CreateWindow(&
wCalendar,0,0,319,239,0);
TFT_LoadAsciiFont(&
wCalendar,&
FontAsc24);
TFT_LoadChineseFont(&
FontCn12);
TFT_PutBitMap(&
wCalendar,0,0,pCalendar->
BGImage);
//背景图片
TFT_SetChineseFont(&
wCalendar,0);
//题头
TFT_SetAsciiFont(&
TFT_SetColor(&
wCalendar,pCalendar->
HeadColor);
TFT_SetBGColor(&
TFT_SetTextPos(&
wCalendar,20,0);
TFT_Print(&
wCalendar,"
%d年%d月"
Year,Month);
wCalendar,120,0);
农历%s年(%s年)"
Calendar_Date[0].GanZhiYearStr,Calendar_Date[0].AnimalStr);
TableHeadColor);
//星期
for(i=0;
7;
Tempx=((7-pCalendar->
FirstWeekDay+i)%7)*40+12;
TFT_SetTextPos(&
wCalendar,Tempx,24);
TFT_Print(&
%s"
T_WeekdayStr[i]);
Tempy=41;
wCalendar,1);
Days;
i++)//日历项
Clock_Get(&
Now);
if(Year==Now.Year&
&
Month==Now.Mon&
i==Now.Day-1)//今日
{
Tempx=((7-pCalendar->
FirstWeekDay+Calendar_Date[i].Weekday)%7)*40+1;
TFT_SetColor(&
TodayColor);
TFT_Rectangle(&
wCalendar,Tempx,Tempy,Tempx+38,Tempy+38,PAINT_SOLID);
}
TempColor=pCalendar->
CommonColor;
if(Calendar_Date[i].Weekday==0||Calendar_Date[i].Weekday==6)
TempColor=pCalendar->
WeekendColor;
if((Month==1&
i==0)//元旦、五一、十一、春节
||(Month==5&
i==0)
||(Month==10&
||(Calendar_Date[i].LunarMonth==1&
Calendar_Date[i].LunarDay==1))
if(i<
9)//一位数
FirstWeekDay+Calendar_Date[i].Weekday)%7)*40+14;
else//两位数
FirstWeekDay+Calendar_Date[i].Weekday)%7)*40+8;
wCalendar,Tempx,Tempy);
TFT_SetColor(&
wCalendar,TempColor);
%d"
i+1);
LunarColor;
if((Calendar_Date[i].Fu&
0x00FF)==1)//伏
strcpy(TempStr,Calendar_Date[i].FuStr);
TempStr[4]='
\0'
;
SpecialColor;
if((Calendar_Date[i].Jiu&
0x00FF)==1)//九
strcpy(TempStr,Calendar_Date[i].JiuStr);
if(Calendar_Date[i].SolarTerm!
=-1)//节气
strcpy(TempStr,Calendar_Date[i].SolarTermStr);
if(Calendar_Date[i].LunarFestivalStr[0]!
='
)//农历节日
strcpy(TempStr,Calendar_Date[i].LunarFestivalStr);
if(Calendar_Date[i].FestivalStr[0]!
)//公历节日
strcpy(TempStr,Calendar_Date[i].FestivalStr);
if(TempColor==pCalendar->
LunarColor)//普通农历
if(Calendar_Date[i].LunarDay==1)//初一显示月号
{
strcpy(TempStr,Calendar_Date[i].LunarMonthStr);
if(strlen(TempStr)<
=4)
strcat(TempStr,"
月"
);
}
else
strcpy(TempStr,Calendar_Date[i].LunarDayStr);
if(strlen(TempStr)==4)//两个字
Tempx=(7-pCalendar->
FirstWeekDay+Calendar_Date[i].Weekday)%7*40+8;
else//三个字
FirstWeekDay+Calendar_Date[i].Weekday)%7*40+2;
wCalendar,Tempx,Tempy+24);
wCalendar,TempStr);
if(Calendar_Date[i].Weekday==(pCalendar->
FirstWeekDay+6)%7)//换行
Tempy+=40;
if(Tempy>
=240)Tempy=41;
INT16Calendar_GetKey(INT16x,INT16y)
判断坐标是否落在功能按钮上
x:
x坐标
//y:
y坐标
键值
INT16Tempx,Tempy;
INT16Ret=-1;
Tempx=x;
Tempy=y;
if(Tempx>
=0&
Tempx<
280&
Tempy>
=40&
Tempy<
240)//日历区域
Ret=Tempx/40+(Tempy-40)/40*7;
elseif(Tempx>
=283&
=316&
=4&
=37)//前一年
Ret=100;
=44&
=77)//后一年
Ret=101;
=91&
=124)//后一月
Ret=102;
=131&
=164)//后一月
Ret=103;
=196&
=229)//返回
Ret=104;
voidCalendar_ShowDay(CALENDAR*pCalendar,INT16Key)
STR_WINDOWwDay,wFestival;
INT16x,y,Day,Temp;
INT32i;
DATE*pDate;
Day=Key-Calendar_Date[0].Weekday+pCalendar->
FirstWeekDay+1;
if(Day<
1)//检查3x号移动到第一行的情况
Temp=35-Calendar_Date[0].Weekday+pCalendar->
FirstWeekDay;
//最后一格的日期
if(Date_GetMonthDays(Calendar_Date[0].Year,Calendar_Date[0].Month)>
Temp)
Day=Key+Temp+1;
1||Day>
Date_GetMonthDays(Calendar_Date[0].Year,Calendar_Date[0].Month))
return;
pDate=&
Calendar_Date[Day-1];
wDay,20,60,259,219,RGB(0xE0,0xE0,0xE0));
wDay,RGB(0xF0,0x30,0x00));
TFT_Rectangle(&
wDay,0,0,239,159,PAINT_HOLLOW);
wDay,COLOR_MAGENTA);
wDay,10,10);
wDay,"
%4d年%d月%d日星期%s"
pDate->
Year,pDate->
Month,pDate->
Day,T_WeekdayStr[(unsignedchar)(pDate->
Weekday)]);
wDay,10,34);
wDay,RGB(0x20,0x20,0x80));
星座:
%s座"
ZodiacStr);
wDay,10,54);
生肖:
AnimalStr);
wDay,10,74);
农历:
%s月%s"
LunarMonthStr,pDate->
LunarDayStr);
wDay,10,94);
干支:
%s年%s月%s日"
GanZhiYearStr,pDate->
GanZhiMonthStr,pDate->
GanZhiDayStr);
wFestival,30,180,249,209,RGB(0xE0,0xE0,0xE0));
wFestival,0,0);
wFestival,COLOR_RED);
if(pDate->
FestivalStr[0]!
)
wFestival,"
%s"
FestivalStr);
LunarFestivalStr[0]!
LunarFestivalStr);
SolarTerm!
=-1)
SolarTermStr);
Fu!
=0)
FuStr);
Jiu!
JiuStr);
1000000;
i++);
while
(1)
Touch_Get(&
x,&
y);
if(x!
=-1)
voidCalendar_Interface(CALENDAR*pCalendar)
月历界面
pCalendar:
externINT16gFrameType;
CLOCKClock;
INT16Year,Month,x,y,Key;
gFrameType=1;
Clock_Get(&
Clock);
Year=Clock.Year;
Month=Clock.Mon;
Calendar_Show(pCalendar,Year,Month);
Key=Calendar_GetKey(x,y);
switch(Key)
case-1:
break;
case100:
//上年
if(Year>
1901)Year-=1;
case101:
//下年
if(Year<
2100)Year+=1;
case102:
//上月
Month-=1;
if(Month==0)
{
Month=12;
Year-=1;
if(Year<
1901)
{
Year=1901;
Month=1;
}
}
case103:
//下月
Month+=1;
if(Month==13)
Month=1;
Year+=1;
if(Year>
2100)
Year=2100;
Month=12;
case104:
//返回
return;
default:
Calendar_ShowDay(pCalendar,Key);
if(Key!
Calendar_Show(pCalendar,Year,Month);
……………………………………………………………………………………………………………………….闹铃部分。
。