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

📄 mainfrm.cpp

📁 仿QQ的聊天程序vc++/mfc来学习的简易聊天室代码功能较全
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				UserInfo* pInfo=new UserInfo;				
				pInfo->Id=msg.aFriendId.GetAt(i);
				str1.Format("%d",pInfo->Id);
				pInfo->HaveDetail=0;
				lstrcpy(pInfo->Name,str1);
				FriendState* pState=new FriendState;					
				pState->OnlineState=0;
				GetApp()->m_aUserInfo.Add(pInfo);					
				GetApp()->m_aUserState.Add(pState);
				GetApp()->m_aUserInfo.GetSize();				
				
				m_wndBar.AddItem(0,str1,0,pInfo->Id);
			}		
			m_wndBar.Invalidate();
			break;
		}
	case ONLINE_FRIEND:		
		{
			//current all online friend
			if(iOnlineState==0)break;
			CMsgOnlineFriend msg;
			CopyDataBuf(&msg,pData);
			if(!msg.LoadFromBuf())break;
			
			UserInfo *pInfo=NULL;
			FriendState *pState=NULL;
			for(int i=0;i<msg.aFriendId.GetSize();i++)
			{				
				if(FindInArray(GetApp()->m_aUserInfo,GetApp()->m_aUserState,msg.aFriendId.GetAt(i),pInfo,pState))
				{
					pState->OnlineState=msg.aFriendState.GetAt(i);
					pState->IP=msg.aFriendIP.GetAt(i);
					pState->Port=msg.aFriendPort.GetAt(i);
					if(pState->OnlineState==1)
						m_wndBar.SetOnlineImage(msg.aFriendId.GetAt(i));
				}
			}
			m_wndBar.Invalidate();			
			break;
		}
	case RE_FRIEND_DETAIL:
		{
			if(iOnlineState==0)break;
			CMsgPerson msg;
			CopyDataBuf(&msg,pData);
			if(!msg.LoadFromBuf())break;

			TRACE1("Friend Detail %d\n",msg.MyId);
			UserInfo *pInfo=NULL;			
			if(FindInArray(GetApp()->m_aUserInfo,pData->MyId,pInfo))
			{
				pInfo->HaveDetail=1;
				pInfo->CanbeAdd=msg.Canbeadd;
				pInfo->Sex=msg.Sex;
				pInfo->PhotoId=msg.PhotoId;
				lstrcpy(pInfo->Country,msg.Country);
				lstrcpy(pInfo->Age,msg.Age);			
				lstrcpy(pInfo->Province,msg.Province);
				lstrcpy(pInfo->City,msg.City);
				lstrcpy(pInfo->Name,msg.Name);				
				m_wndBar.Invalidate();
			}
			else if(FindInArray(GetApp()->m_aStranger,pData->MyId,pInfo))
			{
				pInfo->HaveDetail=1;
				pInfo->CanbeAdd=msg.Canbeadd;
				pInfo->Sex=msg.Sex;
				pInfo->PhotoId=msg.PhotoId;
				lstrcpy(pInfo->Country,msg.Country);
				lstrcpy(pInfo->Age,msg.Age);			
				lstrcpy(pInfo->Province,msg.Province);
				lstrcpy(pInfo->City,msg.City);
				lstrcpy(pInfo->Name,msg.Name);				
				m_wndBar.Invalidate();
			}			
			break;
		}
	case BE_ADDED_AS_FRIEND:
	case FRIEND_IDENTITY_VALIDATE:
		{			
			if(iOnlineState==0)break;
			CMsg1 msg;
			CopyDataBuf(&msg,pData);
			if(!msg.LoadFromBuf())break;
			
			SaveMsg * pMsg=new SaveMsg;
			if(index==BE_ADDED_AS_FRIEND)pMsg->type=BEADDED_MSG;
			else pMsg->type=ID_CHECK_MSG;

			pMsg->ID=msg.MyId;
			pMsg->Time=msg.Time;
			pMsg->Msg=msg.Msg;
			GetApp()->m_aSysMsg.Add(pMsg);
			GetApp()->m_aOtherMsg.Add(pMsg);

			if(m_pShowOther==NULL)
			{
				m_pShowOther=new CShowAddMsgDlg;
				m_pShowOther->Create(CShowAddMsgDlg::IDD,GetDesktopWindow());
			}
			
			
			TRACE0("R: BE_ADDED_AS_FRIEND\n");
			break;
		}
	case SYSTEM_BROADCAST:
	case ACCEPT_AS_FRIEND:
	case REFUSE_AS_FRIEND:
		{
			if(iOnlineState==0)break;
			CMsg1 msg;
			CopyDataBuf(&msg,pData);
			if(!msg.LoadFromBuf())break;
			
			SaveMsg * pMsg=new SaveMsg;
			pMsg->type=NOTICE_MSG;
			pMsg->ID=msg.MyId;
			pMsg->Time=msg.Time;
			pMsg->Msg=msg.Msg;
			GetApp()->m_aSysMsg.Add(pMsg);
			GetApp()->m_aNoticeMsg.Add(pMsg);
			
			if(m_pShowNotice==NULL)
			{
				m_pShowNotice=new CShowBroadcastDlg;
				m_pShowNotice->Create(CShowBroadcastDlg::IDD,GetDesktopWindow());
			}
			m_pShowNotice->PostMessage(WM_SHOW_NOTICE);
			
			break;
		}
	case TOTAL_ONLINE:
		{
			if(iOnlineState==0)break;
			CMsg1 msg;
			CopyDataBuf(&msg,pData);
			if(!msg.LoadFromBuf())break;

				CString str;
				str.Format("%d",msg.MyId);
				SetWindowText(str);

			m_bRecvTotal=TRUE;
			TRACE0("R: TOTAL_ONLINE\n");
			break;
		}	
	case NAME_NOT_FOUND_BY_NAME:
		{			
			if(iOnlineState==0)break;
			break;
		}	
	case FOUND_FRIEND_BY_ID:
		{
			if(iOnlineState==0)break;
			CMsgPerson msg;
			CopyDataBuf(&msg,pData);
			if(!msg.LoadFromBuf())break;
			
			for(int i=0;i<m_aTempInfo.GetSize();i++)
				delete m_aTempInfo.GetAt(i);
			m_aTempInfo.RemoveAll();
			
			UserInfo *pInfo=new UserInfo;
			pInfo->HaveDetail=1;
			pInfo->CanbeAdd=msg.Canbeadd;
			pInfo->Sex=msg.Sex;
			pInfo->PhotoId=msg.PhotoId;
			lstrcpy(pInfo->Country,msg.Country);
			lstrcpy(pInfo->Age,msg.Age);			
			lstrcpy(pInfo->Province,msg.Province);
			lstrcpy(pInfo->City,msg.City);
			lstrcpy(pInfo->Name,msg.Name);			
			m_aTempInfo.Add(pInfo);
			
			break;
		}
	case ID_NOT_FOUND_BY_ID:
		{
			if(iOnlineState==0)break;
			
			break;
		}	
	case RE_ADD_AS_FRIEND:
		{
			if(iOnlineState==0)break;
			CMsg3 msg;
			CopyDataBuf(&msg,pData);
			if(!msg.LoadFromBuf())break;


			
			break;
		}		
	}

	if(pData)
		delete pData;	
	return 0;
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	if(nIDEvent==1&&GetApp()->m_bOnlineState)
	{
/*		CString str;
		if(m_bRecvTotal)
		{
			m_bRecvTotal=FALSE;			
		}
		else
		{
			GetApp()->m_bOnlineState=0;					
			str.Format("%d",GetApp()->m_uCurrentUserID);		
			m_TrayIcon.SetIcon(IDR_OFFLINE,str);
			for(int i=0;i<GetApp()->m_aUserState.GetSize();i++)
				GetApp()->m_aUserState.GetAt(i)->OnlineState=0;
			m_wndBar.SetOfflineState();			
			KillTimer(1);
		}		
		str.Format("ID:%d",GetApp()->m_uCurrentUserID);
		SetWindowText(str);		
*/	}	
}

