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

📄 userinfo.cpp

📁 超强的图形界面聊天软件.rar
💻 CPP
字号:
// UserInfo.cpp : implementation file
//

#include "stdafx.h"
#include "pictalk.h"
#include "UserInfo.h"
#include "pictalkDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUserInfo

CUserInfo::CUserInfo(CWnd *pWnd)
{
	m_pWnd=pWnd;
	m_Name="";
	m_pic=1;
	m_ID=0;
	m_state=1;
	m_x=12;
	m_y=12;
	m_bSit=FALSE;
	m_MsgCount=0;
	m_Place=CRect(0,0,54,78);
	m_bTurn=FALSE;
	m_PicNum=0;
	m_Visit=0;
}

CUserInfo::~CUserInfo()
{
	m_pPW->draw(&m_Place,&m_Place);
}


BEGIN_MESSAGE_MAP(CUserInfo, CWnd)
	//{{AFX_MSG_MAP(CUserInfo)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CUserInfo message handlers

void CUserInfo::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent)
	{
	case(1)://judge
		DoSet();
		m_iAniSeq--;
		break;
	case(2)://walk
		DoWalk();
		break;
	case(3)://idle
		DoSay();
		break;
	case(4)://run
		DoSingleCom();
		break;
/*	case(5):
		DoHide();
		break;
	case(6):
		DoShow();
		break;
	case(7):
		DoWaitShow();
		break;*/
	default:
		break;
	}
	m_iAniSeq++;
	CWnd::OnTimer(nIDEvent);
}

void CUserInfo::ShowUser()
{
	CreateEx(	0,
		AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
						"",
						WS_CHILD | WS_TABSTOP,
						CRect(0,0,1,1),
						m_pWnd,
						NULL,
						NULL );
	m_Place+=CPoint(PX(m_x,m_y),PY(m_x,m_y));
	SetTimer(1,300,NULL);
	m_bSet=FALSE;
}

void CUserInfo::DoSet()
{
	CRect oldRect;
	if(m_ComArray.GetSize()==0)
	{	
		if(m_bSet)
			return;
		m_bSet=TRUE;
		switch(m_state)
		{
		case(1):
			if(m_bSit)
				m_PicNum=26;
			else
				m_PicNum=0;
			m_bTurn=FALSE;
			break;
		case(4):
			m_bTurn=TRUE;
			if(m_bSit)
				m_PicNum=26;
			else
				m_PicNum=0;
			break;
		case(2):
			m_bTurn=FALSE;
			if(m_bSit)
				m_PicNum=27;
			else
				m_PicNum=9;
			break;
		case(3):
			m_bTurn=TRUE;
			if(m_bSit)
				m_PicNum=27;
			else
				m_PicNum=9;
			break;
		
		}
		oldRect=m_Place;
		m_Place=CRect(CPoint(PX(m_x,m_y),PY(m_x,m_y)),CSize(54,78));
		m_pPW->draw(&m_Place,&oldRect);
		return;
	}
	KillTimer(1);
	
	mcom &Msgcom=m_ComArray[0];
	m_x=Msgcom.m_x;
	m_y=Msgcom.m_y;
	m_state=Msgcom.m_state;
	m_bSit=Msgcom.m_bSit;
	oldRect=m_Place;
	m_Place=CRect(CPoint(PX(m_x,m_y),PY(m_x,m_y)),CSize(54,78));
	m_pPW->draw(&m_Place,&oldRect);
	
	switch(Msgcom.m_ComID)
	{
		case(11)://move
			SetTimer(2,1,NULL);
			m_iAniSeq=0;
			m_bSet=FALSE;
			break;
		case(13)://turn
			if(m_MsgCount)
				m_MsgCount--;
			m_bSet=FALSE;
			SetTimer(1,10,NULL);
			break;
		case(12)://say
			m_iAniSeq=0;
			m_sen=Msgcom.m_Sen;
			SetTimer(3,300,NULL);
			break;
		case(14)://smile
			m_iAniSeq=0;
			m_SingleBMP=12;
			SetTimer(4,300,NULL);
			break;
		case(15)://angry
			m_iAniSeq=0;
			m_SingleBMP=14;
			SetTimer(4,300,NULL);
			break;
		case(17)://cry
			m_iAniSeq=0;
			m_SingleBMP=18;
			SetTimer(4,300,NULL);
			break;
		case(19)://挥手
			m_iAniSeq=0;
			m_SingleBMP=16;
			SetTimer(4,300,NULL);
			break;
		case(16):
			if(m_MsgCount)
				m_MsgCount=0;
			m_bSet=FALSE;
			m_bSit=TRUE;
			SetTimer(1,10,NULL);
			break;
		case(18):
			if(m_MsgCount)
				m_MsgCount=0;
			m_bSet=FALSE;
			m_bSit=FALSE;
			SetTimer(1,10,NULL);
			break;
	}
	m_ComArray.RemoveAt(0);
}

void CUserInfo::DoWalk()
{
	CPoint offset;
	CRect oldPlace=m_Place;
	KillTimer(2);
	SetTimer(2,150,NULL);
	if(m_iAniSeq>=9)
	{
		switch(m_state)
		{
		case(1):
			m_x--;break;
		case(2):
			m_x++;break;
		case(3):
			m_y--;break;
		case(4):
			m_y++;break;
		}
		KillTimer(2);
		if(m_MsgCount)
			m_MsgCount=0;
		SetTimer(1,30,NULL);
		m_iAniSeq--;
		
		return;
	}
	if(m_iAniSeq<=0)
		if(m_PicNum==1 || m_PicNum==8)
			m_iAniSeq++;
	switch(m_state)
	{
	case (1):
		offset=CPoint(-4,2);
		m_bTurn=FALSE;
		m_PicNum=(m_iAniSeq%4)+1;
		break;
	case (2):
		offset=CPoint(4,-2);
		m_bTurn=FALSE;
		m_PicNum=8-(m_iAniSeq%4);
		break;
	case (3):
		offset=CPoint(-4,-2);
		m_bTurn=TRUE;
		m_PicNum=8-(m_iAniSeq%4);
		break;
	case (4):
		offset=CPoint(4,2);
		m_bTurn=TRUE;
		m_PicNum=(m_iAniSeq%4)+1;
		break;
	}
	if(m_iAniSeq!=0)
		m_Place+=offset;
	m_pPW->draw(&m_Place,&oldPlace);
}

void CUserInfo::DoSingleCom()
{
	if(m_iAniSeq>=8)
	{
		KillTimer(4);
		if(m_MsgCount)
			m_MsgCount=0;
		SetTimer(1,100,NULL);
		m_bSet=FALSE;
	}
	m_PicNum=m_iAniSeq%2+m_SingleBMP;
	switch(m_state)
	{
	case (1):
		m_bTurn=FALSE;
		break;
	case (2):
		m_bTurn=TRUE;
		break;
	case (3):
		m_bTurn=FALSE;
		break;
	case (4):
		m_bTurn=TRUE;
		break;
	}
	m_pPW->draw(&m_Place,&m_Place);
}

void CUserInfo::DoSay()
{
	if(m_iAniSeq>=8)
	{
		KillTimer(3);
		if(m_MsgCount)
			m_MsgCount=0;
		SetTimer(1,100,NULL);
		m_bSet=FALSE;
		m_pPW->m_SenList.RemoveAt(m_SenPos);
		m_pPW->draw(&m_SenPlace,&m_SenPlace);
	}
	if(m_iAniSeq<=0)
	{
		m_SenPos=m_pPW->AddSentence(this);
		CString str;
		str=m_Name+":"+m_sen;
		((CPictalkDlg *)m_pWnd)->AddSenten(str);
	}
	switch(m_state)
	{
	case (1):
		m_bTurn=FALSE;
		if(m_bSit)
			m_PicNum=m_iAniSeq%2+28;
		else
			m_PicNum=m_iAniSeq%2+10;
		break;
	case (2):
		m_bTurn=FALSE;
		if(m_bSit)
			m_PicNum=m_iAniSeq%2+30;
		else
			m_PicNum=24+(m_iAniSeq%2);
		break;
	case (3):
		m_bTurn=TRUE;
		if(m_bSit)
			m_PicNum=m_iAniSeq%2+30;
		else
			m_PicNum=24+(m_iAniSeq%2);
		break;
	case (4):
		m_bTurn=TRUE;
		if(m_bSit)
			m_PicNum=m_iAniSeq%2+28;
		else
			m_PicNum=m_iAniSeq%2+10;
		break;
	}
	m_pPW->draw(&m_Place,&m_Place);
}

HRGN CUserInfo::GetRgn()
{
	return m_pPW->GetRgn(this);
}

BOOL CUserInfo::Check(UINT num)
{
//	m_Visit=0;
	BOOL res;
	int i;
	if(m_MapMsg.Lookup(num,res))
		return FALSE;
	m_MapMsg[num]=TRUE;
	for(i=1;i<11;i++)
		m_MapMsg.RemoveKey((num+i)%30);
	return TRUE;
}

void CUserInfo::MsgCreate(mpack &Msgpack)
{
	Msgpack.m_ID=m_ID;
	Msgpack.m_state=m_state;
	Msgpack.m_x=m_x;
	Msgpack.m_y=m_y;
	Msgpack.m_Name=m_Name;
	Msgpack.m_bSit=m_bSit;
	Msgpack.m_pic=m_pic;
	Msgpack.m_IP=m_IP;
	Msgpack.m_Name=m_Name;
	Msgpack.m_nAge=m_nAge;
	Msgpack.m_Sex=m_Sex;
	Msgpack.m_ICQ=m_ICQ;
	Msgpack.m_Job=m_Job;
	Msgpack.m_Address=m_Address;
	Msgpack.m_nPort=m_nPort;
}

⌨️ 快捷键说明

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