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

📄 mylistctrl.cpp

📁 该源代码实现了局域网内的信息传递、文件传输
💻 CPP
字号:
// MyListCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "BQQ.h"
#include "MyListCtrl.h"
//#include "computerlist.h"
#include "computerinfo.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyListCtrl

CMyListCtrl::CMyListCtrl()
{
	m_CurrentGroup="";

}

CMyListCtrl::~CMyListCtrl()
{
}


BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
	//{{AFX_MSG_MAP(CMyListCtrl)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_WM_RBUTTONDOWN()
	ON_COMMAND(ID_LISTAD, OnListad)
	ON_COMMAND(ID_LISTDEL, OnListdel)
	ON_COMMAND(ID_LISTMOD, OnListmod)
	ON_COMMAND(ID_LISTSAV, OnListsav)
	ON_COMMAND(ID_LISTMANU, OnListmanu)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyListCtrl message handlers


void CMyListCtrl::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	ModeAItem();
	*pResult = 0;
}

BOOL CMyListCtrl::InitList()
{
	CRect rect;
	GetClientRect(&rect);
	int nColInterval = rect.Width()/8;
	this->DeleteAllItems();
	//for(int i=0;i<5;i++)
	//	this->DeleteColumn(i);

	InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 2*nColInterval);
	InsertColumn(1, _T("机器名"), LVCFMT_LEFT,2*nColInterval);
	InsertColumn(2, _T("IP地址"), LVCFMT_LEFT, 3*nColInterval);
	InsertColumn(3, _T("备注"), LVCFMT_LEFT, rect.Width()-5*nColInterval);
	LoadLs();
	if(this->GetItemCount() ==0)
		AddAUser(0,"Author","Hury","192.168.75.111","");
	return TRUE;
}

BOOL CMyListCtrl::DeleteAItem()
{
	POSITION p;
	p =GetFirstSelectedItemPosition();
	while(p)
	{
		int nSelected = GetNextSelectedItem(p);
		if(nSelected >=0)
		{
			DeleteItem(nSelected);
		}
	}
	return TRUE;
}

BOOL CMyListCtrl::AddAItem()
{
	LPITEMIDLIST pidlRoot = NULL;
	SHGetSpecialFolderLocation(this->GetSafeHwnd(), CSIDL_NETWORK, &pidlRoot);
	CString m_sTo="",m_IP="";
	CString strDisplayName;
	BROWSEINFO bi;
	memset(&bi, 0, sizeof(BROWSEINFO));
	bi.hwndOwner = this->GetSafeHwnd();
	bi.pidlRoot = pidlRoot;
	bi.pszDisplayName = strDisplayName.GetBuffer(MAX_PATH + 1);
	bi.lpszTitle = "添加计算机";
	bi.ulFlags = BIF_BROWSEFORCOMPUTER;
	CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
	LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
	strDisplayName.ReleaseBuffer();
	if(pidl)
	{
		UpdateData();
		m_sTo = strDisplayName;
		unsigned long ip=0L;
		LPHOSTENT lphost;
		char *dotIP;
		//ZeroMemory(dotIP,MAX_NAME_SIZE+1);
		lphost = gethostbyname(m_sTo.GetBuffer(m_sTo.GetLength()));
		m_sTo.ReleaseBuffer();
		if (lphost != NULL)
			ip = ((LPIN_ADDR)lphost->h_addr)->s_addr;
		if(ip>0L && ip!=INADDR_NONE)
		{
			in_addr  add_in;
			add_in.s_addr = ip;
			dotIP = inet_ntoa(add_in);
			m_IP.Format("%s",dotIP);
		}
		AddAUser(GetItemCount(),m_sTo,m_sTo,m_IP,"");
		UpdateData(FALSE);
	}
	IMalloc *pMalloc = NULL;
	SHGetMalloc(&pMalloc);
	pMalloc->Free(pidlRoot);
	return TRUE;
}

BOOL CMyListCtrl::ModeAItem()
{
	CString name="",machine="",ip="",remark="";
	int nSelected;
	POSITION p;
	p = GetFirstSelectedItemPosition();
	while(p)
	{
		nSelected = GetNextSelectedItem(p);
		name = GetItemText(nSelected,0);
		machine =GetItemText(nSelected,1);
		ip= GetItemText(nSelected,2);
		remark = GetItemText(nSelected,3);
		CComputerInfo infoDlg(this->GetParent());
		infoDlg.m_Name = name;
		infoDlg.m_CompName=machine;
		infoDlg.IPAddr= ip;
		infoDlg.m_Remark= remark;
		if(infoDlg.DoModal()==IDOK)
		{
				AddAUser(nSelected,infoDlg.m_Name,infoDlg.m_CompName,infoDlg.IPAddr,infoDlg.m_Remark);
				break;
		}
		break;
	}
	return TRUE;
}

BOOL CMyListCtrl::AddAUser(int pos, CString name, CString machinename, CString IPAddr, CString remark)
{
	BOOL rs = TRUE;
	LVITEM lvi;
	LV_COLUMN lvcol;
	CString strItem;
	int index;
	lvi.mask =  LVIF_IMAGE | LVIF_TEXT;
	lvi.iItem = pos;
	lvi.iImage = 0;	
	lvi.iSubItem = 0;
	if(pos == GetItemCount())
	{
		lvi.state = LVIS_SELECTED;
		lvi.stateMask = LVIS_SELECTED;
	}
	

	lvcol.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
	lvcol.fmt=LVCFMT_CENTER;//居中
	lvcol.iImage =0;

	strItem.Format(_T(name));
	lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
	if(pos == GetItemCount())
	{
		index=InsertItem(&lvi);
		rs=SetItemText(index,1,(LPCTSTR)machinename);
		rs=SetItemText(index,2,(LPCTSTR)IPAddr);
		rs=SetItemText(index,3,(LPCTSTR)remark);
	}
	else
	{
		rs=SetItemText(pos,0,(LPCTSTR)name);
		rs=SetItemText(pos,1,(LPCTSTR)machinename);
		rs=SetItemText(pos,2,(LPCTSTR)IPAddr);
		rs=SetItemText(pos,3,(LPCTSTR)remark);
	}
	return rs;
}

void CMyListCtrl::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CListCtrl::OnRButtonDown(nFlags, point);
	CMenu* popMenu = new CMenu();
  	CRect rect(0,0,30,30);
 	popMenu->LoadMenu(IDR_LISTPOP);
 	CMenu* file_menu = popMenu->GetSubMenu(0);
 	ClientToScreen(&point);
 	file_menu->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,point.x,point.y,this);
	if(popMenu != NULL)
		delete popMenu;

}

void CMyListCtrl::OnListad() 
{
	// TODO: Add your command handler code here
	AddAItem();
}

void CMyListCtrl::OnListdel() 
{
	// TODO: Add your command handler code here
	DeleteAItem();
}

void CMyListCtrl::OnListmod() 
{
	// TODO: Add your command handler code here
	ModeAItem();
}

void CMyListCtrl::OnListsav() 
{
	// TODO: Add your command handler code here
	SaveLs(m_CurrentGroup);
}

BOOL CMyListCtrl::SaveLs(CString groupName)
{
	UpdateData();
	if(groupName.IsEmpty())
		return FALSE;
	int num = GetItemCount();
	WritePrivateProfileString(groupName, NULL , NULL, BQQ_INI );// delete all old group	
	for(int i=0; i<num;i++)
	{
		CString userList="",groupNumber="";
		userList +=GetItemText(i,0)+"@";
		userList +=GetItemText(i,1)+"@";
		userList +=GetItemText(i,2)+"@";
		userList +=GetItemText(i,3)+"$";
		groupNumber.Format("User%d", i+1);
		WritePrivateProfileString(groupName, groupNumber , userList, BQQ_INI );
	}
	return TRUE;
}

BOOL CMyListCtrl::LoadLs()
{
	#define MAX_TEMP_BUFFER_SIZE		2000
	TCHAR stTemp[MAX_TEMP_BUFFER_SIZE+1];
	CString groupNumber;
	this->DeleteAllItems();
	//MessageBox(m_CurrentGroup);
	for (int i = 0; i < MAX_GROUP ; i++)
	{
		groupNumber.Format("User%d", i+1);
		GetPrivateProfileString(m_CurrentGroup, groupNumber, "", stTemp, MAX_TEMP_BUFFER_SIZE, BQQ_INI );
		if ( strcmp( stTemp , "") != 0 )
		{
			ParseAddr(stTemp);
		}
		
	}
	SetItemState(GetTopIndex(),0xff,LVIS_SELECTED);
	return TRUE;
}

BOOL CMyListCtrl::ParseAddr(CString user)
{
	CString name="",machine="",IP ="",rem="";
	int start = GetItemCount();
	while(user.FindOneOf("$")!=-1)
	{
		int first = user.Find('@',0);
		name = user.Left(first);
		int sec = user.Find('@',first+1);
		machine = user.Mid(first+1,sec-first-1);
		int third = user.Find('@',sec+1);
		IP = user.Mid(sec+1,third-sec-1);
		int four = user.Find('$',third+1);
		rem = user.Mid(third+1,four-third-1);
		user = user.Mid(four+1);
		AddAUser(start++,name,machine,IP,rem);
	}
	return TRUE;
}

void CMyListCtrl::SaveAll()
{
	OnListsav();
}

void CMyListCtrl::OnListmanu() 
{
	// TODO: Add your command handler code here
	CComputerInfo inDlg(this->GetParent());
	if(inDlg.DoModal()==IDOK)
	{
			AddAUser(GetItemCount(),inDlg.m_Name,inDlg.m_CompName,inDlg.IPAddr,inDlg.m_Remark);
	}
}

⌨️ 快捷键说明

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