void CMainFrame::OnSendMessage() 
{	
	UserInfo *pInfo=NULL;
	FriendState *pState=NULL;
	if(nGroupFlag==0||nGroupFlag>2)
	{
		FindInArray(GetApp()->m_aUserInfo,GetApp()->m_aUserState,nCurSelID,pInfo,pState);	
	}
	else
	{
		FindInArray(GetApp()->m_aStranger,GetApp()->m_aStrangerState,nCurSelID,pInfo,pState);
	}
	if(pState->pTalk==NULL)
	{
		pState->pTalk=new CTalkDlg;
		pState->pTalk->Create(CTalkDlg::IDD,GetDesktopWindow());
	}
	pState->pTalk->SendMessage(WM_SEND_MSG,(WPARAM)pInfo,(LPARAM)pState);	
}

void CMainFrame::OnUpdateSendMessage(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(GetApp()->m_bOnlineState);
}

void CMainFrame::OnFriendDetail() 
{
	UserInfo *pInfo=NULL;
	FriendState *pState=NULL;
	if(nGroupFlag==0||nGroupFlag>2)
	{
		FindInArray(GetApp()->m_aUserInfo,GetApp()->m_aUserState,nCurSelID,pInfo,pState);	
	}
	else
	{
		FindInArray(GetApp()->m_aStranger,GetApp()->m_aStrangerState,nCurSelID,pInfo,pState);
	}
	if(pState->pFInfo==NULL)
	{
		pState->pFInfo=new CFriendDetailDlg;
		pState->pFInfo->Create(CFriendDetailDlg::IDD,GetDesktopWindow());
	}
	pState->pFInfo->SendMessage(WM_SHOW_FRIEND_DETAIL,(WPARAM)pInfo,(LPARAM)pState);	
}


