📄 calendar.c
字号:
{
xSrc=DATE_BEGIN_XPOS+((i+firstDayPos)%DAY_LINE_NUM)*(DAY_ITEM_LEN + DAY_GAP);
ySrc=DATE_BEGIN_YPOS+((i+firstDayPos)/DAY_LINE_NUM)*DAY_ITEM_LEN;
xDest=xSrc+DAY_ITEM_LEN;
yDest=ySrc+DAY_ITEM_LEN;
sprintf(line,"%2d",i+1);
Disp16String(line,xSrc,ySrc);
if(i == nowday-1)
{
nowitem = i + firstDayPos;
InvRec(hgc, xSrc-(DAY_ITEM_LEN-14)/2, ySrc-(DAY_ITEM_LEN-10)/2,DAY_ITEM_LEN,DAY_ITEM_LEN);
}
}
if(nowyear <= 2030 && nowyear >= 1900)
{
ClearRec(hgc, WHITE,40,LCD_HEIGHT - 70,LCD_WIDTH/2, 25, REPLACE_STYLE);
yyhs(line,nowyear,nowmonth,nowday);
SetWindowText(yinli, line, NULL);
}
else
{
SetWindowText(yinli, "", NULL);
}
yearchange = 0;
EnableWindow( ok, TRUE );
EnableWindow( cancel, TRUE );
}
break;
case WM_LISTBOX:
if(msg.lparam == monthdisp)
{
temp = nowmonth;
switch(msg.wparam)
{
case 0:
nowmonth = 1;
break;
case 1:
nowmonth = 2;
break;
case 2:
nowmonth = 3;
break;
case 3:
nowmonth = 4;
break;
case 4:
nowmonth = 5;
break;
case 5:
nowmonth = 6;
break;
case 6:
nowmonth = 7;
break;
case 7:
nowmonth = 8;
break;
case 8:
nowmonth = 9;
break;
case 9:
nowmonth = 10;
break;
case 10:
nowmonth = 11;
break;
case 11:
nowmonth = 12;
break;
}
if(nowmonth != temp)
{
//清空day的显示区
xSrc=1;
ySrc=DATE_BEGIN_YPOS - 10;
//xDest= LCD_WIDTH - 1;
//yDest= 173;
xDest= LCD_WIDTH - 1;
yDest= LCD_HEIGHT - 65;
ClearRec(hgc, WHITE,xSrc,ySrc,xDest-xSrc,yDest-ySrc, REPLACE_STYLE);
//获得当前月的长度
if(nowmonth==2)
{
if((nowyear%4==0 && nowyear%100 != 0) || (nowyear%400 == 0)) //闰年时二月29天,平时二月28天
monthDayLen=29;
else monthDayLen=28;
}
else monthDayLen=monthDay[nowmonth-1];
//更新显示
firstDayPos=CalculateWeek(nowyear,nowmonth,1);
for(i=0; i<monthDayLen; i++)
{
xSrc=DATE_BEGIN_XPOS+((i+firstDayPos)%DAY_LINE_NUM)*(DAY_ITEM_LEN + DAY_GAP);
ySrc=DATE_BEGIN_YPOS+((i+firstDayPos)/DAY_LINE_NUM)*DAY_ITEM_LEN;
xDest=xSrc+DAY_ITEM_LEN;
yDest=ySrc+DAY_ITEM_LEN;
sprintf(line,"%2d",i+1);
Disp16String(line,xSrc,ySrc);
if(i == nowday-1)
{
nowitem = i + firstDayPos;
InvRec(hgc, xSrc-(DAY_ITEM_LEN-14)/2, ySrc-(DAY_ITEM_LEN-10)/2,DAY_ITEM_LEN,DAY_ITEM_LEN);
}
}
ClearRec(hgc, WHITE,40,LCD_HEIGHT - 70,LCD_WIDTH/2, 25, REPLACE_STYLE);
yyhs(line,nowyear,nowmonth,nowday);
SetWindowText(yinli, line, NULL); //更新阴历的显示
EnableWindow( ok, TRUE );
EnableWindow( cancel, TRUE );
}
}
case ASIX_INPUT_STATUS: //处理点击操作
if(msg.wparam == PPSM_INPUT_PEN_UP)
{
dragflag = 0;
}
else
if(msg.wparam == PPSM_INPUT_DRAG)
{
dragflag = 1;
}
if(dragflag == 0)
{
temp = nowitem;
GetPosData(msg.data, &xpos, &ypos);
//获得当前点击的日期区域
nowitem = (xpos-DATE_BEGIN_XPOS)/(DAY_ITEM_LEN + DAY_GAP) + ((ypos-DATE_BEGIN_YPOS)/DAY_ITEM_LEN)*DAY_LINE_NUM;
if(nowitem != temp)
{
//当选中的是日期时,该日期的区域反黑显示
if((nowitem - firstDayPos + 1) > 0 && (nowitem - firstDayPos + 1) <= monthDayLen)
{
//恢复刚才的日期区域
xSrc=DATE_BEGIN_XPOS+(temp%DAY_LINE_NUM)*(DAY_ITEM_LEN + DAY_GAP);
ySrc=DATE_BEGIN_YPOS+(temp/DAY_LINE_NUM)*DAY_ITEM_LEN;
xDest=xSrc+DAY_ITEM_LEN;
yDest=ySrc+DAY_ITEM_LEN;
InvRec(hgc, xSrc-(DAY_ITEM_LEN-14)/2, ySrc-(DAY_ITEM_LEN-10)/2,DAY_ITEM_LEN,DAY_ITEM_LEN);
nowday = nowitem - firstDayPos + 1;
//反黑当前的日期区域
xSrc=DATE_BEGIN_XPOS+(nowitem%DAY_LINE_NUM)*(DAY_ITEM_LEN + DAY_GAP);
ySrc=DATE_BEGIN_YPOS+(nowitem/DAY_LINE_NUM)*DAY_ITEM_LEN;
xDest=xSrc+DAY_ITEM_LEN;
yDest=ySrc+DAY_ITEM_LEN;
InvRec(hgc, xSrc-(DAY_ITEM_LEN-14)/2, ySrc-(DAY_ITEM_LEN-10)/2,DAY_ITEM_LEN,DAY_ITEM_LEN);
}
else
nowitem = (U8)temp;
ClearRec(hgc, WHITE,40,LCD_HEIGHT - 70,LCD_WIDTH/2, 25, REPLACE_STYLE);
yyhs(line,nowyear,nowmonth,nowday);
SetWindowText(yinli, line, NULL); //更新阴历的显示
}
dragflag = 0xff;
EnableWindow( ok, TRUE );
EnableWindow( cancel, TRUE );
}
break;
//日期发生改变时更新显示
/* case xxxxx:
nowday += 1;
if(nowday > monthDayLen)
{
nowday = 1;
nowmonth += 1;
}
if(nowmonth > 12)
{
nowmonth = 1;
nowyear += 1;
}
sprintf(line, "%2d", nowyear);
SetWindowText(yeardisp, line, NULL);
SelectListBox(monthdisp, nowmonth - 1);
//清空day的显示区
xSrc=1;
ySrc=DATE_BEGIN_YPOS - 1;
xDest= LCD_WIDTH - 1;
yDest= 173;
ClearRec(hgc, WHITE,xSrc,ySrc,xDest-xSrc,yDest-ySrc, REPLACE_STYLE);
//获得当前月的长度
if(nowmonth==2)
{
if((nowyear%4==0 && nowyear%100 != 0) || (nowyear%400 == 0)) //闰年时二月29天,平时二月28天
monthDayLen=29;
else monthDayLen=28;
}
else monthDayLen=monthDay[nowmonth-1];
firstDayPos=CalculateWeek(nowyear,nowmonth,1);
for(i=0; i<monthDayLen; i++)
{
xSrc=DATE_BEGIN_XPOS+((i+firstDayPos)%DAY_LINE_NUM)*(DAY_ITEM_LEN + DAY_GAP);
ySrc=DATE_BEGIN_YPOS+((i+firstDayPos)/DAY_LINE_NUM)*DAY_ITEM_LEN;
xDest=xSrc+DAY_ITEM_LEN;
yDest=ySrc+DAY_ITEM_LEN;
sprintf(line,"%2d",i+1);
Disp16String(line,xSrc,ySrc);
if(i==nowday-1)
{
nowitem = i + firstDayPos;
InvRec(hgc, xSrc,ySrc,xDest-xSrc,yDest-ySrc);
}
}
if(nowyear <= 2030 && nowyear >= 1900)
{
yyhs(line,nowyear,nowmonth,nowday);
SetWindowText(yinli, line, NULL);
}
else
{
SetWindowText(yinli, "", NULL);
}
*/
case WM_QUIT:
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
ActiveAreaDisable(daydisp);
DestroyWindow( mainwin );
// EndofTask();
return;
}
U8 CalculateWeek(S16 year,S16 month,S16 day) /* 返回星期,星期日值为0 */
{
const U16 initYear=1980,initMonth=1,initDay=1;
const U8 initWeek=2; /* 1980年1月1日是星期二*/
const U16 initYear1=1910,initMonth1=1,initDay1=1;
const U8 initWeek1=6; /* 1980年1月1日是星期六*/
U16 yearCount;
U16 dayCount;
U8 i;
const U8 monthDay[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(year<initYear)
{
if(year<initYear1) return(0);
year=year-initYear1;
yearCount=0;
dayCount=0;
while(year!=0)
{
dayCount +=365;
if(yearCount%4==0)
dayCount +=1;
yearCount++;
year--;
}
month =month-initMonth1;
if(month<0)
return(0);
for(i=0;i<month;i++)
dayCount+=monthDay[i];
if((yearCount%4==0)&&(month>=3))
dayCount++;
day=dayCount+day-initDay1;
if(day<0)
return(0);
return((day+initWeek)%7);
}
year=year-initYear;
yearCount=0;
dayCount=0;
while(year!=0)
{
dayCount +=365;
if(yearCount%4==0)
dayCount +=1;
yearCount++;
year--;
}
month =month-initMonth;
if(month<0)
return(0);
for(i=0;i<month;i++)
dayCount+=monthDay[i];
if((yearCount%4==0)&&(month>=2)) /* 2000年3月*/
dayCount++;
day=dayCount+day-initDay;
if(day<0)
return(0);
return((day+initWeek)%7);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -