📄 chatdlg.cpp
字号:
//右键菜单更改用户信息
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 + -