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

📄 menu.c

📁 brew平台下用VC开发的电话本
💻 C
字号:

#include "Menu.h"


CSoftMenuCtl* CSoftMenuCtl_New(IApplet* pOwner)
{
	CSoftMenuCtl* pme=NULL;
	int nAscent,nDescent;
	AEEDeviceInfo *   pdi;
	
	pme = MALLOC(sizeof(CSoftMenuCtl));
	if (!pme)
		return NULL;
	pme->m_pIModule= ((AEEApplet*)pOwner)->m_pIModule;
	pme->m_pIShell = ((AEEApplet*)pOwner)->m_pIShell;
	pme->m_pIDisplay = ((AEEApplet*)pOwner)->m_pIDisplay;

	//得到屏幕和字体信息,并将矩形设置为正常字体高,且紧贴屏幕下沿
	pdi = MALLOC(sizeof(AEEDeviceInfo));
	if (!pdi)
		return NULL;
	ISHELL_GetDeviceInfo(pme->m_pIShell, pdi);
	IDISPLAY_GetFontMetrics(pme->m_pIDisplay, AEE_FONT_NORMAL, &nAscent, &nDescent);
	SETAEERECT(&pme->m_Rect,0,pdi->cyScreen-(nAscent+nDescent),pdi->cxScreen,nAscent+nDescent);
	FREEIF(pdi);

	pme->m_vText=NULL;
	pme->m_vImage=NULL;
	pme->m_nTextCount=0;
	pme->m_nImageCount=0;
	pme->isActive=FALSE;
	pme->m_sBackground.isImage=TRUE;
	pme->m_sBackground.pImage=NULL;
	return pme;
}
boolean CSoftMenuCtl_Redraw(IFMenuCtl * pi)
{
	CSoftMenuCtl* pme=(CSoftMenuCtl*)pi;
	if(pme->m_sBackground.isImage==TRUE)
	{
		if(pme->m_sBackground.pImage!=NULL)
		{
			IIMAGE_Draw(pme->m_sBackground.pImage,pme->m_Rect.x,pme->m_Rect.y);
		}
	}
	else
	{
		IDISPLAY_DrawRect(pme->m_pIDisplay,&pme->m_Rect,0,pme->m_sBackground.ncolor, \
			IDF_RECT_FILL);
	}
	if(pme->m_nTextCount>=2)
	{
		IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_NORMAL,pme->m_vText[0].pText,-1,pme->m_Rect.x, \
			pme->m_Rect.y,&pme->m_Rect,IDF_ALIGN_LEFT+IDF_ALIGN_MIDDLE+IDF_TEXT_TRANSPARENT \
			+IDF_TEXT_INVERTED);
		IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_NORMAL,pme->m_vText[1].pText,-1,pme->m_Rect.x, \
			pme->m_Rect.y,&pme->m_Rect,IDF_ALIGN_RIGHT+IDF_ALIGN_MIDDLE+IDF_TEXT_TRANSPARENT \
			+IDF_TEXT_INVERTED);
	}
	return TRUE;
}
boolean CSoftMenuCtl_SetBackground(IFMenuCtl* pi,boolean isTrans,IImage* pImage,RGBVAL color)
{
	CSoftMenuCtl* pme=(CSoftMenuCtl*)pi;

	if(isTrans!=TRUE)
	{
		if(pImage==NULL)
		{
			pme->m_sBackground.isImage=FALSE;
			pme->m_sBackground.ncolor=color;
		}
		else
		{
			pme->m_sBackground.isImage=TRUE;
			pme->m_sBackground.pImage=pImage;
		}
	}
	else
	{
		pme->m_sBackground.isImage=TRUE;
		pme->m_sBackground.pImage=NULL;
	}
	return TRUE;
}

