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

📄 myqqclientdlg.cpp

📁 实现了一个聊天系统的客户端
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}

			break;
		case 10:
			MessageBox("用户信息修改成功!");

			DownLoadList();
			break;
	}
}

void CMyQQClientDlg::OnFriendlistBtn() 
{
	// TODO: Add your control notification handler code here
	ChangeFolder(0);
}

void CMyQQClientDlg::OnStrangerlistBtn() 
{
	// TODO: Add your control notification handler code here
	ChangeFolder(1);
}

void CMyQQClientDlg::OnBlacklistBtn() 
{
	// TODO: Add your control notification handler code here
	ChangeFolder(2);
}

BOOL CMyQQClientDlg::ConnectToServer()
{
	if(!m_IsConnected) {
		if(!m_clientSocket.Create()) {
			MessageBox("套接字创建失败!");
			return FALSE;
		}
		if(!m_clientSocket.Connect(serverAddr,serverPort))
		{
			MessageBox("连接服务器失败");
			return FALSE;
		}

		m_chatSocket.Create(9000,SOCK_DGRAM);
		m_chatSocket.SetParent(this);

		m_IsConnected = TRUE;
	}
	return TRUE;
}

void CMyQQClientDlg::RegisterUserInfo()
{
	SetWindowText("正在注册...");

	m_msg.m_msgType = 0;
	memcpy(m_msg.m_msgBuff,&m_userInfo,1024);

	m_clientSocket.Send(&m_msg,sizeof(SClientMsg));

	SetWindowText("注册消息已送出!");
}

void CMyQQClientDlg::DownLoadList()
{
	SUserInfo info;

	if(m_IsDownUserInfo == 3) {
		memcpy(&info,m_msg.m_msgBuff,sizeof(SUserInfo));
		m_lstFriend.AddTail(info);
	}

	if((m_iCount < 64)&&(m_userInfo.m_infoFriendList[m_iCount] != 0)) {

		m_IsDownUserInfo = 2;
		GetUserInfo(m_userInfo.m_infoFriendList[m_iCount]);
		m_iCount ++;
	}
	else {
		m_IsDownUserInfo = 0;
		
		for(UINT i=0; i<m_iCount; i++)
		{
			info = m_lstFriend.GetAt(m_lstFriend.FindIndex(i));
			ContentInfo[i].nImageID = info.m_infoPicture + IDB_BITMAP1;
			memcpy(ContentInfo[i].strText, info.m_infoNick, 64);
		}
		m_lstFriendListCtrl.ResetContent();
		m_lstFriendListCtrl.SetItems(ContentInfo, m_iCount);

		m_iCount = 0;
	}

}

void CMyQQClientDlg::SetListEnable(BOOL pParam)
{
	if(pParam) {
		m_btnMenu.EnableWindow(TRUE);
		m_btnMessage.EnableWindow(TRUE);
		m_btnFind.EnableWindow(TRUE);

		m_lstFriendListCtrl.EnableWindow(TRUE);
		m_lstStrangerListCtrl.EnableWindow(TRUE);
		m_lstBlackListCtrl.EnableWindow(TRUE);
	}
	else {
		m_btnMenu.EnableWindow(TRUE);
		m_btnMessage.EnableWindow(FALSE);
		m_btnFind.EnableWindow(FALSE);

		m_lstFriendListCtrl.EnableWindow(FALSE);
		m_lstStrangerListCtrl.EnableWindow(FALSE);
		m_lstBlackListCtrl.EnableWindow(FALSE);
	}
}

void CMyQQClientDlg::OnRegisterFinished()
{
	memcpy(&m_userInfo,m_msg.m_msgBuff,1024);

	CString pCaption;
	pCaption.Format("%d",m_userInfo.m_infoID);
	SetWindowText(pCaption);

	SetListEnable(TRUE);
}

void CMyQQClientDlg::OnServerClose()
{
	m_clientSocket.Close();

	m_IsConnected = FALSE;

	SetWindowText(m_msg.m_msgBuff);
}

void CMyQQClientDlg::LogIn()
{
	m_msg.m_msgType = 001;
	memcpy(m_msg.m_msgBuff,&m_userInfo,sizeof(SUserInfo));
	m_clientSocket.Send(&m_msg,sizeof(SClientMsg));
}

void CMyQQClientDlg::OnLogInFinished()
{
	SetListEnable(TRUE);
	CString str;
	str.Format("%d",m_userInfo.m_infoID);
	SetWindowText(str);
}

void CMyQQClientDlg::OnMenu() 
{
	// TODO: Add your control notification handler code here
	CRect rect;
	GetWindowRect(&rect);

	m_PopMenu = new CMenu;
	m_PopMenu->LoadMenu(IDR_SETINFO);

    ::TrackPopupMenu(m_PopMenu->GetSubMenu(0)->m_hMenu, 0, rect.left, rect.bottom, 0, 
                         this->GetSafeHwnd(),&rect);

}

void CMyQQClientDlg::OnLogout() 
{
	if(m_IsConnected) {
		m_msg.m_msgType = 2;
		memcpy(m_msg.m_msgBuff,&m_userInfo,sizeof(SUserInfo));
		m_clientSocket.Send(&m_msg,sizeof(SClientMsg));
	}
}


void CMyQQClientDlg::GetUserInfo(UINT piUserID)
{
	m_msg.m_msgType = 3;
	SUserInfo * info = (SUserInfo*)(m_msg.m_msgBuff);
	info->m_infoID = piUserID;

	m_clientSocket.Send(&m_msg,sizeof(SClientMsg));
}

void CMyQQClientDlg::OnGetUserInfo(SUserInfo &info)
{
	m_IsDownUserInfo = 0;

	CRegisterDlg regDlg;

	regDlg.m_strFullName = info.m_infoName;
	regDlg.m_strNickName = info.m_infoNick;
	regDlg.m_iAge = info.m_infoAge;
	regDlg.m_iSex = info.m_infoSex;
	regDlg.m_iPicture = info.m_infoPicture;

	regDlg.m_iType = 1;

	if(regDlg.DoModal() == IDOK) {
		AddFriend(info.m_infoID);

		m_msg.m_msgType = 5;
		memcpy(m_msg.m_msgBuff,&m_userInfo,sizeof(SUserInfo));
		m_clientSocket.Send(&m_msg,sizeof(SClientMsg));
	}
}

void CMyQQClientDlg::AddFriend(UINT piUserID)
{
	UINT * p = m_userInfo.m_infoFriendList;

	int i =0;
	while(i < 64) {
		if( *p == 0 ) break;

		p++;
		i++;
	}

	if(i < 64) {
		*p = piUserID;
	}
	else {
		MessageBox("好友链表已满!");
	}
}

void CMyQQClientDlg::SendMsg(int iSel)
{
	SUserInfo info ;
	info = m_lstFriend.GetAt(m_lstFriend.FindIndex(iSel));

	CSendRecvDlg dlg;

	dlg.m_iType = 1;

	dlg.m_strUserInfo.Format("帐号:%d   昵称:%s",info.m_infoID,info.m_infoNick);
	dlg.m_strNetInfo.Format("IP地址:%s   端口:%d",info.m_infoAddr,info.m_infoPort);
	dlg.m_iPicture = info.m_infoPicture;

	if(dlg.DoModal() == IDOK) {
		m_msg.m_msgType = info.m_infoID;
		sprintf(m_msg.m_msgBuff,"%s",dlg.m_strSend.GetBuffer(dlg.m_strSend.GetLength()));

		m_chatSocket.SendTo(&m_msg,sizeof(SClientMsg),9000,info.m_infoAddr);
	}
}

void CMyQQClientDlg::RecvMsg()
{
	CString addr;
	UINT port;
	m_chatSocket.ReceiveFrom(&m_msg,sizeof(SClientMsg),addr,port);

	CSendRecvDlg dlg;
	SUserInfo   info;

	int i = 0;
	int count = m_lstFriend.GetCount();

	while (i < count) {
		info = m_lstFriend.GetAt(m_lstFriend.FindIndex(i));

		if(info.m_infoID == m_msg.m_msgType) {
			break;
		}

		i ++;
	}

	if(i < count) {

		dlg.m_iType = 0;

		dlg.m_strUserInfo.Format("帐号:%d   昵称:%s",info.m_infoID,info.m_infoNick);
		dlg.m_strNetInfo.Format("IP地址:%s   端口:%d",info.m_infoAddr,info.m_infoPort);
		dlg.m_iPicture = info.m_infoPicture;

		dlg.m_strRecv.Format("%s",m_msg.m_msgBuff);

		if(dlg.DoModal() == IDOK) {

			SendMsg(i);
		}	
	}
	else
	{
		return ;
	}
}

void CMyQQClientDlg::ReadServerInfo()
{
	FILE * fp = fopen("server.info","rb");

	if(fp) {
		fread(serverAddr,20,1,fp);
		fread(&serverPort,sizeof(UINT),1,fp);

		fclose(fp);
	}
}

void CMyQQClientDlg::OnSetserver() 
{
	CSetServerDlg dlg;

	if(dlg.DoModal() == IDOK) {
		FILE * fp = fopen("server.info","wb");
		
		if(fp) {
			fwrite(dlg.m_strIP,20,1,fp);
			fwrite(&(dlg.m_iPort),sizeof(UINT),1,fp);

			fclose(fp);
		}
	}
}

void CMyQQClientDlg::OnReviseinfo() 
{
	//
	CRegisterDlg regDlg;

	regDlg.m_strFullName = m_userInfo.m_infoName;
	regDlg.m_strNickName = m_userInfo.m_infoNick;
	regDlg.m_iAge = m_userInfo.m_infoAge;
	regDlg.m_iSex = m_userInfo.m_infoSex;
	regDlg.m_iPicture = m_userInfo.m_infoPicture;
	regDlg.m_iPSW = m_userInfo.m_infoPSW;

	regDlg.m_iType = 2;

	if(regDlg.DoModal() == IDOK) {
		m_msg.m_msgType = 5;

		strcpy(m_userInfo.m_infoName,regDlg.m_strFullName.GetBuffer(regDlg.m_strFullName.GetLength()));
		strcpy(m_userInfo.m_infoNick,regDlg.m_strNickName.GetBuffer(regDlg.m_strNickName.GetLength()));

		m_userInfo.m_infoAge = regDlg.m_iAge;
		m_userInfo.m_infoSex = regDlg.m_iSex;
		m_userInfo.m_infoPicture = regDlg.m_iPicture;
		m_userInfo.m_infoPSW = regDlg.m_iPSW;

		memcpy(m_msg.m_msgBuff,&m_userInfo,sizeof(SUserInfo));
		m_clientSocket.Send(&m_msg,sizeof(SClientMsg));
	}
}

⌨️ 快捷键说明

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