📄 mylistctrl.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 + -