void CMainFrame::OnOffline() 
{
 	if(GetApp()->m_bOnlineState)
	{
		CData msg;
		msg.index=OFFLINE;
		msg.MyId=GetApp()->m_uCurrentUserID;
		msg.tarIP=GetApp()->m_uServerIP;
		msg.nPort=GetApp()->m_uServerPort;

		GetApp()->m_Socket.SendDataDirect(&msg);
		GetApp()->m_bOnlineState=0;
		CString str;
		str.Format("%d",GetApp()->m_uCurrentUserID);		
		m_TrayIcon.SetIcon(IDR_OFFLINE,str);
		for(int i=0;i<GetApp()->m_aUserState.GetSize();i++)
			GetApp()->m_aUserState.GetAt(i)->OnlineState=0;
		m_wndBar.SetOfflineState();
		KillTimer(1);
		str.Format("ID:%d",GetApp()->m_uCurrentUserID);
		SetWindowText(str);		
	}	
}

void CMainFrame::OnOnhide() 
{
	if(GetApp()->m_bOnlineState==2)return;

	CData msg;
	msg.index=ONHIDE;
	msg.MyId=GetApp()->m_uCurrentUserID;
	msg.tarIP=GetApp()->m_uServerIP;
	msg.nPort=GetApp()->m_uServerPort;
	GetApp()->m_Socket.SendDataDirect(&msg);
}

void CMainFrame::OnOnline() 
{
	if(GetApp()->m_bOnlineState==1)return;
	CData msg;
	msg.index=ONLINE;
	msg.MyId=GetApp()->m_uCurrentUserID;
	msg.tarIP=GetApp()->m_uServerIP;
	msg.nPort=GetApp()->m_uServerPort;
	GetApp()->m_Socket.SendDataDirect(&msg);
}

void CMainFrame::OnSearch() 
{
	if(GetApp()->m_bOnlineState==0)
	{
		AfxMessageBox(IDS_NOT_LOGIN_SERVER);
		return;
	}

	if(m_pSearch==NULL)
	{
		m_pSearch=new CSearchDlg;
		m_pSearch->Create(CSearchDlg::IDD,GetDesktopWindow());
	}
	m_pSearch->ShowWindow(SW_NORMAL);	
}

void CMainFrame::OnPersoninfoSetup() 
{
	if(m_pModifyPI==NULL)
	{
		m_pModifyPI=new CModifyPIDlg;
		m_pModifyPI->Create(CModifyPIDlg::IDD,GetDesktopWindow());
	}
	m_pModifyPI->SendMessage(WM_SHOW_FRIEND_DETAIL,(WPARAM)(GetApp()->m_aUserInfo.GetAt(0)),0);		
}

void CMainFrame::OnSendtoAll() 
{
	if(GetApp()->m_bOnlineState==0)
	{
		AfxMessageBox(IDS_NOT_LOGIN_SERVER);
		return;
	}
	if(m_pSendToAll==NULL)
	{
		m_pSendToAll=new CSendToAllDlg;
		m_pSendToAll->Create(CSendToAllDlg::IDD,GetDesktopWindow());
	}
	m_pSendToAll->ShowWindow(SW_NORMAL);	
}

void CMainFrame::OnShowOnline() 
{
	if(GetApp()->m_bOnlineState==0)
	{
		AfxMessageBox(IDS_NOT_LOGIN_SERVER);
		return;
	}

	if(m_pShowOnline==NULL)
	{
		m_pShowOnline=new CShowOnlineDlg;
		m_pShowOnline->Create(CShowOnlineDlg::IDD,GetDesktopWindow());
	}
	m_pShowOnline->ShowWindow(SW_NORMAL);	
}

void CMainFrame::OnSendBroadcast() 
{
	if(GetApp()->m_bOnlineState==0)
	{
		CString str;
		str.LoadString(IDS_NOT_LOGIN_SERVER);
		MessageBox(str);
		return;
	}
	if(m_pSendBroad==NULL)
	{
		m_pSendBroad=new CSendBroadcastDlg;
		m_pSendBroad->Create(CSendBroadcastDlg::IDD,GetDesktopWindow());
	}
	m_pSendBroad->ShowWindow(SW_NORMAL);	
}

LRESULT CMainFrame::OnAddFriendRefresh(WPARAM wParam,LPARAM lParam)
{
	DWORD uFriendID=wParam;
	if(uFriendID<=0)return 0;
	if(FindInArray(GetApp()->m_aUserInfo,uFriendID)!=-1)return 0;

	UserInfo* pInfo=NULL;
	FriendState* pState=NULL;
	int rindex=FindInArray(GetApp()->m_aStranger,uFriendID);
	if(rindex!=-1)
	{
		pInfo=GetApp()->m_aStranger.GetAt(rindex);		
		pState=GetApp()->m_aStrangerState.GetAt(rindex);
		GetApp()->m_aStranger.RemoveAt(rindex);
		GetApp()->m_aStrangerState.RemoveAt(rindex);
		m_wndBar.RemoveAItem(1,uFriendID,FALSE);
	}
	else
	{
		pInfo=new UserInfo;				
		pInfo->Id=uFriendID;	
		pInfo->HaveDetail=0;
		pInfo->PhotoId=0;
		itoa(uFriendID,pInfo->Name,10);	
		pState=new FriendState;
		pState->OnlineState=0;
	}
	GetApp()->m_aUserInfo.Add(pInfo);					
	GetApp()->m_aUserState.Add(pState);	
	m_wndBar.AddItem(0,pInfo->Name,pInfo->PhotoId,pInfo->Id);	
	m_wndBar.Invalidate();
	if(!pInfo->HaveDetail)
	{
		CMsg1 msg;
		msg.index=FRIEND_DETAIL;
		msg.MyId=GetApp()->m_uCurrentUserID;
		msg.tarIP=GetApp()->m_uServerIP;
		msg.nPort=GetApp()->m_uServerPort;
		msg.FriendId=uFriendID;
		GetApp()->m_Socket.SendDataDirect(&msg);
	}
	return 1;
}

void CMainFrame::OnAddFriend() 
{
 	if(m_pAddFriendDlg==NULL)
	{
		m_pAddFriendDlg=new CAddFriendDlg;
		m_pAddFriendDlg->Create(CAddFriendDlg::IDD);
	}
	m_pAddFriendDlg->uID=nCurSelID;
	if(m_pAddFriendDlg->SendMessage(WM_NOTICE_ADDFRIEND))
	m_wndBar.RemoveAItem(1,nCurSelIndex);
}

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
{
	if(pMsg->message==WM_KEYDOWN)
	{
		if(pMsg->wParam>'0' &&pMsg->wParam<'5'&&GetKeyState(VK_CONTROL)&0x80)
		{
			nCurSelIndex=pMsg->wParam-'1';
			nGroupFlag=m_wndBar.iSelFolder;				
			nCurSelID = m_wndBar.GetItemData(nCurSelIndex);
			if(nCurSelID!=0)SendMessage(WM_COMMAND,ID_SEND_MESSAGE,0);		
			return 1;
		}		
	}
	return CFrameWnd::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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