📄 brewmainmenu.cpp
字号:
// BrewMainMenu.cpp: implementation of the CBrewMainMenu class.
//
//////////////////////////////////////////////////////////////////////
#include "BrewMainMenu.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBrewMainMenu::CBrewMainMenu()
{
m_rtarrow.dx = 0;
m_bBottomBar = m_bTopBar = false;
m_pos.m_nPos = 0;
m_pGs = NULL;
m_pHelp = NULL;
m_pBitmap = NULL;
}
CBrewMainMenu::~CBrewMainMenu()
{
RELEASEIF(m_pCorpLogo,IBITMAP);
RELEASEIF(m_pMenu,IBITMAP);
RELEASEIF(m_pTheme,IBITMAP);
RELEASEIF(m_pArrowBl,IBITMAP);
RELEASEIF(m_pArrowWt,IBITMAP);
RELEASEIF(m_pBitmap,IBITMAP);
RELEASE(m_pGs);
RELEASE(m_pAbout);
RELEASE(m_pHelp);
}
void CBrewMainMenu::setFrame(void *f)
{
frame = (CBrewLogin*)f;
m_pShell = frame->frame->getCurrentShell();
m_offsetX = frame->frame->getScreenOffsetX();
m_offsetY = frame->frame->getScreenOffsetY();
m_pdi = frame->frame->getDeviceInfo();
m_pTheme = ISHELL_LoadResBitmap(m_pShell,GAMEVV_RES_FILE,IDB_MAIN_THEME);
m_pCorpLogo = ISHELL_LoadResBitmap(m_pShell,GAMEVV_RES_FILE,IDB_MAIN_CORPLOGO);
m_pMenu = ISHELL_LoadResBitmap(m_pShell,GAMEVV_RES_FILE,IDB_MAIN_MENU);
m_pArrowWt = ISHELL_LoadResBitmap(m_pShell,GAMEVV_RES_FILE,IDB_MAIN_WARROW);
m_pArrowBl = ISHELL_LoadResBitmap(m_pShell,GAMEVV_RES_FILE,IDB_MAIN_BARROW);
}
void CBrewMainMenu::paint(IDisplay *d, IGraphics *g)
{
//if(! m_bRedraw)
// return;
CBrewLoginCanvasBase* p = GetSomeCanvas();
if(p != NULL)
{
p->paint(d,g);
IDISPLAY_Update(d);
return;
}
CBrewLoginCanvasBase::paint(d,g);
AEERect rt1,rttmp,rtmenu;
AEEBitmapInfo biMenu;
GetMainRect(rt1);
/*
rttmp.dx = rt1.dx / 2;
rttmp.x = rt1.x;
rttmp.dy = rt1.dy;
rttmp.y = rt1.y;
IDISPLAY_FillRect(d,&rttmp,MAKE_RGB(255,255,255));
rttmp.x = rt1.x + rttmp.dx;
IDISPLAY_FillRect(d,&rttmp,MAKE_RGB(0,0,0));*/
if(m_pBitmap == NULL)
{
IBitmap* pDeviceBitmap;
if( IDISPLAY_GetDeviceBitmap( m_pIDisplay, &pDeviceBitmap ) != SUCCESS )
return ;
if( IBITMAP_CreateCompatibleBitmap( pDeviceBitmap, &m_pBitmap,
m_cxScreen+2*rt1.x,m_cyScreen+2*rt1.y) != SUCCESS )
{
IBITMAP_Release( pDeviceBitmap );
return;
}
IBITMAP_Release( pDeviceBitmap );
rttmp.dx = rt1.dx / 2;
rttmp.x = rt1.x;
rttmp.dy = rt1.dy;
rttmp.y = rt1.y;
IBITMAP_FillRect(m_pBitmap,&rttmp,IBITMAP_RGBToNative(m_pBitmap,MAKE_RGB(255,255,255)),AEE_RO_COPY);
rttmp.x = rt1.x + rttmp.dx;
IBITMAP_FillRect(m_pBitmap,&rttmp,IBITMAP_RGBToNative(m_pBitmap,MAKE_RGB(0,0,0)),AEE_RO_COPY);
//return;
rtmenu.x = rt1.x;
rtmenu.dx = rt1.dx;
rtmenu.dy = rt1.dy;
if(m_pTheme)
{
AEEBitmapInfo bi;
NativeColor color;
IBITMAP_GetInfo(m_pTheme, &bi, sizeof(bi));
color = IBITMAP_RGBToNative(m_pTheme, MAKE_RGB(255,0,255));
IBITMAP_SetTransparencyColor(m_pTheme, color);
AEERect rt2,rt3;
SETAEERECT(&rt2,0,0,bi.cx,bi.cy);
GetFitRect(&rt1,&rt2,&rt3,IDF_ALIGN_CENTER);
//IDISPLAY_BitBlt(d, rt3.x , rt3.y,
// rt3.dx, rt3.dy,(void*)m_pTheme,0,0,AEE_RO_TRANSPARENT );
IBITMAP_BltIn(m_pBitmap, rt3.x , rt3.y,
rt3.dx, rt3.dy,m_pTheme,0,0,AEE_RO_TRANSPARENT );
rtmenu.y = rt1.y + rt2.dy;
rtmenu.dy -= rt2.dy;
}
if(m_pCorpLogo)
{
AEEBitmapInfo bi;
NativeColor color;
IBITMAP_GetInfo(m_pCorpLogo, &bi, sizeof(bi));
color = IBITMAP_RGBToNative(m_pCorpLogo, MAKE_RGB(255,0,255));
IBITMAP_SetTransparencyColor(m_pCorpLogo, color);
AEERect rt2,rt3;
SETAEERECT(&rt2,0,0,bi.cx,bi.cy);
GetFitRect(&rt1,&rt2,&rt3,IDF_ALIGN_CENTER|IDF_ALIGN_BOTTOM);
IBITMAP_BltIn(m_pBitmap, rt3.x , rt3.y,
rt3.dx, rt3.dy,m_pCorpLogo,0,0,AEE_RO_TRANSPARENT );
rtmenu.dy -= rt2.dy;
}
if(m_pMenu)
{
AEEBitmapInfo bi;
NativeColor color;
IBITMAP_GetInfo(m_pMenu, &bi, sizeof(bi));
color = IBITMAP_RGBToNative(m_pMenu, MAKE_RGB(255,0,255));
IBITMAP_SetTransparencyColor(m_pMenu, color);
AEERect rt2,rt3,rttmp;
biMenu.cx = bi.cx;
biMenu.cy = bi.cy;
SETAEERECT(&rt2,0,0,rtmenu.dx,bi.cy);
SETAEERECT(&rttmp,rtmenu.x,rtmenu.y,rtmenu.dx,rtmenu.dy);
GetFitRect(&rttmp,&rt2,&rt3,IDF_ALIGN_RIGHT|IDF_ALIGN_MIDDLE);
m_pos.m_rt = rt3;
m_pos.m_ItemCounts = 6;
SETAEERECT(&rt2,0,0,bi.cx/2,bi.cy);
SETAEERECT(&rttmp,rtmenu.x,rtmenu.y,rtmenu.dx/2,rtmenu.dy);
GetFitRect(&rttmp,&rt2,&rt3,IDF_ALIGN_RIGHT|IDF_ALIGN_MIDDLE);
IBITMAP_BltIn(m_pBitmap, rt3.x , rt3.y,
rt3.dx, rt3.dy,m_pMenu,0,0,AEE_RO_TRANSPARENT );
SETAEERECT(&rttmp,rtmenu.x+rtmenu.dx/2,rtmenu.y,rtmenu.dx/2,rtmenu.dy);
GetFitRect(&rttmp,&rt2,&rt3,IDF_ALIGN_RIGHT|IDF_ALIGN_MIDDLE);
IBITMAP_BltIn(m_pBitmap, rt3.x , rt3.y,
rt3.dx, rt3.dy,m_pMenu,rt2.dx,0,AEE_RO_TRANSPARENT );
}
RELEASEIF(m_pCorpLogo,IBITMAP);
RELEASEIF(m_pMenu,IBITMAP);
RELEASEIF(m_pTheme,IBITMAP);
m_nx = (int16)(rtmenu.dx - biMenu.cx)/2;
m_ny = (int16)biMenu.cy/3;
}
IDISPLAY_BitBlt(d, rt1.x , rt1.y,
rt1.dx, rt1.dy,(void*)m_pBitmap,rt1.x,rt1.y,AEE_RO_COPY);
if(m_pArrowBl!=NULL && m_pArrowWt != NULL)
{
IBitmap* p = m_pArrowBl;
if(m_pos.m_nPos % 2 != 0)
p = m_pArrowWt;
AEERect rt2,rt3;
if(m_rtarrow.dx == 0)
{
AEEBitmapInfo bi;
NativeColor color;
IBITMAP_GetInfo(p, &bi, sizeof(bi));
color = IBITMAP_RGBToNative(p, MAKE_RGB(255,0,255));
IBITMAP_SetTransparencyColor(m_pArrowBl, color);
IBITMAP_SetTransparencyColor(m_pArrowWt, color);
SETAEERECT(&m_rtarrow,0,0,bi.cx,bi.cy);
}
SETAEERECT(&rt2,m_pos.GetX(),m_pos.GetY(),m_nx,
m_ny);
GetFitRect(&rt2,&m_rtarrow,&rt3,IDF_ALIGN_CENTER|IDF_ALIGN_MIDDLE);
//IBITMAP_BltIn(m_pBitmap,rt3.x,rt3.y,bi.cx,bi.cy,p,0,0,AEE_RO_TRANSPARENT);
IDISPLAY_BitBlt(d,rt3.x,rt3.y,m_rtarrow.dx,m_rtarrow.dy,(void*)p,0,0,AEE_RO_TRANSPARENT);
}
}
boolean CBrewMainMenu::key(UINT16 code, UINT32 param)
{
frame->m_bLoginFlag = false;
CBrewLoginCanvasBase* p = GetSomeCanvas();
if(p != NULL)
{
if(p->key(code,param))
{
p->Release();
SetNull(p);
}
return true;
}
if(code == AVK_SELECT)
{
switch(m_pos.m_nPos)
{
case MAINMENU_BEGIN:
{
UINT16 nUlen = sizeof(frame->m_nUserName);
UINT16 nPlen = sizeof(frame->m_nUserPass);
MEMSET(frame->m_nUserName,0,nUlen);
MEMSET(frame->m_nUserPass,0,nPlen);
struct ServerStruct sItem;
struct RoomStruct rItem;
if(frame->frame->getLastLoginUser(&nUlen,(UINT8*)frame->m_nUserName,
&nPlen,(UINT8*)frame->m_nUserPass) == OK)
if(frame->frame->getLastServer(&sItem) == OK)
if(frame->frame->getLastRoom(&rItem) == OK)
{
int i;
for (i = 0; i < WSTRLEN(frame->m_nUserName); i ++)
frame->m_nUserName[i] = NTOHS(frame->m_nUserName[i]);
for (i = 0; i < WSTRLEN(frame->m_nUserPass); i ++)
frame->m_nUserPass[i] = NTOHS(frame->m_nUserPass[i]);
frame->m_nCurrentServerId = sItem.serverId;
frame->m_nCurrentRoomId = rItem.roomId;
frame->m_nLoginState = LOGIN_TEST_LOGIN;
break;
}
frame->m_nLoginState = LOGIN_TEST_GAME_LIST;
break;
}
case MAINMENU_HELP:
{
m_pHelp = new CBrewHelpAndIntro;
if(m_pHelp != NULL)
{
m_pHelp->setFrame(frame);
}
break;
}
case MAINMENU_ABOUT:
{
m_pAbout = new CGameAbout;
if(m_pAbout != NULL)
{
m_pAbout->setFrame(frame);
}
break;
}
case MAINMENU_LOGIN:
{
UINT16 nUlen = sizeof(frame->m_nUserName);
UINT16 nPlen = sizeof(frame->m_nUserPass);
MEMSET(frame->m_nUserName,0,nUlen);
MEMSET(frame->m_nUserPass,0,nPlen);
if(frame->frame->getLastLoginUser(&nUlen,(UINT8*)frame->m_nUserName,
&nPlen,(UINT8*)frame->m_nUserPass) == OK)
{
MEMCPY(frame->m_userMng.urs.userName,
frame->m_nUserName,sizeof(frame->m_nUserName));
frame->m_userMng.urs.userNameLength = WSTRLEN(frame->m_nUserName);
int i;
for (i = 0; i < WSTRLEN(frame->m_nUserName); i ++)
frame->m_nUserName[i] = NTOHS(frame->m_nUserName[i]);
for (i = 0; i < WSTRLEN(frame->m_nUserPass); i ++)
frame->m_nUserPass[i] = NTOHS(frame->m_nUserPass[i]);
}
frame->m_nLoginState = LOGIN_TEST_GAME_LIST;
break;
}
case MAINMENU_SETTING:
{
m_pGs = new CGameSetting;
if(m_pGs != NULL)
{
m_pGs->setFrame(frame);
}
break;
}
case MAINMENU_QUIT:
{
frame->frame->quitGame();
}
break;
}
return true;
}
m_pos.Key(code);
return false;
}
void CBrewMainMenu::SetDisplayInfo(IDisplay* d)
{
CBrewLoginCanvasBase::SetDisplayInfo(d);
}
IBrewCanvas *CreateBrewMainMenu(){
return (IBrewCanvas *)new CBrewMainMenu();
}
CBrewLoginCanvasBase* CBrewMainMenu::GetSomeCanvas()
{
RETURNIFNOTNULL(m_pGs);
RETURNIFNOTNULL(m_pHelp);
RETURNIFNOTNULL(m_pAbout);
return NULL;
}
void CBrewMainMenu::SetNull(CBrewLoginCanvasBase* p)
{
if(p == m_pGs)
m_pGs = NULL;
if(p == m_pHelp)
m_pHelp = NULL;
if(p == m_pAbout)
m_pAbout = NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -