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

📄 chatdlg.cpp

📁 windows下聊天室源程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:


//右键菜单更改用户信息
void CChatDlg::On140()
{
	// TODO: 在此添加命令处理程序代码
	POSITION pos = m_listctrl.GetFirstSelectedItemPosition();
	int nItem = m_listctrl.GetNextSelectedItem(pos);
	CString name=m_listctrl.GetItemText(nItem,0);

	POSITION pos1;
	user *muser;
	pos1 = m_userlist.GetHeadPosition();
	while ( pos1 != NULL )
	{
		muser = &m_userlist.GetNext (pos1);
		if ( muser->ID ==  nItem)
		{
			break;
		}
	}

	if ( muser->ID == -1)
	{
		MessageBox("没有找到");
		return;
	}

	
	
	
	CUserInfoDlg dlg;
	dlg.m_name  = muser->name;
	dlg.ip = muser->ip;
	dlg.m_curentimage = muser->Iimage ;
	
	if (dlg.DoModal() == IDOK )
	{
		muser->name = dlg.m_name;
		muser->ip = dlg.ip ;
		if (muser->pdlg == NULL)
		{
			muser->pdlg = new CMyDialog(name,this);
			muser->pdlg->ip = muser->ip;
			muser->pdlg->Create(IDD_DIALOG1,this);
		}
		muser->pdlg->ip = dlg.ip ;
		muser->pdlg->m_name = dlg.m_name;
		muser->Iimage = dlg.m_curentimage  ;
		muser->pdlg->Iimage = muser->Iimage ;
		CString strbmp;
		int flag = muser->Iimage + 1;
		strbmp.Format("face//%d.bmp",flag);

		HBITMAP hbitmap = (HBITMAP)LoadImage(NULL,strbmp,IMAGE_BITMAP,0,0,
											LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
		muser->pdlg->m_image.SetBitmap(hbitmap);

		muser->pdlg->SetWindowText("与"+dlg.m_name+"聊天中");

	//分解IP
		char iptemp[4][4];
		for (int i=0;i<4;i++)
		{
			memset(iptemp[i],'\0',4);
		}
		CString s = dlg.ip;
		char *temp = s.GetBuffer();
		char *p1=strstr(temp,".");
		*p1='\0';
		strcpy(iptemp[0],temp);
		temp = p1 + 1;

		p1=strstr(temp,".");
		*p1='\0';
		strcpy(iptemp[1],temp);
		temp = p1 + 1;

		p1=strstr(temp,".");
		*p1='\0';
		strcpy(iptemp[2],temp);
		temp = p1 + 1;

		strcpy(iptemp[3],temp);
		int ipint[4];
		for ( i=0; i < 4; i++ )
		{
			ipint[i] = atoi(iptemp[i]);
		}
		muser->pdlg->m_ip.SetAddress( ipint[0],ipint[1],ipint[2],ipint[3] );

		
		LV_ITEM item;
		item.mask = LVIF_IMAGE|LVIF_TEXT;
		item.iItem = nItem;
		item.iSubItem = 0;
		item.pszText = muser->name.GetBuffer(muser->name.GetLength());
		item.cchTextMax = muser->name.GetLength();
		item.iImage = muser->Iimage ;
		m_listctrl.SetItem(&item);
	}//ifok
		
		

}
//收到socket信息
void CChatDlg::OnReceive()
{
	
	char strrev[1024];
	memset(strrev,'\0',1024);
	int nresult;
	UINT port;	
	CString ipstr;

	nresult=m_socket.ReceiveFrom(strrev,sizeof(strrev),ipstr,port);


	if ( (nresult != SOCKET_ERROR) )
	{
		
		
		POSITION pos1;
		user *pmuser;
		pos1 = m_userlist.GetHeadPosition();
		while ( pos1 != NULL )
		{
			pmuser = &m_userlist.GetNext (pos1);
			if( pmuser->ip == ipstr)
			{
				break;
			}
		}

		if ( pmuser->ID == -1)
		{
			return;
		}
		//是上线信息
		CString onlineflag = strrev;
		if (onlineflag == "1234567890mmm")
		{
			for (int i = 0 ;i < m_listctrl.GetItemCount() ; i++ )
			{
				int id_data = m_listctrl.GetItemData(i);
				if ( pmuser->ID == id_data)
				{
					CString str = pmuser->name +"(在线)";
					m_listctrl.SetItemText(i,0,str);
					return;
				}
			}
		}
		if ( onlineflag ==  "onlineonline")
		{
			CString temp ;
			temp ="你的好友" +pmuser->name + "上线了哦";
			//dlg.DoModal();
			if (pdlg == NULL)
			{
				pdlg = new CInformDlg(this);
				pdlg->Create (IDD_DIALOG4,this);
				pdlg->SetWindowText(temp);
				CPoint point(700,500);
				pdlg->ClientToScreen(&point);
				pdlg->CenterWindow(this);
				pdlg->ShowWindow(SW_SHOW);
			}
			
			if ( !pdlg->IsWindowVisible() )
			{
				pdlg->SetWindowText(temp);
				CPoint point(700,500);
				pdlg->ClientToScreen(&point);
				pdlg->CenterWindow(this);
				pdlg->ShowWindow(SW_SHOW);
			}

			for (int i = 0 ;i < m_listctrl.GetItemCount() ; i++ )
			{
				int id_data = m_listctrl.GetItemData(i);
				if ( pmuser->ID == id_data)
				{
					CString str = pmuser->name +"(在线)";
					m_listctrl.SetItemText(i,0,str);
					//return;
				}
			}
			
			CString send = "1234567890mmm";
			m_socket.SendTo(send,send.GetLength(),1600,pmuser->ip ,0);
			return;
		}
		if (onlineflag == "downlinedownline")
		{
			CString temp ;
			temp = "你的好友"+pmuser->name + "已经下线了";
			if (pdlg == NULL)
			{
				pdlg = new CInformDlg(this);
				pdlg->Create (IDD_DIALOG4,this);
				pdlg->SetWindowText(temp);
				CPoint point(700,500);
				pdlg->ClientToScreen(&point);
				pdlg->CenterWindow(this);
				pdlg->ShowWindow(SW_SHOW);
			}
			
			if ( !pdlg->IsWindowVisible() )
			{
				pdlg->SetWindowText(temp);
				CPoint point(700,500);
				pdlg->ClientToScreen(&point);
				pdlg->CenterWindow(this);
				pdlg->ShowWindow(SW_SHOW);
			}
			
			for (int i = 0 ;i < m_listctrl.GetItemCount() ; i++ )
			{
				int id_data = m_listctrl.GetItemData(i);
				if ( pmuser->ID == id_data)
				{
					CString str = pmuser->name +"(不在线)";
					m_listctrl.SetItemText(i,0,str);
					return;
				}
			}

			return;
		}

		if (pmuser->pdlg == NULL)
		{
			pmuser->pdlg = new CMyDialog(pmuser->name,this);
			pmuser->pdlg->ip = pmuser->ip;
			pmuser->pdlg->Create(IDD_DIALOG1,this);
			pmuser->pdlg->ShowWindow(SW_SHOW);
		}
		if (!pmuser->pdlg->IsWindowVisible())
		{
			pmuser->pdlg->ShowWindow(SW_SHOW);
		}
		CString temp;
		pmuser->pdlg->m_send.GetWindowText(temp);
		if ( temp != "回信息")
		{
			pmuser->pdlg->m_edit.GetWindowText(pmuser->pdlg->info);
		}
		CString str = strrev;
		CTime t=CTime::GetCurrentTime();
		CString m_time = t.Format("%Y-%m-%d %H:%M");
		pmuser->pdlg->m_listbox.InsertString(0,pmuser->name+"对你说: "+str+"  "+m_time );
		pmuser->pdlg->m_edit.SetWindowText(str);
		pmuser->pdlg->m_edit.EnableWindow(false);
		pmuser->pdlg->m_send.SetWindowText("回信息");
		pmuser->pdlg->SetForegroundWindow();
		
	}
	
	
}
//删除好友
void CChatDlg::OnDeleteUser()
{
	// TODO: 在此添加命令处理程序代码

	POSITION pos = m_listctrl.GetFirstSelectedItemPosition();
	int nItem = m_listctrl.GetNextSelectedItem(pos);
	if (nItem < 0)
	{
		return;
	}
	int id=(int)m_listctrl.GetItemData(nItem);
	m_listctrl.DeleteItem(nItem);
	POSITION pos1;
	user *muser;
	pos1 = m_userlist.GetHeadPosition();
	//muser = &m_userlist.GetAt(pos1);
	while ( pos1 != NULL )
	{
		muser = &m_userlist.GetNext (pos1);
		if ( muser->ID ==  id)
		{
			if(pos1  == NULL )
			{
				pos1 = m_userlist.GetTailPosition();
			}
			else
			{
				 m_userlist.GetPrev(pos1);
			}
			 m_userlist.RemoveAt(pos1) ; 
			break;
		}
		
	}

	if ( muser->ID == -1)
	{
		MessageBox("没有找到");
		return;
	}

}
//添加好友
void CChatDlg::OnAddUser()
{
	// TODO: 在此添加命令处理程序代码
	CUserInfoDlg dlg;
	dlg.m_name = "昵称";
	dlg.ip = "192.168.0.0";
	if (dlg.DoModal() == IDOK )
	{
		user muser ;
		int id = m_listctrl.GetItemCount();
		m_listctrl.InsertItem(id,dlg.m_name,dlg.m_curentimage );
		m_listctrl.SetItemData(id,id);
		muser.ID =id;
		muser.name = dlg.m_name ;
		muser.ip = dlg.ip ;
		muser.Iimage = dlg.m_curentimage ;
		m_userlist.AddTail(muser);
	
	}
}
//增加用户
void CChatDlg::On150()
{
	OnAddUser();
}
//消息群发
void CChatDlg::OnSendToAll()
{
	// TODO: 在此添加命令处理程序代码
	CSendToAllDlg dlg;
	CString strsend;
	if (dlg.DoModal() == IDOK )
	{
		strsend = dlg.m_str;
	
		POSITION pos = m_userlist.GetHeadPosition();
		CAsyncSocket * psocket = new CAsyncSocket;
		if ( psocket->Create(1601,SOCK_DGRAM,FD_READ|FD_WRITE,NULL) ==SOCKET_ERROR)
		{
			AfxMessageBox("创建套接字失败");
			delete psocket;
			return;
		}
	
		while ( pos != NULL )
		{
			 user tempuser = m_userlist.GetAt(pos);
			int result = psocket->SendTo(strsend,strsend.GetLength(),1600,tempuser.ip);
		
			if ( result == SOCKET_ERROR)
			{
				CString temp ;
				temp = "发送给" + tempuser.name + "消息失败";
				MessageBox(temp,"发送失败提示",MB_OK);
			//delete psocket;
			//return;
			}
		
			m_userlist.GetNext(pos);
		
		}
		psocket->Close();
		delete psocket;
	}
}
//捕获热键
LRESULT CChatDlg::OnHotKey(WPARAM wParam,LPARAM lParam) 
{
	if (wParam == 1001||wParam == 1002)
	{
		if (hidenflag == true )
		{
			m_forhwd =::GetForegroundWindow();
			::ShowWindow(m_forhwd,SW_HIDE);
			ShowWindow(SW_HIDE);
			hidenflag = false ;
		}
		else
		{
			this->ShowWindow(SW_SHOW);
			::ShowWindow(m_forhwd,SW_SHOW);
			hidenflag = true;
			
		}

	}
	if (wParam == 1003)
	{
		HWND m_hhwd =::GetForegroundWindow();
		
		::SendMessage(m_hhwd,WM_MYMESSAGE,0,0);
		
	}
	return 0;
}

void CChatDlg::OnAbort()
{
	// TODO: 在此添加命令处理程序代码
	
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
}

HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何属性

	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
  pDC->SetBkMode(TRANSPARENT);
	HBRUSH br=::CreateSolidBrush(RGB(128,128,200));
	return br;
	//return hbr;
}



//重载onok
void CChatDlg::OnOK()
{
	// TODO: 在此添加专用代码和/或调用基类

	//CDialog::OnOK();
}
//重载oncancel
void CChatDlg::OnCancel()
{
	// TODO: 在此添加专用代码和/或调用基类

	//CDialog::OnCancel();
}
//扫描Mac地址
void CChatDlg::OnMac()
{
	// TODO: 在此添加命令处理程序代码
	CMacDlg dlg;
	dlg.DoModal();

}

void CChatDlg::OnChess()
{
	// TODO: 在此添加命令处理程序代码
	CChoiceKindDlg kdlg;
	if ( kdlg.DoModal() == IDOK )
	{
			CChessDlg dlg;
		if ( kdlg.machine == true )
		{
			dlg.m_and_p_flag  = true;
			
		}
		dlg.DoModal();
	}
	

	

}

⌨️ 快捷键说明

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