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

📄 shloodevent.c

📁 brew开发的日历程序 完全模仿mediaplayer的结构设计 值得初学者学习
💻 C
📖 第 1 页 / 共 2 页
字号:
	case IDS_EDITE_EVT:	   
	   CExamineEventWin_EditEventDetail(pme);
	   return TRUE;
	default:
		return FALSE;
	}


}

/**************************************************************************
*	Function Name	 :	CExamineEventWin_HandleEvent                                            
*	Description		 :	handle current window events
*	Input Parameters :	IWindow * , AEEEvent , uint16 , uint32 							
*	Output Parameters:	None												
*	Return Value	 :	boolean			
*	Date			 :	2007/04/18											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
boolean CExamineEventWin_HandleEvent(IWindow * po, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
   ExamineEventWin *  pme = (ExamineEventWin *)po;
   boolean     bRet = TRUE;

   if ( SH_ISCLR(eCode) )
   {
	   switch( pme->m_mState )
	   {
		   case APP_SURE_DI:
		   case APP_SURE_DA:			   
			   IMENUCTL_SetActive( pme->m_pMenuCtl, TRUE); 
			   IMENUCTL_Redraw(pme->m_pMenuCtl); 
			   pme->m_mState = APP_MENU_OPTION;
		       return TRUE;
		  
		   default:
			   break;
	   }
      /*返回目录窗口*/
      Schedule_SetWindow(pme->m_pOwner, APP_STATE_MENUDISP, 0);
      return TRUE;
   }
            
   if (SH_ISEVTKEY(eCode))
   {
	   if(pme->m_pMenuCtl != NULL)
		   IMENUCTL_HandleEvent(pme->m_pMenuCtl, eCode, wParam, dwParam); 
	   	switch(wParam)
		{  
			case AVK_SOFT1:/*操作*/	
				switch( pme->m_mState )/*窗口状态*/
				{
				case APP_MENU_MAIN:
					CExamineEventWin_option(pme);
					return TRUE;
				case APP_MENU_OPTION:
					return CExamineEventWin_SelectOperator(pme);
				default:
					return FALSE;
				}
				
			case AVK_SOFT2:/*返回*/
				switch( pme->m_mState )
				{
				case APP_MENU_VIEWD:
					CExamineEventWin_InitMainMenu(pme);					
					return TRUE;
				default:
					/*返回主窗口*/
                    Schedule_SetWindow(pme->m_pOwner, APP_MAIN_WIN, 0);
				    return TRUE;
				}
				
			case AVK_SELECT:
				switch( pme->m_mState )
				{
				case APP_SURE_DI:/*删除当前选中的事件*/
					ScheDB_DeleteEventItem( pme->m_pOwner, pme->m_mCindex );
		            CExamineEventWin_InitMainMenu(pme);					
					return TRUE;
				case APP_SURE_DA:/*删除所有事件*/
					ScheDB_EmptyEventDatabase( pme->m_pOwner->m_pScheDB);
		            CExamineEventWin_InitMainMenu(pme);					
					return TRUE;
				default:
					break;
				}
				return CExamineEventWin_SelectOperator(pme);
			default:
				return FALSE;
		}
   }

   return bRet;
}

/**************************************************************************
*	Function Name	 :	SCEvent_DrawBottomScreen                                            
*	Description		 :	控制键
*	Input Parameters :	CreateEventWin* 								
*	Output Parameters:	None												
*	Return Value	 :	None			
*	Date			 :	2007/04/16											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
static void SCEvent_DrawBottom(ExamineEventWin* pme ,const AECHAR *command)
{
	AEERect  rect;
	int fontHe = 0;
	int fontWi = 0;
	
	const AECHAR   back[] = { 0x8fd4, 0x56de, 0 }; //返回	

	/*文字的高度*/
	fontHe  = IDISPLAY_GetFontMetrics( pme->m_pIDisplay,AEE_FONT_NORMAL,NULL,NULL ); 
	fontWi  = IDISPLAY_MeasureText( pme->m_pIDisplay, AEE_FONT_NORMAL, back ); 

	SETAEERECT( &rect, 0, pme->m_pOwner->DeviceInfo.cyScreen - fontHe, pme->m_pOwner->DeviceInfo.cxScreen,fontHe );
	/*填充矩形的颜色*/
	IDISPLAY_FillRect(pme->m_pIDisplay,&rect,RECT_BACKGROUND); 

	IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_NORMAL,command,-1,0,pme->m_pOwner->DeviceInfo.cyScreen - fontHe,NULL,IDF_TEXT_TRANSPARENT); 
	IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_NORMAL,back,  -1,pme->m_pOwner->DeviceInfo.cxScreen - fontWi,pme->m_pOwner->DeviceInfo.cyScreen - fontHe,NULL,IDF_TEXT_TRANSPARENT); 
}