boolean CSoftMenuCtl_SetSoftKey(IFMenuCtl* pi,uint16 wFirstID,AECHAR* pLText,AECHAR* pRText)
{
	CSoftMenuCtl* pme=(CSoftMenuCtl*)pi;
	
	if(pme->m_vText==NULL)
	{
		pme->m_vText=MALLOC(2*sizeof(*(pme->m_vText)));
		if(!pme->m_vText)
			return FALSE;
		pme->m_nTextCount=2;
		pme->m_vText[0].nId=wFirstID;
		pme->m_vText[1].nId=wFirstID+1;	
	}
	else
	{
		if(pLText!=NULL)
			FREEIF(pme->m_vText[0].pText);
		if(pRText!=NULL)
			FREEIF(pme->m_vText[1].pText);
	}
	
	if(pLText!=NULL)
		pme->m_vText[0].pText=WSTRDUP(pLText);
	if(pRText!=NULL)
		pme->m_vText[1].pText=WSTRDUP(pRText);

	return TRUE;
}

boolean     CSoftMenuCtl_HandleEvent    (IFMenuCtl * pi, AEEEvent evt, uint16 wParam, uint32 dwParam)
{
	CSoftMenuCtl* pme=(CSoftMenuCtl*)pi;
	if(pme->isActive==FALSE)
		return FALSE;

	if(evt==EVT_KEY)
	{
		switch(wParam)
		{
		case AVK_SOFT1:
			ISHELL_HandleEvent(pme->m_pIShell,EVT_COMMAND,pme->m_vText[0].nId,0);
			return TRUE;
			break;
		case AVK_SOFT2:
			ISHELL_HandleEvent(pme->m_pIShell,EVT_COMMAND,pme->m_vText[1].nId,0);
			return TRUE;
			break;
		default:
			break;
		}
	}
	return FALSE;
}

void        CSoftMenuCtl_SetActive      (IFMenuCtl * pi, boolean isActive)
{
	CSoftMenuCtl* pme=(CSoftMenuCtl*)pi;
	if(isActive==TRUE && pme->isActive!=TRUE)
	{
		pme->isActive=isActive;
		CSoftMenuCtl_Redraw(pi);
	}

	if(isActive==FALSE && pme->isActive!=FALSE)
	{
		pme->isActive=isActive;
	}
}

/*boolean	CSoftMenuCtl_AddPopMenuItem(IFMenuCtl* pi,AECHAR* pText)
{
	CSoftMenuCtl* pme=(CSoftMenuCtl*)pi;
	AEERect		   rect;
	AEEDeviceInfo* pdi;
	int n=0;
	int cx=0,cy=0;

	if(pme->pIPopMenu==NULL)
	{
		if(ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_MENUCTL,&pme->pIPopMenu)!=SUCCESS)
			return FALSE;

		pdi = MALLOC(sizeof(AEEDeviceInfo));
		if (!pdi)
		return FALSE;
		ISHELL_GetDeviceInfo(pme->m_pIShell, pdi);
		cx=pdi->cxScreen;
		cy=pdi->cyScreen;
		FREEIF(pdi);

		SETAEERECT(&rect,0,cy/3,cx/2,pme->m_Rect.y-cy/3);
		IMENUCTL_SetRect(pme->pIPopMenu,&rect);
	}
	n=pme->m_vText[pme->m_nTextCount-1].nId;
	n=n+1+IMENUCTL_GetItemCount(pme->pIPopMenu);
	IMENUCTL_AddItem(pme->pIPopMenu,NULL,0,n,pText,0);

	return TRUE;
}*/

void	CSoftMenuCtl_Release(IFMenuCtl * pi)
{
	CSoftMenuCtl* pme = (CSoftMenuCtl*)pi;
	int i=0;
	for(i=pme->m_nTextCount-1;i>=0;i--)
	{
		FREE(pme->m_vText[i].pText);
	}
	FREE(pme->m_vText);
	for(i=pme->m_nImageCount-1;i>=0;i--)
	{
		FREE(pme->m_vImage[i].pImage);
		FREE(&pme->m_vImage[i]);
	}
	FREEIF(pme);

}

⌨️ 快捷键说明

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