📄 menucontroler.cpp
字号:
// MenuControler.cpp: implementation of the CMenuControler class.
//
//////////////////////////////////////////////////////////////////////
#include "MenuControler.h"
#include "ImageController.h"
#include "MainHandler.h"
#include "TextController.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMenuController::CMenuController(CAppMainHandler *pAppMain)
{
m_pAppMain = pAppMain;
m_nMenuCount = m_nSelIdx = m_nPastSelIdx = 0;
m_pImageMenu = NULL;
}
CMenuController::~CMenuController()
{
}
void CMenuController::SetMenuOption(char *szRes, short nPos, short nType, short nImgWidth, short nImgHeight)
{
AEEDeviceInfo aeeDI;
m_pchResName = szRes;
m_menuopt.nMenuType = nType;
m_menuopt.nMenuPos = nPos;
m_menuopt.nImgWidth = nImgWidth;
m_menuopt.nImgHeight = nImgHeight;
ISHELL_GetDeviceInfo(m_pAppMain->m_pIShell, &aeeDI);//拳搁俊 焊老 皋春肮荐甫 拌魂
m_menuopt.nHorzCnt = aeeDI.cxScreen / (m_menuopt.nImgWidth+4);
m_menuopt.nVertCnt = aeeDI.cyScreen / (m_menuopt.nImgHeight+4);
m_menuopt.xAxis = aeeDI.cxScreen - nImgWidth - 4;
m_menuopt.yAxis = aeeDI.cyScreen - nImgHeight - 4;
m_nStartIdx = 0;
m_nEndIdx = m_menuopt.nHorzCnt;
}
boolean CMenuController::CreateMenu(uint16 nImageID, uint16 nTag, char *chComment)
{
if( m_pImageMenu )
return FALSE;
m_nMenuCount = 1;
m_pImageMenu = new IMAGEMENUITEM;
m_pImageMenu->imgData.nImageID = nImageID;
m_pImageMenu->imgData.nMenuTag = nTag;
STRCPY(m_pImageMenu->imgData.chComment, chComment);
m_pImageMenu->pLink = NULL;
m_pLastAddr = m_pImageMenu; // 付瘤阜 皋春林家 历厘
return TRUE;
}
short CMenuController::AddItem(uint16 nImageID, uint16 nTag, char *chComment)
{
m_nMenuCount += 1;
PIMAGEMENUITEM pMenuItem = new IMAGEMENUITEM;
pMenuItem->imgData.nImageID = nImageID;
pMenuItem->imgData.nMenuTag = nTag;
STRCPY(pMenuItem->imgData.chComment, chComment);
pMenuItem->pLink = NULL;
m_pLastAddr->pLink = pMenuItem;
m_pLastAddr = pMenuItem;
(m_nMenuCount > m_menuopt.nHorzCnt ? m_nEndIdx = m_menuopt.nHorzCnt - 1 : m_nEndIdx = m_nMenuCount -1);
return m_nMenuCount;
}
PIMAGEMENUITEM CMenuController::GetItem(short nIdx)
{
int nCount = 0;
PIMAGEMENUITEM pMenuItem = NULL ;
pMenuItem = m_pImageMenu;
while( pMenuItem )
{
if( nIdx == nCount )
return pMenuItem;
pMenuItem = pMenuItem->pLink;
nCount++;
}
return NULL;
}
PIMAGEMENUITEM CMenuController::GetItem2(uint32 nImageID)
{
PIMAGEMENUITEM pMenuItem = NULL;
pMenuItem = m_pImageMenu;
while( pMenuItem )
{
if( pMenuItem->imgData.nImageID == nImageID )
return pMenuItem;
pMenuItem = pMenuItem->pLink;
}
return NULL;
}
void CMenuController::DrawMenu() //First, Test Horizon Menu
{
CTextController *pTxtCtl = new CTextController(m_pAppMain);
CImageController *pImgCtl = new CImageController(m_pAppMain);
PIMAGEMENUITEM pMenuItem = NULL ;
IDISPLAY_ClearScreen(m_pAppMain->m_pIDisplay);
int16 i=0;
int16 x;
pMenuItem = m_pImageMenu;
for( int j = 0; j < m_nStartIdx; j++)
pMenuItem = pMenuItem->pLink;
while( pMenuItem )
{
i++;
if( i > m_menuopt.nHorzCnt )
break;
(i == 1?(x = 4):(x += 19 ));
pImgCtl->DrawImage(x, m_menuopt.yAxis+2, m_pchResName, pMenuItem->imgData.nImageID);
pMenuItem = pMenuItem->pLink;
}
IDISPLAY_Update(m_pAppMain->m_pIDisplay);
SelectMenu();
// RestoreMenu();
delete pImgCtl;
}
void CMenuController::SelectMenu() //Select Menu by m_nSelIdx
{
int16 x, nAbs;
CImageController *pImgCtl = new CImageController(m_pAppMain);
nAbs = m_nSelIdx - m_nStartIdx;
pImgCtl->DrawFillRect(nAbs*20 + 2, m_menuopt.yAxis-2, m_menuopt.nImgWidth+4, m_menuopt.nImgHeight+6, RGB_NAVY);
x = nAbs * 20 + 4;
PIMAGEMENUITEM pMenuItem = NULL;
pMenuItem = GetItem(m_nSelIdx);
pImgCtl->DrawImage(x, m_menuopt.yAxis+2, m_pchResName, pMenuItem->imgData.nImageID);
IDISPLAY_Update(m_pAppMain->m_pIDisplay);
delete pImgCtl;
}
void CMenuController::RestoreMenu() //Restore Menu by m_nPastSelIdx
{
int16 x, nAbs;
CImageController *pImgCtl = new CImageController(m_pAppMain);
nAbs = m_nPastSelIdx - m_nStartIdx;
pImgCtl->DrawFillRect(nAbs*20 + 2, m_menuopt.yAxis-2, m_menuopt.nImgWidth+4, m_menuopt.nImgHeight+6, RGB_WHITE);
x = nAbs * 20 + 4;
PIMAGEMENUITEM pMenuItem = NULL;
pMenuItem = GetItem(m_nPastSelIdx);
pImgCtl->DrawImage(x, m_menuopt.yAxis+2, m_pchResName, pMenuItem->imgData.nImageID);
IDISPLAY_Update(m_pAppMain->m_pIDisplay);
delete pImgCtl;
}
short CMenuController::NextMenu() //Select Next Menu
{
( m_nMenuCount-1 > m_nSelIdx ? m_nSelIdx++ : m_nSelIdx = m_nMenuCount - 1 );
if( m_nSelIdx > m_nEndIdx )
{
m_nStartIdx++;
m_nEndIdx++;
m_nPastSelIdx = m_nSelIdx;
DrawMenu();
return m_nSelIdx;
}
RestoreMenu();
m_nPastSelIdx = m_nSelIdx;
SelectMenu();
return m_nSelIdx;
}
short CMenuController::PreviousMenu() //Select Previous Menu
{
( m_nSelIdx > 0 ? m_nSelIdx-- : m_nSelIdx = 0 );
if( m_nSelIdx < m_nStartIdx )
{
m_nStartIdx--;
m_nEndIdx--;
m_nPastSelIdx = m_nSelIdx;
DrawMenu();
return m_nSelIdx;
}
RestoreMenu();
m_nPastSelIdx = m_nSelIdx;
SelectMenu();
return m_nSelIdx;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -