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

📄 clientdlg.cpp

📁 用Visual C++实现的网络聊天室
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			this->m_exit.SetWindowText("退出");
		}
        else if(IsUserLoad(strReceived))
		{
			UpdateUserInfo();
			UpdateData();
		}
		else if(IsToMe(strReceived))
		{
		}
		else if(IsMakeSure(strReceived))
		{
		}
		else
		{

			m_listMsg.AddString(strReceived);
		    UpdateData(FALSE);
		}
	}
	else
	{
		AfxMessageBox("信息接受错误!");
	}
	delete pBuf;
}

void CClientDlg::OnButtonChange() 
{
	AfxMessageBox("功能尚未实现");
		
}

void CClientDlg::OnButtonUserinfo() 
{
	m_userInforDlg->DoModal();
	if(this->m_nameCopy!=m_userInforDlg->m_userName)
	{
		CString preStr=this->BulidChangeMsg();
		SendMsg(preStr);
		this->m_nameCopy=m_userInforDlg->m_userName;
		UpdateData(TRUE);

	}
	
	
}


CString CClientDlg::BuildNomalMsg(CString& preString)
{
	CString a;
     a="NOMALMSG_"+m_userInforDlg->m_userName+"_"+this->m_comboWho+"_"+preString;
	 return a;
}

CString CClientDlg::BulidLoadMsg()
{
	CString a;
	a="SYSTEMMSG_LOAD_"+m_userInforDlg->m_userName+"_"+m_loadDlg->m_password;
	return a;
}

CString CClientDlg::BulidChangeMsg()
{
	CString a;
	a="SYSTEMMSG_CHANGE_"+m_nameCopy+"_"+this->m_userInforDlg->m_userName;
	return a;
}

CString CClientDlg::BulidCancelMsg()
{
	CString a="SYSTEMMSG_CLOSE_"+this->m_userInforDlg->m_userName+"_";
	return a;
}

void CClientDlg::OnCancel() 
{
	CString WindowValue;
	m_exit.GetWindowText(WindowValue);

    if(WindowValue=="下线")
	{
		CString a=BulidCancelMsg();

		SendMsg(a);
	}
	CDialog::OnCancel();
}


bool CClientDlg::IsUserLoad(CString& textStr)
{
	int begin=0;
	int end=textStr.Find("_");
	CString aName;
	CString preHead=textStr.Mid(begin,end);
	if(preHead=="USERLIST")
	{
		m_listUser.ResetContent();
		begin=end+1;
		end=textStr.Find("_",begin);
		while(true)
		{
			if(end!=-1)
			{
				 
			     aName=textStr.Mid(begin,end-begin);
				 begin=end+1;
				 m_listUser.AddString(aName);
			     end=textStr.Find("_",begin);

			}
			else
			{
				aName=textStr.Mid(begin);
				m_listUser.AddString(aName);
				break;
			}
		}
	
		return true;
	}
	else
	{
		return false;
	}


}

   
bool CClientDlg::IsToMe(CString& text)
{
	int begin=0;
	int end=text.Find("_");
	CString a=text.Mid(begin,end-begin);
	if(a=="CHAT")
	{
		CString who;
		CString toWho;
		CString item;
		CString msg;
		
		begin=end+1;
		end=text.Find("_",begin);
		who=text.Mid(begin,end-begin);
		begin=end+1;
		end=text.Find("_",begin);
		toWho=text.Mid(begin,end-begin);
		
		begin=end+1;
		item=text.Mid(begin);
		msg=who+" 对  "+toWho+"  说 :"+item;
        msg=AddTimeMsg(msg);
		m_listMsg.AddString(msg);
		if(toWho==m_userInforDlg->m_userName)
		{
			msg=who+" 对  你  说 :"+item;
			msg=AddTimeMsg(msg);
			m_listOwn.AddString(msg);

		}
		return true;
	}
	else 
		return false;

}

void CClientDlg::OnSelchangeListUser() 
{
	int a=this->m_listUser.GetCurSel( ); 
	m_listUser.GetText(a,m_userName);


//	AfxMessageBox(m_userName);
//	 this->m_comboTo.AddString();*/
	if(m_userName!=m_userInforDlg->m_userName)
	{
	    if(m_comboTo.FindString(0,m_userName)==CB_ERR)
		{
	         m_comboTo.AddString(m_userName);
		     a=m_comboTo.FindString(0,m_userName);
	         m_comboTo.SetCurSel(a);
		}
	}



//	AfxMessageBox(this->m_userName);

    	
}

void CClientDlg::OnTimer(UINT nIDEvent) 
{
    CTime a=CTime::GetCurrentTime();
    CString b=a.Format("%H:%M:%S");
	m_time.SetWindowText(b);	
	CDialog::OnTimer(nIDEvent);
}


CString CClientDlg::AddTimeMsg(CString& text)
{
	CTime a=CTime::GetCurrentTime();
    CString b=a.Format("(%H:%M:%S)");
    b=b+text;
	return b;
}


void CClientDlg::UpdateUserInfo()
{
	m_userNumber=m_listUser.GetCount();
	CString preText;
	preText.Format("当前在线人数:%d",m_userNumber);
	preText=preText+"\n"+m_userInforDlg->m_userName+"  欢迎进入聊天室!";
	m_peoNumber.SetWindowText(preText);
}



bool CClientDlg::IsMakeSure(CString& textMsg)
{
	int begin=0;
	int end=textMsg.Find("_");
	CString head=textMsg.Mid(begin,end-begin);
	if(head=="SUCCESS")
	{
		begin=end+1;
		CString preName=textMsg.Mid(begin);
		this->m_userInforDlg->m_userName=preName;
		this->m_userInforDlg->m_userCopy=preName;
		GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(TRUE);
	    GetDlgItem(IDC_BUTTON_USERINFO)->EnableWindow(TRUE);
	    GetDlgItem(IDC_EDIT_MSG)->EnableWindow(TRUE);
	    GetDlgItem(IDC_COMBO_WHO)->EnableWindow(TRUE);
		GetDlgItem(IDC_LIST_USER)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_LOAD)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_REGISTER)->EnableWindow(FALSE);
		m_exit.SetWindowText("下线");
		UpdateUserInfo();
		return true;
	}
	else if(head=="FAIL")
	{
		AfxMessageBox("登陆失败");
			return true;
	}

	return false;

}

void CClientDlg::OnOK() 
{
	CString buttonText;
	m_ok.GetWindowText(buttonText);
	if(buttonText=="更改IP")
	{
		GetDlgItem(IDC_EDIT_IPADD)->EnableWindow(TRUE);
		m_ok.SetWindowText("确定");
	}
	else if(buttonText=="确定")
	{
		UpdateData(TRUE);
		if(CheckId(this->m_ipAddress)||m_ipAddress=="localhost")
		{
			m_IpAddress=m_ipAddress;
			GetDlgItem(IDC_EDIT_IPADD)->EnableWindow(FALSE);
			m_ok.SetWindowText("更改IP");

		}
		else
		{
			AfxMessageBox("请输入正确的IP格式");
		}
		
		

	}
	
//	CDialog::OnOK();
}


bool CClientDlg::CheckId(CString& preIp)
{
	int begin=0;
	int end=0;
	CString seg1;
	CString seg2;
	CString seg3;
	CString seg4;

	end=preIp.Find(".",begin);
	seg1=preIp.Mid(begin,end-begin);
	begin=end+1;

	end=preIp.Find(".",begin);
	seg2=preIp.Mid(begin,end-begin);
	begin=end+1;

	end=preIp.Find(".",begin);
	seg3=preIp.Mid(begin,end-begin);
	begin=end+1;

	seg4=preIp.Mid(begin);


	if((!seg1.IsEmpty())&&
	   (!seg2.IsEmpty())&&
	   (!seg3.IsEmpty())&&
	   (!seg4.IsEmpty()))
	 {

		if(IsNumberOfIp(seg1)&&
		   IsNumberOfIp(seg2)&&
		   IsNumberOfIp(seg3)&&
		   IsNumberOfIp(seg4)
			)
		{
			return true;
		}
		

	}
	return false;
}








bool CClientDlg::IsNumberOfIp(CString ipSeg)
{
	int size=ipSeg.GetLength();
	char *segChar;
	if(size>0&&size<=3)
	 {
		segChar=new char[size];
	     for(int i=0;i<size;i++)
	    {
	       segChar[i]=ipSeg[i];
	    }
	    int number=atoi(segChar);
	    if(!(number>=0&&number<=255))
	    {
		    return false;
    
	    }
	}
	delete segChar;
	return true;

}

⌨️ 快捷键说明

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