📄 menu.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 + -