📄 calendar.c
字号:
#include "Calendar.h"
static void Calender_DrawYM(Calendar *pme);
static void Calender_DrawGround(Calendar* pme);
/**************************************************************************
* Function Name : CMainWin_New
* Description : This function constucts the main window.
* Input Parameters : Schedule *
* Output Parameters: None
* Return Value : IWindow *
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
IWindow * Calendar_New(Schedule * pOwner)
{
Calendar * pme;
VTBL(IWindow) vtbl;
uint8 row = 0;
uint8 grown = 0;
SH_IWINDOW_SETVTBL(&vtbl, Calendar_Enable, Calendar_Redraw, Calendar_HandleEvent, Calendar_Delete);
pme = (Calendar *)CWindow_New(sizeof(Calendar), pOwner, &vtbl);
if(NULL == pme)
{
return FALSE;
}
if(ISHELL_CreateInstance(pme->m_pIShell, AEECLSID_DATECTL, (void**)(&pme->m_pIDateCtl)) != SUCCESS)
return FALSE;
Calendar_InitDate(pme);
grown = 45;
for( row = 0; row < MAX_Y_POS; row++)
{
pme->m_yPoses[row] = grown;
grown += pme->m_unitH;
}
grown = 3;
for( row = 0; row < MAX_X_POS; row++)
{
pme->m_xPoses[row] = grown;
grown += pme->m_unitW;
}
/*返回窗体接口*/
return (IWindow *)pme;
}
/**************************************************************************
* Function Name : CMainWin_Delete
* Description : This function deletes the main window.
* Input Parameters : IWindow *
* Output Parameters: None
* Return Value : None
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void Calendar_Delete(IWindow * po)
{
Calendar * pme = (Calendar *)po;
pme->m_pOwner->m_year = pme->m_year;
pme->m_pOwner->m_month = pme->m_month;
pme->m_pOwner->m_day = pme->m_day;
IDATECTL_Release(pme->m_pIDateCtl);
FREEIF(pme);
}
/**************************************************************************
* Function Name : CMainWin_Delete
* Description : This function enables/disables the main window.
* Input Parameters : IWindow * ;boolean
* Output Parameters: None
* Return Value : None
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void Calendar_Enable(IWindow * po, boolean bEnable)
{
Calendar * pme = (Calendar *)po;
if (!CWindow_ProcessEnable(po, bEnable))
return;
/*判断当前窗口是否为激活状态*/
if (!pme->m_bActive)
{
return;
}
//IMENUCTL_SetActive(pme->m_pMainMenu, TRUE);
//IMENUCTL_SetSel(pme->m_pMainMenu, pme->m_pOwner->m_wMainWin);
//SH_DrawImage(pme->m_pLogo, &pme->m_rectLogo, TRUE);
}
static void Calendar_InitCuros(Calendar *pme)
{
uint8 row = 0;
uint8 col = 0;
AEERect rDay;
AECHAR cDay[3] = {' ','\0'};
for( row = 0; row < MAX_Y_POS; row++ )
{
for( col = 0; col < MAX_X_POS; col++)
{
if(
pme->m_days[row][col] == pme->m_currDay&&
pme->m_currMonth == pme->m_pOwner->m_month&&
pme->m_currYear == pme->m_pOwner->m_year
)
{
SETAEERECT( &rDay, pme->m_xPoses[col]-4, pme->m_yPoses[row],
pme->m_fontW, pme->m_fontH );
IDISPLAY_DrawRect(
pme->m_pIDisplay,
&rDay,
CUR_RGB,
NULL,
IDF_RECT_FRAME
);
}
}
}
for( row = 0; row < MAX_Y_POS; row++ )
{
for( col = 0; col < MAX_X_POS; col++)
{
if( pme->m_days[row][col] == pme->m_pOwner->m_day)
{
/*记录当前天的坐标*/
pme->m_currXPos = col;
pme->m_currYPos = row;
WWRITELONG(cDay,pme->m_days[row][col]);
SETAEERECT( &rDay, pme->m_xPoses[col]-4, pme->m_yPoses[row],
pme->m_fontW, pme->m_fontH );
IDISPLAY_FillRect
(
pme->m_pIDisplay,
&rDay,
CUR_RGB
);
IDISPLAY_DrawText(
pme->m_pIDisplay,
AEE_FONT_NORMAL,
cDay,
-1,
pme->m_xPoses[col],
pme->m_yPoses[row],
NULL,
IDF_TEXT_TRANSPARENT
);
return;
}
}
}
}
/**************************************************************************
* Function Name : CMainWin_Redraw
* Description : This function redraws the main window.
* Input Parameters : IWindow *
* Output Parameters: None
* Return Value : None
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
void Calendar_Redraw(IWindow * po)
{
Calendar * pme = (Calendar *)po;
/*窗口不是激活状态直接返回*/
if (!pme->m_bActive)
return;
/*清屏*/
IDISPLAY_ClearScreen(pme->m_pIDisplay);
Calender_DrawGround(pme);
Calendar_DrawDate(pme);
Calendar_InitCuros(pme);
/*刷屏*/
IDISPLAY_Update(pme->m_pIDisplay);
}
/**************************************************************************
* Function Name : CMainWin_HandleEvent
* Description : This function processes events routed to main window.
* Input Parameters : IWindow * , AEEEvent , uint16 , uint32
* Output Parameters: None
* Return Value : boolean
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
boolean Calendar_HandleEvent(IWindow * po, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
Calendar * pme = (Calendar *)po;
if (eCode == EVT_COPYRIGHT_END )
{
Schedule_Redraw(pme->m_pOwner, TRUE);
return TRUE;
}
/*判断是否是KEY事件*/
if (SH_ISEVTKEY(eCode))
{
switch(eCode)
{
case EVT_KEY:
switch(wParam)
{
case AVK_UP:
Calendar_MoveCusor(pme,UP);
Calender_DrawGround(pme);
return(TRUE);
case AVK_DOWN:
Calendar_MoveCusor(pme,DOWN);
Calender_DrawGround(pme);
return(TRUE);
case AVK_LEFT:
Calendar_MoveCusor(pme,LEFT);
Calender_DrawGround(pme);
return(TRUE);
case AVK_RIGHT:
Calendar_MoveCusor(pme,RIGHT);
Calender_DrawGround(pme);
return(FALSE);
case AVK_SOFT1:
//APP_STATE_MENUDISP date select /event view /event creat
Schedule_SetWindow(pme->m_pOwner, APP_STATE_MENUDISP, 0);
return TRUE;
case AVK_SOFT2:
//APP_WEEKDATEDISP_WIN week view
Schedule_SetWindow(pme->m_pOwner, APP_WEEKDATEDISP_WIN, 0);
return TRUE;
case AVK_SELECT:
/*back to oneday event window*/
Schedule_SetWindow(pme->m_pOwner, APP_STATE_ONEDAYDISP, 0);
return TRUE;
default:
return (FALSE);
}
}
}
return FALSE;
}
/**************************************************************************
* Function Name : Canarder_InitDate
* Description : 初始化
* Input Parameters : Calendar*
* Output Parameters: None
* Return Value : None
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
static void Calendar_InitDate(Calendar *pme)
{
AECHAR temW[] = {'0','0','0','\0'};
JulianType julianDate;
uint8 screenWidth = (uint8)pme->m_pOwner->DeviceInfo.cxScreen;
uint8 screenHeight = (uint8)pme->m_pOwner->DeviceInfo.cyScreen - 20;
GETJULIANDATE(0, &julianDate);
pme->m_year = pme->m_pOwner->m_year;
pme->m_month = pme->m_pOwner->m_month;
pme->m_day = pme->m_pOwner->m_day;
pme->m_monthDays = 0;
IDATECTL_SetDate(
pme->m_pIDateCtl,
pme->m_year,
pme->m_month,
1
);
pme->m_currMonth = (uint8)julianDate.wMonth;
pme->m_currDay = (uint8)julianDate.wDay;
pme->m_currYear = julianDate.wYear;
pme->m_fontW = IDISPLAY_MeasureText( pme->m_pIDisplay, AEE_FONT_NORMAL, temW );
/*文字的高度*/
pme->m_fontH = IDISPLAY_GetFontMetrics( pme->m_pIDisplay,AEE_FONT_NORMAL,NULL,NULL );
pme->m_unitW = screenWidth / 7;
pme->m_unitH = (screenHeight - 40) / 6;
pme->m_tmfdow = (uint8)IDATECTL_GetDayOfWeek( pme->m_pIDateCtl );
pme->m_monthDays = Calender_getMonthDays(pme->m_year,pme->m_month);
}
/**************************************************************************
* Function Name : Calendar_DrawDate
* Description : 在屏幕上绘制当前月的所有天
* Input Parameters : Calendar*
* Output Parameters: None
* Return Value : None
* Date : 2007/04/11
* Author : ZhongNingLin@neusoft.com
***************************************************************************/
static void Calendar_DrawDate(Calendar *pme)
{
AECHAR cDay[3] = {' ','\0'};
AEERect rDay;
uint8 row = 0;
uint8 col = 0;
uint8 temp = pme->m_tmfdow;
uint8 dayCount = 1;
Calender_EraseDates(pme);
for( row = 0; row < MAX_Y_POS; row++ )
{
for( col = temp; col < MAX_X_POS; col++ )
{
temp = 0;
if( dayCount > pme->m_monthDays )
break;
pme->m_days[row][col] = dayCount;
if(
pme->m_days[row][col] == pme->m_currDay&&
pme->m_currMonth == pme->m_month&&
pme->m_currYear == pme->m_year
)
{
SETAEERECT( &rDay, pme->m_xPoses[col]-4, pme->m_yPoses[row],
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -