自己写的一个列表框项目添加与筛除函数,该函数应用于TCP/UDP服务端或客户端连接时更新列表框中的项目:如果新连接设备IP地址不同,则在列表框中添加新设备的IP、端口、索引;如果新连接设备的IP地址已经存在,则添加新设备替换原来相同IP的设备;还可指定IP地址的设备进行筛除。
void CUDP_ServerDlg::UpdateList(LPCTSTR Ip,int No,int Operation) //更新列表框 operation为0,添加新设备;为1,筛除指定IP设备
{
CString ip_add; //添加的IP地址中间变量
ip_add.Format(_T("%s"), Ip); //转换为CString类型
if(Operation==0) //添加新设备
{
CString no; //端口中间变量
no.Format(_T("%d"),No); //转换为CString类型
if(m_list.GetItemCount()==0) //列表框中没有项目则添加第一项
{
m_list.InsertItem(0,_T("0")); //插入新行
m_list.SetItemText(0, 1, Ip); //新行第1列插入IP
m_list.SetItemText(0, 2, no); //新行第2列插入no
}
else //列表中已添加了项目
{
bool flag=0; //新连接设备IP是否在列表框中存在的标志位
for (int k = 0; k < m_list.GetItemCount(); k++) //判断新连接设备IP地址在列表中已经存在
{
if (m_list.GetItemText(k, 1) == ip_add ) //IP地址号项目,则删除IP相同的已连接设备
{
m_list.DeleteItem(k); //筛除IP相同设备
CString list_no;
list_no.Format(_T("%d"),k);
m_list.InsertItem(k,list_no); //在筛除的设备位置插入新行(设备)
m_list.SetItemText(k, 1, Ip); //新行第1列插入IP
m_list.SetItemText(k, 2, no); //新行第2列插入端口号no
flag=1;
}
else if ((k == m_list.GetItemCount()-1)&&(flag==0)) //如果新连设备IP在列表框中没有,则在最后一次循环中添加新行(设备)
{
CString list_c;
list_c.Format(_T("%d"),m_list.GetItemCount()); //
m_list.InsertItem(m_list.GetItemCount(),list_c); //在列表框最后添加新行(设备)
m_list.SetItemText(m_list.GetItemCount()-1, 1, Ip); //新行第1列插入IP地址
m_list.SetItemText(m_list.GetItemCount()-1, 2, no); //新行第2列插入端口号no
}
else //其他情况空操作
{}
}
}
}
else //筛除列表框项目(设备)
{
for(int i=0;i<m_list.GetItemCount();i++)
{
if (m_list.GetItemText(i, 1) == ip_add ) //IP地址号项目,则删除IP相同的已连接设备
{
m_list.DeleteItem(i); //筛除IP相同设备
}
}
}
}
函数说明:
1、函数三个参数分别代表设备的IP地址,设备的端口号,操作类型
2、m_list为定义的列表框变量,定义:
CListCtrl m_list;
3、调用:
CUDP_ServerDlg *dlg = (CUDP_ServerDlg*)lpParm;
dlg->UpdateList(gcClientIP,n,0); //更新列表框
或者直接用
UpdateList(gcClientIP,n,0); //更新列表框`