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

📄 calendar.c

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