/**************************************************************************
*	Function Name	 :	CExamineEventWin_InitMainMenu                                            
*	Description		 :	初始化菜单控件
*	Input Parameters :	ExamineEventWin * 					
*	Output Parameters:	None												
*	Return Value	 :	boolean			
*	Date			 :	2007/04/18											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
boolean CExamineEventWin_InitMainMenu(ExamineEventWin *pme)
{
	const AECHAR option[] = { 0x64cd, 0x4f5c, 0 }; //操作

	pme->m_bHasMemo = CExamineEventWin_HasMemos(pme);

	if( pme->m_bHasMemo )
	{
		ReleaseObj((void**)&pme->m_pMenuCtl); 
		/*初始化菜单*/
		if((ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_MENUCTL,(void**)(&pme->m_pMenuCtl)) != SUCCESS) )
			return FALSE;
		/*设置菜单外观属性*/
	 SH_SetMenuAttr(pme->m_pMenuCtl,AEECLSID_MENUCTL,MAKE_RGB(255,0,0),&pme->m_rMenuRect,MP_MAXSOFTKEYITEMS);
	 
	 /*向菜单中加菜单项*/
	 CExamineEventWin_AddItemToMenu(pme);

	  /*重绘菜单*/
	 IMENUCTL_Redraw(pme->m_pMenuCtl);
	 /*激活菜单*/
	 IMENUCTL_SetActive(pme->m_pMenuCtl,TRUE); 

	}
	else
    {
		CExamineEventWin_HasNoMemo(pme);
	}

	CExamineEventWin_DrawDate(pme);
	
	SCEvent_DrawBottom(pme, option);

	pme->m_mState = APP_MENU_MAIN;
	return TRUE;
}


/**************************************************************************
*	Function Name	 :	CExamineEventWin_DrawDate                                            
*	Description		 :	handle current window events
*	Input Parameters :	ExamineEventWin * 					
*	Output Parameters:	None												
*	Return Value	 :	None			
*	Date			 :	2007/04/18											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
static void CExamineEventWin_DrawDate(ExamineEventWin* pme)
{	
	
	AECHAR sDate[30] = {' ','\0'};
	AEERect  rect;
	int fontHe = 0;
	int fontWi = 0;			
    Schedule_GetDateString(pme->m_pOwner, sDate);
			

	/*字体的高度*/
    fontHe  = IDISPLAY_GetFontMetrics( pme->m_pIDisplay,AEE_FONT_NORMAL,NULL,NULL ); 
	fontWi  = IDISPLAY_MeasureText( pme->m_pIDisplay, AEE_FONT_NORMAL, sDate ); 
 
    rect.x  = 0;
    rect.y  = 20;
    rect.dx = pme->m_pOwner->DeviceInfo.cxScreen;
    rect.dy = fontHe;
    /*填充矩形的颜色*/
	IDISPLAY_FillRect(pme->m_pIDisplay,&rect,RECT_BACKGROUND); 
	//AEE_FONT_BOLD+1
	IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_NORMAL,sDate,-1,rect.dx/2 - fontWi/2,20,NULL,IDF_TEXT_TRANSPARENT);

}

/**************************************************************************
*	Function Name	 :	CExamineEventWin_HasMemos                                            
*	Description		 :	判断当前日期是否有事件
*	Input Parameters :	ExamineEventWin * 					
*	Output Parameters:	None												
*	Return Value	 :	None			
*	Date			 :	2007/04/18											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
static boolean CExamineEventWin_HasMemos(ExamineEventWin* pme)
{
	AECHAR sDate[30] = {' ','\0'};		
	boolean hasEvts  = FALSE; 

    pme->data = (EventData*)MALLOC(sizeof(EventData));
	if( pme->data == NULL)
		return FALSE;

	Schedule_GetDateString(pme->m_pOwner, sDate);
	WSTRCPY( pme->data->eDate, sDate );

	//hasEvts = SEventContent_GetEvtByDate(pme->m_pOwner, pme->data);

	hasEvts = ScheDB_GetEventByDate(pme->m_pOwner, pme->data );

	if( !hasEvts )
	{
		FREEIF( pme->data );
		return FALSE;
	}
	    
	return TRUE;
}

/**************************************************************************
*	Function Name	 :	CExamineEventWin_AddItemToMenu                                            
*	Description		 :	添加当前日期所有事件到菜单
*	Input Parameters :	ExamineEventWin * 					
*	Output Parameters:	None												
*	Return Value	 :	None			
*	Date			 :	2007/04/19											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
void CExamineEventWin_AddItemToMenu(ExamineEventWin *pme)
{
    EventData * node = NULL;
	if( pme->data == NULL)
		return;

	while(pme->data != NULL)
	{
		node = pme->data;

		switch( node->eType )
		{
		case IDS_EVTY_CANLEN:/*生日事件*/
			SH_AddMenuItem(pme->m_pMenuCtl, NULL, node->eName, IDI_EVTY_CANLEN, node->index,0);		
			break;
		case IDS_EVTY_MEMO:/*备忘录*/
			SH_AddMenuItem(pme->m_pMenuCtl, NULL, node->eContent, IDI_EVTY_MEMO, node->index,0);	
			break;
		case IDS_EVTY_ANNIVER:/*通话*/
			SH_AddMenuItem(pme->m_pMenuCtl, NULL, node->eName, IDI_EVTY_ANNIVER, node->index,0);		
			break;
		default:
			break;
		}
			
		pme->data = pme->data->next;
		FREEIF(node);
	}
	FREEIF(pme->data);	

	//SEventContent_FreeEvent(pme->data);
}
/**************************************************************************
*	Function Name	 :	CExamineEventWin_DrawDate                                            
*	Description		 :	handle current window events
*	Input Parameters :	ExamineEventWin * 					
*	Output Parameters:	None												
*	Return Value	 :	None			
*	Date			 :	2007/04/18											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
void CExamineEventWin_HasNoMemo(ExamineEventWin* pme)
{
	const AECHAR content[] = { '(', 0x65e0, 0x5907, 0x5fd8, ')', 0 }; //(无备忘)
	int fontHe  = 0;
	int fontWi  = 0;	
	int screenW = 0;
	if( pme->m_pMenuCtl != NULL)
	{
		IMENUCTL_Reset(pme->m_pMenuCtl); 
		IDISPLAY_FillRect(pme->m_pIDisplay,&pme->m_rMenuRect,MAKE_RGB(255, 255, 255)); 
	}	
	/*字体的高度*/
    fontHe  = IDISPLAY_GetFontMetrics( pme->m_pIDisplay,AEE_FONT_NORMAL,NULL,NULL ); 
	/*字体的宽度*/
	fontWi  = IDISPLAY_MeasureText( pme->m_pIDisplay, AEE_FONT_NORMAL, content ); 
    /*设备屏幕的宽度*/
	screenW = pme->m_pOwner->DeviceInfo.cxScreen;
    /*绘制指定的文本*/
	IDISPLAY_DrawText(
		              pme->m_pIDisplay,AEE_FONT_NORMAL,content,
		              -1,screenW/2 - fontWi/2,20 + fontHe,NULL,IDF_TEXT_TRANSPARENT
					 );
    /*刷新屏幕*/
	IDISPLAY_Update( pme->m_pIDisplay ); 

}

/**************************************************************************
*	Function Name	 :	ReleaseObj                                            
*	Description		 :	释放资源
*	Input Parameters :	void *** 								
*	Output Parameters:	None												
*	Return Value	 :	None			
*	Date			 :	2007/04/18											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
static void ReleaseObj(void ** ppObj)
{
   if ( ppObj && *ppObj ) 
   {
      (void)IBASE_Release(((IBase *)*ppObj));
      *ppObj = NULL;
   }
}


/**************************************************************************
*	Function Name	 :	ReleaseObj                                            
*	Description		 :	对话框
*	Input Parameters :	void *** 								
*	Output Parameters:	None												
*	Return Value	 :	None			
*	Date			 :	2007/04/18											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
 
static void CExamineEventWin_DrawDialog(ExamineEventWin * pme,const AECHAR *szText) 
{  
	AEERect nRect; 
	int fontWidth = IDISPLAY_MeasureText(pme->m_pIDisplay,AEE_FONT_NORMAL,szText); 	
	int fontHeight = IDISPLAY_GetFontMetrics(pme->m_pIDisplay,AEE_FONT_NORMAL,NULL,NULL);
	int screenWidth = pme->m_pOwner->DeviceInfo.cxScreen; 
	int screenHeight = pme->m_pOwner->DeviceInfo.cyScreen;
	int rectWidth = fontWidth + 10;
	int rectHeight = fontHeight + 10;
	
	IMENUCTL_SetActive( pme->m_pMenuCtl, FALSE); 

	SETAEERECT(&nRect,screenWidth/2 - rectWidth/2,screenHeight/2-rectHeight/2,rectWidth,rectHeight); 
	/*填充矩形的颜色*/
	IDISPLAY_FillRect(pme->m_pIDisplay,&nRect,MAKE_RGB(0, 255, 255)); 
	
	IDISPLAY_DrawText(pme->m_pIDisplay,   
			AEE_FONT_NORMAL, 
			szText,  
			-1,
			screenWidth/2 - fontWidth/2,   
			screenHeight/2 - fontHeight/2, 			
			&nRect,   
			IDF_TEXT_TRANSPARENT); 
	
	IDISPLAY_Update(pme->m_pIDisplay); 

	if( IMENUCTL_GetSel(pme->m_pMenuCtl) == IDS_DELETE_EVT )
	    pme->m_mState = APP_SURE_DI;
	else
		pme->m_mState = APP_SURE_DA;
	
} 
//----------------------------end of file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -