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

📄 brewmainmenu.cpp

📁 象棋框架
💻 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 + -