⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.c

📁 brew开发的日历程序 完全模仿mediaplayer的结构设计 值得初学者学习
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -