📄 calendar.c
字号:
if( pme->m_days[m_currY][m_currX] != 0 )
{
pme->m_currYPos = m_currY;
pme->m_currXPos = m_currX;
Calender_DrawCusor( pme );
Calender_DrawYM(pme);
return;
}
}
}
}
pme->m_currYPos = m_currY;
pme->m_currXPos = m_currX;
Calender_DrawCusor( pme );
}
else
{
/*不是第一个月*/
pme->m_month--;
Calender_AccountfirsDayWeek(pme,pme->m_year, pme->m_month);
pme->m_monthDays = Calender_getMonthDays(pme->m_year, pme->m_month);
Calendar_DrawDate(pme);
m_currY = MAX_Y_POS - 1;
m_currX = MAX_X_POS - 1;
/*定位到该月的最后一天*/
if( pme->m_days[m_currY][m_currX] == 0 )
{
for( ;m_currY > 0; m_currY--)
{
for( m_currX = MAX_X_POS - 1;m_currX > 0; m_currX--)
{
if( pme->m_days[m_currY][m_currX] != 0 )
{
pme->m_currYPos = m_currY;
pme->m_currXPos = m_currX;
Calender_DrawCusor( pme );
return;
}
}
if( m_currX == 0 )
{
if( pme->m_days[m_currY][m_currX] != 0 )
{
pme->m_currYPos = m_currY;
pme->m_currXPos = m_currX;
Calender_DrawCusor( pme );
return;
}
}
}
}
pme->m_currYPos = m_currY;
pme->m_currXPos = m_currX;
}
Calender_DrawCusor( pme );
}
else
{
m_currY--;
m_currX = MAX_X_POS - 1;
pme->m_currXPos = m_currX;
pme->m_currYPos = m_currY;
Calender_DrawCusor( pme );
}
}
else
{ /*位置减一*/
pme->m_currXPos--;
Calender_DrawCusor( pme );
}
pme->m_day = pme->m_days[pme->m_currYPos][pme->m_currXPos];
}
/**************************************************************************
* Function Name : Calendar_RightMoveCusor
* Description : 光标向右移动
* Input Parameters : Calendar*
* Output Parameters: None
* Return Value : None
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
static void Calendar_RightMoveCusor(Calendar *pme)
{
uint8 m_currX = pme->m_currXPos;
uint8 m_currY = pme->m_currYPos;
if( m_currX + 1 == MAX_X_POS || pme->m_days[m_currY][m_currX + 1] == 0 )
{
/*当前位置是该行的最后一个位置或者为该月的最后一号*/
if( pme->m_days[m_currY][m_currX + 1] == 0 )
{
if( pme->m_month + 1 > 12)
{
/*当前月为最后一个月*/
pme->m_year++;
pme->m_month = 1;
pme->m_day = 1;
pme->m_monthDays = 31;
Calender_AccountfirsDayWeek(pme,pme->m_year, pme->m_month);
Calendar_DrawDate(pme);
m_currY = 0;
m_currX = 0;
/*定位到该月的最后一天*/
if( pme->m_days[m_currY][m_currX] == 0 )
{
for( m_currX = 0; m_currX < MAX_X_POS; m_currX++)
{
if( pme->m_days[m_currY][m_currX] != 0 )
{
break;
}
}
}
pme->m_currYPos = m_currY;
pme->m_currXPos = m_currX;
Calender_DrawCusor( pme );
}//最后一行 为最后一个月
else
{
/*不是最后一个月 为最后一行*/
pme->m_month++;
Calender_AccountfirsDayWeek(pme,pme->m_year, pme->m_month);
pme->m_monthDays = Calender_getMonthDays(pme->m_year, pme->m_month);
Calendar_DrawDate(pme);
m_currY = 0;
m_currX = 0;
/*定位到该月的第一天*/
if( pme->m_days[m_currY][m_currX] == 0 )
{
for( m_currX = 0; m_currX < MAX_X_POS; m_currX++)
{
if( pme->m_days[m_currY][m_currX] != 0 )
{
break;
}
}
}
pme->m_currYPos = m_currY;
pme->m_currXPos = m_currX;
Calender_DrawCusor( pme );
}
}
else
{
/*当前行不为最后一行 为最后一个位置*/
m_currY++;
m_currX = 0;
pme->m_currXPos = m_currX;
pme->m_currYPos = m_currY;
Calender_DrawCusor( pme );
}
}
else
{
/*当前位置不为最后一个位置*/
m_currX++;
pme->m_currXPos = m_currX;
Calender_DrawCusor( pme );
}
pme->m_day = pme->m_days[pme->m_currYPos][pme->m_currXPos];
}
/**************************************************************************
* Function Name : Calendar_MoveCusor
* Description : 移动光标
* Input Parameters : Canarder *pme,uint8 direction
* Output Parameters: None
* Return Value : uint8
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
static void Calendar_MoveCusor(Calendar *pme,uint8 direction)
{
Calender_EraseCusor(pme);
switch( direction )
{
case UP:
Calendar_UpMoveCusor(pme);
break;
case DOWN:
Calendar_DownMoveCusor(pme);
break;
case LEFT:
Calendar_LeftMoveCusor(pme);
break;
case RIGHT:
Calendar_RightMoveCusor(pme);
break;
}
IDISPLAY_Update (pme->m_pIDisplay);
}
/**************************************************************************
* Function Name : Calender_getMonthDays
* Description : 计算指定的月有几天
* Input Parameters : uint8
* Output Parameters: None
* Return Value : uint8
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
uint8 Calender_getMonthDays(uint16 year, uint8 month)
{
uint8 monthDays = 0;
if(month < 1 || month > 12)
return monthDays;
if(month == 2)
{
if( year % 4 == 0 && year % 100 != 0 || year % 400 == 0 )
monthDays = 29;
else
monthDays = 28;
return monthDays;
}
else if(month % 2 != 0)
monthDays = 31;
else monthDays = 30;
return monthDays;
}
/**************************************************************************
* Function Name : Calender_AccountfirsDayWeek
* Description : 设置当前月的第一天是星期几
* Input Parameters : uint8
* Output Parameters: None
* Return Value : uint8
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
static void Calender_AccountfirsDayWeek(Calendar *pme,uint16 year, uint8 month)
{
IDATECTL_SetDate(
pme->m_pIDateCtl,
year,
month,
1
);
pme->m_tmfdow = (uint8)IDATECTL_GetDayOfWeek( pme->m_pIDateCtl );
}
static void Calender_DrawYM(Calendar *pme)
{
/*在屏幕的上方绘制日期 YYYY/MM/DD*/
AECHAR szDate[6]={' ','\0'};
AECHAR space[4]={' ','\0'};
AECHAR sYear[10]={' ','\0'};
AECHAR sMonth[10]={' ','\0'};
WWRITELONG(sYear, pme->m_year);
STRTOWSTR("/",space,4);
WWRITELONG(sMonth, pme->m_month);
IDISPLAY_SetColor(pme->m_pIDisplay,CLR_USER_TEXT,MAKE_RGB(255,255,255));
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD+1,sYear,-1,75,2,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD+1,space,-1,106,2,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD+1,sMonth,-1,112,2,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_SetColor(pme->m_pOwner->a.m_pIDisplay,CLR_USER_TEXT,MAKE_RGB(0,0,0));
IDISPLAY_Update(pme->m_pIDisplay);
}
/**************************************************************************
* Function Name : ScheDateDisp_DrawGround
* Description : This function draw ground of main window.
* Input Parameters : CMainWin *
* Output Parameters: None
* Return Value : None
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
static void Calender_DrawGround(Calendar* pme)
{
AEERect m_rRect1;
AEERect m_rRect2;
AEERect m_rRect3;
/*字符串星期天到星期六*/
const AECHAR sun[] = { 0x65e5, 0 }; //日
const AECHAR mon[] = { 0x4e00, 0 }; //一
const AECHAR tue[] = { 0x4e8c, 0 }; //二
const AECHAR wed[] = { 0x4e09, 0 }; //三
const AECHAR thu[] = { 0x56db, 0 }; //四
const AECHAR fri[] = { 0x4e94, 0 }; //五
const AECHAR sat[] = { 0x516d, 0 }; //六
/*两个字符串 option switch*/
const AECHAR tip1[] = { 0x64cd, 0x4f5c, 0 }; //操作
const AECHAR tip2[] = { 0x663e, 0x793a, 0 }; //显示
const AECHAR header[] = { 0x65e5, 0x7a0b, 0x8868, 0 }; //日程表
int h_distance=0;
int v_distance=0;
int temp=0;
h_distance = pme->m_pOwner->DeviceInfo.cxScreen/7;
v_distance = (pme->m_pOwner->DeviceInfo.cyScreen-30)/7;
SETAEERECT( &m_rRect1, 0, 0, pme->m_pOwner->DeviceInfo.cxScreen,20 );
SETAEERECT( &m_rRect2, 0,pme->m_pOwner->DeviceInfo.cyScreen-15, pme->m_pOwner->DeviceInfo.cxScreen,15 );
SETAEERECT( &m_rRect3, 0, 20, pme->m_pOwner->DeviceInfo.cxScreen,pme->m_pOwner->DeviceInfo.cyScreen-35 );
// draw the seven days from sunday to saterday
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,sun,-1,h_distance*0,v_distance+5,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,mon,-1,h_distance*1+2,v_distance+5,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,tue,-1,h_distance*2+2,v_distance+5,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,wed,-1,h_distance*3+2,v_distance+5,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,thu,-1,h_distance*4+2,v_distance+5,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,fri,-1,h_distance*5+2,v_distance+5,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,sat,-1,h_distance*6+2,v_distance+5,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_FillRect (pme->m_pIDisplay,&m_rRect1, MAKE_RGB(255,70,70));
IDISPLAY_FillRect (pme->m_pIDisplay,&m_rRect2, MAKE_RGB(255,70,70));
// draw operation tips on the screen
Calender_DrawYM(pme);
IDISPLAY_SetColor(pme->m_pOwner->a.m_pIDisplay,CLR_USER_TEXT,MAKE_RGB(255,255,255));
IDISPLAY_DrawText(pme->m_pOwner->a.m_pIDisplay,(AEE_FONT_BOLD+1),header,-1,0,2,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_SetColor(pme->m_pOwner->a.m_pIDisplay,CLR_USER_TEXT,MAKE_RGB(0,0,0));
IDISPLAY_DrawText(pme->m_pOwner->a.m_pIDisplay,(AEE_FONT_BOLD+1),tip1,-1,0,
pme->m_pOwner->DeviceInfo.cyScreen-15,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_DrawText(pme->m_pOwner->a.m_pIDisplay,(AEE_FONT_BOLD+1),tip2,-1,
pme->m_pOwner->DeviceInfo.cxScreen-30,
pme->m_pOwner->DeviceInfo.cyScreen-15,NULL,IDF_TEXT_TRANSPARENT);
IDISPLAY_Update(pme->m_pOwner->a.m_pIDisplay);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -