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

📄 brewlogincanvas2.cpp

📁 象棋框架
💻 CPP
字号:
// BrewLoginCanvas2.cpp: implementation of the CBrewLoginCanvas2 class.
//
//////////////////////////////////////////////////////////////////////

#include "BrewLoginCanvas2.h"
#include "BrewLoginCanvas3.h"
#include "BrewLoginCanvas42.h"

#include "BrewHallCanvas2.h"

#include "brewlogin.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////



CBrewLoginCanvas2::CBrewLoginCanvas2()
{
	//m_pISoftKey = NULL;
	m_nTotalLine = 6;	
	m_nControls = 4;
	m_aCtls = new IControl*[m_nControls];

	m_nFontSpace += 2;
	
	m_nVScrollBarWidth = 5;
	
	m_bSave = true;

}

CBrewLoginCanvas2::~CBrewLoginCanvas2()
{
	RELEASEIF(m_pUser,ITEXTCTL);
	RELEASEIF(m_pPasswd,ITEXTCTL);
	
	RELEASEIF(m_pSep,ISTATIC);	
	RELEASEIF(m_pIsSave,ISTATIC);
	
	//RELEASEIF(m_pISoftKey,IMENUCTL);
	if(m_aCtls != NULL)
		delete[] m_aCtls;
}

void CBrewLoginCanvas2::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();
	
	UINT32 n32 = frame->frame->getLoginParam();	
	m_bSave = ((n32 & PERSIST_NOTSAVELOGINFO) == 0);

	if(m_pUser == NULL)
	{
		ISHELL_CreateInstance(((CBrewLogin*)f)->m_pIShell, AEECLSID_TEXTCTL, (void **)&m_pUser);
		if(m_pUser != NULL)
		{
			ITEXTCTL_SetProperties(m_pUser,TP_FRAME);
			ITEXTCTL_SetInputMode( m_pUser, AEE_TM_LETTERS );
			if(m_bSave)
				ITEXTCTL_SetText(m_pUser,frame->m_nUserName,-1);
			

		//	ISHELL_CreateInstance(m_pShell, AEECLSID_SOFTKEYCTL, (void **)&m_pISoftKey);
		//			if (!m_pISoftKey) {
		//				ITEXTCTL_Release (m_pUser);
		//				m_pUser = NULL;
		//				return;
		//			}
		
			m_aCtls[0] = (IControl*)m_pUser;
		//	ITEXTCTL_SetSoftKeyMenu (m_pUser, m_pISoftKey); 
			
		}
		else
			return;
		
	}
	if(m_pPasswd == NULL)
	{
		ISHELL_CreateInstance(((CBrewLogin*)f)->m_pIShell, AEECLSID_TEXTCTL, (void **)&m_pPasswd);
		ITEXTCTL_SetProperties(m_pPasswd,TP_FRAME | TP_PASSWORD);
		ITEXTCTL_SetInputMode( m_pPasswd, AEE_TM_LETTERS );	
		if(m_bSave)
			ITEXTCTL_SetText(m_pPasswd,frame->m_nUserPass,-1);
		
		m_aCtls[1] = (IControl*)m_pPasswd;
	}
	if(m_pIsSave == NULL)
	{
		ISHELL_CreateInstance(((CBrewLogin*)f)->m_pIShell,AEECLSID_STATIC,(void**)&m_pIsSave);
		ISTATIC_SetProperties(m_pIsSave,ST_NOSCROLL | ST_ENABLE_HLGHT);
		m_aCtls[2] = (IControl*)m_pIsSave;
	}
	if(m_pSep == NULL)
	{
		ISHELL_CreateInstance(((CBrewLogin*)f)->m_pIShell,AEECLSID_STATIC,(void**)&m_pSep);
		ISTATIC_SetProperties(m_pSep,ST_CENTERTITLE | ST_NOSCROLL | ST_ENABLE_HLGHT);
		m_aCtls[3] = (IControl*)m_pSep;
	}	
	
}

void CBrewLoginCanvas2::paint(IDisplay *d, IGraphics *g)
{
	//return;
	CBrewLoginCanvasBase::paint(d,g);
	
	
	AEERect rt;
	int n = GetLineRect(0,rt);
	if(n != -1)
		DisplayControl(d,GetDispText(IDS_LOGIN_USERNAME),(IControl*)m_pUser,rt,g);
	if(m_nCurrent != 0)
	{
		AEELine ln;
		ln.sx = rt.x - m_offsetX;
		ln.sy = rt.y + rt.dy - m_offsetY;
		ln.ex = ln.sx + rt.dx;
		ln.ey = ln.sy;
		IGRAPHICS_DrawLine(m_pIGraphics,&ln);
	}
	//else
	//	{
	//		rtsoft = rt;
	//		SETAEERECT(&rtsoft,0,rt.dy,100,60);
	//		IMENUCTL_SetRect(m_pISoftKey, &rtsoft);
	//}
	n = GetLineRect(1,rt);
	if(n != -1)
		DisplayControl(d,GetDispText(IDS_LOGIN_PASSWORD),(IControl*)m_pPasswd,rt,g);	
	if(m_nCurrent != 1)
	{
		AEELine ln;
		ln.sx = rt.x - m_offsetX;
		ln.sy = rt.y + rt.dy - m_offsetY;
		ln.ex = ln.sx + rt.dx;
		ln.ey = ln.sy;
		IGRAPHICS_DrawLine(m_pIGraphics,&ln);
	}
	n = GetLineRect(2,rt);
	if(n != -1)
		DisplayControl(d,NULL,(IControl*)m_pIsSave,rt,g);
	
	n = GetLineRect(3,rt);
	if(n != -1)
		DisplayControl(d,NULL,(IControl*)m_pSep,rt,g);
	
	n = GetLineRect(4,rt);
	if(n != -1)
		DisplayControl(d,GetDispText(IDS_LOGIN_NEW),NULL,rt,g);
	
	n = GetLineRect(5,rt);
	if(n != -1)
		DisplayControl(d,GetDispText(IDS_LOGIN_MODIFY),NULL,rt,g);
	SetActiveCtrl(0);

	if(m_nCurrent >= 0)
	{
		AEERect rt;
		if(m_nCurrent < m_nControls)
		{
			ICONTROL_GetRect(m_aCtls[m_nCurrent],&rt);
			rt.dy = m_nNowSize + m_nFontSpace;
		}
		else
			GetLineRect(m_nCurrent,rt);
		IDISPLAY_DrawRect(m_pIDisplay,&rt,
			RGB_BLACK,RGB_BLACK,IDF_RECT_FRAME);
	}
	IDISPLAY_Update(d);	
}

boolean CBrewLoginCanvas2::keyPressed(UINT16 code, UINT32 param)
{
	return false;
}

boolean CBrewLoginCanvas2::keyReleased(UINT16 code, UINT32 param)
{
	return false;
}

boolean CBrewLoginCanvas2::keyRepeated(UINT16 code, UINT32 param)
{
	return false;
}

boolean CBrewLoginCanvas2::key(UINT16 code, UINT32 param)
{
	//ITEXTCTL_HandleEvent(m_pUser,EVT_KEY,code,param);
	//return true;
	

	if(CBrewLoginCanvasBase::key(code,param))
	{
		int8 n = 0;
		if(code == AVK_UP)
			n = -1;
		else if(code == AVK_DOWN)
			n = 1;
		if(m_nCurrent == 3)
			m_nCurrent += n;

		//if(ICONTROL_IsActive((IControl*)m_pUser))
		//			if(m_pISoftKey != NULL && IMENUCTL_HandleEvent(m_pISoftKey, EVT_KEY, code, param)) {
		//				//事件由菜单控件处理
		//				return TRUE;
		//			}
		
		return true;
	}
	switch(code )
	{	
	case AVK_SELECT:
		if(m_nCurrent < m_nControls && 
			m_aCtls[m_nCurrent] == (IControl*)m_pIsSave)
		{
			m_bSave = !m_bSave;
			UINT32 n32 = frame->frame->getLoginParam();
			if(m_bSave)
				n32 &= ~PERSIST_NOTSAVELOGINFO;
			else
				n32 |= PERSIST_NOTSAVELOGINFO;
			frame->frame->setLoginParam(n32);
			Invalidate();
			return true;
		}
		else if(m_nCurrent == m_nControls)
		{
			//((CBrewLogin*)frame)->SetCanvas(CreateLoginCanvas3);
			frame->m_nLoginState = LOGIN_READY_REGISTER;
			return true;
		}
		else if(m_nCurrent == m_nControls + 1)
		{
			frame->m_nLoginState = LOGIN_READY_MODIFY;
			//((CBrewLogin*)frame)->SetCanvas(CreateLoginCanvas42);
			return true;
		}
	//	break; 如果不是就登录
	case AVK_SOFT2:
		{
			//((CBrewLogin*)frame)->SetCanvas(CreateHallCanvas2);
			MEMSET(frame->m_nUserName, '\0', sizeof(frame->m_nUserName));
			MEMSET(frame->m_nUserPass, '\0', sizeof(frame->m_nUserPass));
			//AECHAR buf[64];
			//ITEXTCTL_GetText(m_pUser,buf,sizeof(buf)/sizeof(buf[0]));
			//ITEXTCTL_SetText(frame->m_pIText1,buf,-1);
			//ITEXTCTL_GetText(m_pPasswd,buf,sizeof(buf)/sizeof(buf[0]));
			//ITEXTCTL_SetText(frame->m_pIText2,buf,-1);
			ITEXTCTL_GetText(m_pUser, &frame->m_nUserName[0], sizeof(frame->m_nUserName));
			if(WSTRLEN(frame->m_nUserName) > (sizeof(frame->m_nUserName)) / 2 - 1)
				frame->m_nUserName[(sizeof(frame->m_nUserName))/2 - 1] = 0;
			ITEXTCTL_GetText(m_pPasswd, &frame->m_nUserPass[0], sizeof(frame->m_nUserName));
			if(WSTRLEN(frame->m_nUserPass) > (sizeof(frame->m_nUserPass)) / 2 - 1)
				frame->m_nUserPass[(sizeof(frame->m_nUserPass))/2 - 1] = 0;
			frame->m_nLoginState = LOGIN_TEST_LOGIN;
			return true;
		}
		break;
	case AVK_CLR:
	case AVK_SOFT1:
		{
			CBrewLogin* f = (CBrewLogin*)frame;
			f->SetCanvas(CBrewLogin::Canvas1);			
			f->m_nLoginState = LOGIN_READY_ROOM;
			f->m_bUserMng = true;
			return true;
			break;
		}
	}	
	return false;
}


IBrewCanvas *CreateLoginCanvas2(){
	return (IBrewCanvas *)new CBrewLoginCanvas2();
}

void CBrewLoginCanvas2::DisplayControl( IDisplay* pIDisplay, AECHAR* psTextBuf, IControl* pCtl, 
									   AEERect& rRect ,IGraphics* g)
{
	
	if(pCtl == NULL)
	{
		AEERect rt;
		rRect.x += 5;
		rRect.dx -= 10;
		rRect.dy -= 2;
		MEMCPY(&rt,&rRect,sizeof(rt));
		DrawButton(&rt);
		IDISPLAY_DrawText( pIDisplay, m_nNowFont, 
			psTextBuf, -1, rRect.x, rRect.y, &rRect, IDF_ALIGN_MIDDLE| IDF_ALIGN_CENTER| IDF_TEXT_TRANSPARENT);
		return;
	}

	
	if(pCtl != NULL &&  psTextBuf )
	{
		//ISHELL_LoadResString( pApp->a.m_pIShell, EXPENSETRACKER_RES_FILE, nTitleID, psTextBuf, MAX_RES_STRING_BUF_SIZE * sizeof( AECHAR ) );
		
		// Set the position of the label's daring rectangle
		//SETAEERECT( &rRect, 2, rRect.y, IDISPLAY_MeasureText( pIDisplay, AEE_FONT_BOLD, psTextBuf ), m_nNowSize );
		//IDISPLAY_DrawText( pIDisplay, AEE_FONT_BOLD, psTextBuf, -1, 0, rRect.y, &rRect, IDF_ALIGN_BOTTOM | IDF_ALIGN_LEFT );
		SETAEERECT( &rRect, rRect.x+2, rRect.y, IDISPLAY_MeasureText( pIDisplay, m_nNowFont, psTextBuf ), m_nNowSize );
		IDISPLAY_DrawText( pIDisplay, m_nNowFont, 
			psTextBuf, -1, rRect.x, rRect.y, &rRect, IDF_ALIGN_MIDDLE| IDF_ALIGN_LEFT | IDF_TEXT_TRANSPARENT);
		rRect.x = rRect.dx;
		rRect.dx = m_rtInfo.dx - rRect.x;
	}
	
	//if( !pCtl )
	//	return;
	

	if(pCtl == (IControl*)m_pSep)
	{
		int n = IDISPLAY_MeasureText( pIDisplay, m_nNowFont, GetDispText(IDS_LOGIN_POINT) );
		int n2 = m_rtInfo.dx / n - 3;
		AECHAR* pbuf = (AECHAR*)MALLOC(sizeof(AECHAR) * (n2 + 1));
		if(!pbuf)
			return;
		int i;
		for(i = 0; i < n2; i++)
			pbuf[i] = L'.';		
		pbuf[i] = 0;
		ISTATIC_SetText(m_pSep,pbuf,NULL,m_nNowFont,m_nNowFont);
		FREEIF(pbuf);
	}
	if(pCtl == (IControl*)m_pIsSave)
	{
		//AEERect rtbtn = rRect;

		int n = m_nLChSize;
		AEERect rt;
		rt.y = rRect.y + 1;
		rt.dy = n - 2;
		rt.x = rRect.x + 1;
		rt.dx = n - 2;
		rRect.x +=  n+2;
		rRect.dx -= n+2;

		
		rt.y -= m_offsetY;	//graphics画的都是相对坐标?
		rt.x -= m_offsetX;
				
		IGRAPHICS_DrawRect(g,&rt);
		
		AECHAR* ptext;
		
		ptext = GetDispText(IDS_LOGIN_SAVE);
		
		if(m_bSave)
		{
			AEEPoint apt[3];
			apt[0].x = rt.x;
			apt[0].y = rt.y+rt.dy/2;
			apt[1].x = rt.x+rt.dx/2;
			apt[1].y = rt.y+rt.dy - 1;
			apt[2].x = rt.x+rt.dx;
			apt[2].y = rt.y;
			AEEPolyline apl;
			apl.len = 3;
			apl.points = apt;
			uint8 a,b,c,d;
			IGRAPHICS_GetColor(g,&a,&b,&c,&d);
			IGRAPHICS_SetColor(g,255,0,0,0);
			IGRAPHICS_DrawPolyline(g,&apl);
			IGRAPHICS_SetColor(g,a,b,c,d);
		}
		ISTATIC_SetText((IStatic*)pCtl,ptext,NULL,m_nNowFont,m_nNowFont);
		
	}
	
	if(!m_bRedraw)
	{
		if(pCtl != NULL)
			ICONTROL_Redraw(pCtl);
		return;
	}	
	else if(pCtl != NULL)
	{
		AEERect rt;
		ICONTROL_GetRect(pCtl,&rt);
		//rRect.dy -= 4;
		if(rRect.y != rt.y)
		{
			if(pCtl == (IControl*)m_pUser || pCtl == (IControl*)m_pPasswd)
			{
				AECHAR p[50];
				ITEXTCTL_GetText((ITextCtl*) pCtl,p,sizeof(p));
				ITEXTCTL_SetText((ITextCtl*) pCtl,p,sizeof(p));
			}
			ICONTROL_SetRect( pCtl, &rRect );			
		}
				
		ICONTROL_Redraw( pCtl );
	}
}

void CBrewLoginCanvas2::SetActiveCtrl(int8 pos)
{

	/*
	AECHAR pbuf[MAX_RES_STRING_BUF_SIZE];
	ITEXTCTL_GetText(m_pUser,pbuf,MAX_RES_STRING_BUF_SIZE);
	ITEXTCTL_SetActive(m_pUser,false);
	ITEXTCTL_SetText(m_pUser,pbuf,MAX_RES_STRING_BUF_SIZE);
	ITEXTCTL_GetText(m_pPasswd,pbuf,MAX_RES_STRING_BUF_SIZE);	
	ITEXTCTL_SetActive(m_pPasswd,false);	
	ITEXTCTL_SetText(m_pPasswd,pbuf,MAX_RES_STRING_BUF_SIZE);
	*/
	CBrewLoginCanvasBase::SetActiveCtrl(pos);	
	if(ICONTROL_IsActive((IControl*)m_pSep))
		ICONTROL_SetActive((IControl*)m_pSep,false);
	
//	if(ICONTROL_IsActive((IControl*)m_pUser))
		//		if(!ICONTROL_IsActive((IControl*)m_pSep))
		//		{
		//			IMENUCTL_SetActive(m_pISoftKey,true);
		//			IMENUCTL_Redraw(m_pISoftKey);
		//		}
		//	else
		//		if(ICONTROL_IsActive((IControl*)m_pSep))
		//			IMENUCTL_SetActive(m_pISoftKey,false);
		//	
		//
		//		AEETextInputMode am;
		//		AEETextInputModeInfo ai;
		//		ITEXTCTL_EnumModeInit(m_pUser);
		//		am = ITEXTCTL_EnumNextMode(m_pUser,&ai);
		//		while(am != AEE_TM_NONE)
		//		{
		//			am = ITEXTCTL_EnumNextMode(m_pUser,&ai);
		//		}
		
		//ITEXTCTL_SetInputMode(m_pUser,AEE_TM_SYMBOLS);
	//ITEXTCTL_SetActive(m_pUser,true);
}

void CBrewLoginCanvas2::OnResume()
{
	//if(m_nCurrent < m_nControls)
		//ICONTROL_SetActive(m_aCtls[m_nCurrent],true);
}

void CBrewLoginCanvas2::onSuspend()
{
	int i;
	for(i = 0; i < m_nControls; i++)
		ICONTROL_SetActive(m_aCtls[i],false);
	ISTATIC_Reset(m_pSep);
	ISTATIC_Reset(m_pIsSave);
}

//boolean CBrewLoginCanvas2::onEvent(AEEEvent eCode, UINT16 wParam, UINT32 dwParam)
//{
//	if(eCode ==  EVT_COMMAND)
//	{
//		// 处理 EVT_COMMAND 事件 - 输入模式更改
//		if((m_pUser != NULL) && ITEXTCTL_HandleEvent(m_pUser,
//			eCode, wParam, dwParam)) {
//			return TRUE;
//		}
//	}
//	return false;

⌨️ 快捷键说明

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