📄 pagepeople.cpp
字号:
// PagePeople.cpp : implementation file
//
#include "stdafx.h"
#include "NetManager.h"
#include "PagePeople.h"
#include "PagePeopleList.h"
#include "GlobalsExtern.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// finger
#define WSVERSION 0x101 // Windows Sockets version
#define INET_ADDR inet_addr // WS DLL has the right inet_addr
typedef unsigned long IPA;
typedef IPA FAR *LPIPA;
typedef LPIPA FAR *LPPIPA;
#define FE_ERROR 1 // finger operation was not successful
#define FE_NOPORT 2 // failure to resolve finger service to a port
#define FE_NOHOST 3 // failure to resolve host specifier
#define FE_NOSOCK 4 // failure to obtain socket for connection
#define FE_NOCONN 5 // failure to connect to remote finger server
#define FE_NOSEND 6 // failure to send finger query
#define FE_NORECV 7 // failure to receive finger data
IPA g_GetHostAddr(char*);
bool g_Finger(CString, CString, CString&);
UINT g_FingerThread(LPVOID);
/////////////////////////////////////////////////////////////////////////////
// CPagePeople property page
IMPLEMENT_DYNCREATE(CPagePeople, CPropertyPage)
CPagePeople::CPagePeople() : CPropertyPage(CPagePeople::IDD)
{
//{{AFX_DATA_INIT(CPagePeople)
m_sServer = _T("");
m_sUser = _T("");
m_nPeopleMinutes = 0;
//}}AFX_DATA_INIT
}
CPagePeople::~CPagePeople()
{
}
void CPagePeople::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPagePeople)
DDX_Control(pDX, IDC_LOCAL_NET, m_LocalNet);
DDX_Control(pDX, IDC_SPIN_PEOPLE, m_PeopleSpin);
DDX_Control(pDX, IDB_CHECK_ALL, m_CheckAll);
DDX_Control(pDX, IDB_ACTIVE, m_Active);
DDX_Control(pDX, IDB_ISMANUAL, m_IsManual);
DDX_Control(pDX, IDB_ACTIVE_MAIL, m_ActiveMail);
DDX_Control(pDX, IDB_EVERY, m_Every);
DDX_Control(pDX, IDB_ONSTART, m_OnStart);
DDX_Control(pDX, IDB_ONEND, m_OnEnd);
DDX_Control(pDX, IDC_FINGERUSER, m_User);
DDX_Control(pDX, IDC_FINGERSERVER, m_Server);
DDX_Text(pDX, IDC_FINGERSERVER, m_sServer);
DDV_MaxChars(pDX, m_sServer, 40);
DDX_Text(pDX, IDC_FINGERUSER, m_sUser);
DDV_MaxChars(pDX, m_sUser, 40);
DDX_Text(pDX, IDC_MINUTES, m_nPeopleMinutes);
DDV_MinMaxInt(pDX, m_nPeopleMinutes, 0, 10000);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPagePeople, CPropertyPage)
//{{AFX_MSG_MAP(CPagePeople)
ON_BN_CLICKED(IDB_REMOVE, OnRemove)
ON_BN_CLICKED(IDB_FINGER, OnFinger)
ON_BN_CLICKED(IDB_FINGER_MANUAL, OnFingerManual)
ON_BN_CLICKED(IDC_FINGER_CURRENT, OnFingerCurrent)
ON_NOTIFY(NM_DBLCLK, IDC_SERVERTREE, OnDblclkServertree)
ON_BN_CLICKED(IDB_ACTIVE, OnActive)
ON_BN_CLICKED(IDB_ACTIVE_MAIL, OnActiveMail)
ON_BN_CLICKED(IDB_ISMANUAL, OnIsManual)
ON_BN_CLICKED(IDB_CHECK_ALL, OnCheckAll)
ON_BN_CLICKED(IDB_EVERY, OnEvery)
ON_EN_KILLFOCUS(IDC_MINUTES, OnKillfocusMinutes)
ON_BN_CLICKED(IDC_LOCAL_NET, OnLocalNet)
ON_EN_CHANGE(IDC_FINGERSERVER, OnChangeFingerserver)
ON_EN_CHANGE(IDC_FINGERUSER, OnChangeFingeruser)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPagePeople message handlers
void CPagePeople::ItemInsert(LPCTSTR sServer)
{
int nValue;
m_pTreeCtrlItem->item.pszText = (LPSTR)sServer;
m_pTreeCtrlItem->item.iImage = ICON_SERVER;
m_pTreeCtrlItem->item.iSelectedImage = ICON_SERVER;
nValue = g_pThisApp->GetProfileInt("People Servers", sServer, 0);
switch(nValue)
{
case 0:
m_pTreeCtrlItem->item.state = INDEXTOSTATEIMAGEMASK(ICON_EMPTY);
m_pTreeCtrlItem->item.stateMask = TVIS_STATEIMAGEMASK;
break;
case 1:
m_pTreeCtrlItem->item.state = INDEXTOSTATEIMAGEMASK(ICON_EMPTY) | TVIS_BOLD;
m_pTreeCtrlItem->item.stateMask = TVIS_STATEIMAGEMASK | TVIS_BOLD;
break;
case 2:
m_pTreeCtrlItem->item.state = INDEXTOSTATEIMAGEMASK(ICON_MANUAL);
m_pTreeCtrlItem->item.stateMask = TVIS_STATEIMAGEMASK;
break;
default:
m_pTreeCtrlItem->item.state = INDEXTOSTATEIMAGEMASK(ICON_MANUAL) | TVIS_BOLD;
m_pTreeCtrlItem->item.stateMask = TVIS_STATEIMAGEMASK | TVIS_BOLD;
}
m_pTreeCtrlItem->hParent = TVI_ROOT;
m_pTreeCtrlItem->hParent = m_ServerTree.InsertItem(m_pTreeCtrlItem);
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::ItemInsert(LPCTSTR sServer, LPCTSTR sUser)
{
int nValue;
m_pTreeCtrlItem->item.pszText = (LPSTR)sUser;
m_pTreeCtrlItem->item.iImage = ICON_USER;
m_pTreeCtrlItem->item.iSelectedImage = ICON_USER;
nValue = g_pThisApp->GetProfileInt(sServer, sUser, 0);
switch(nValue)
{
case 0:
m_pTreeCtrlItem->item.state = INDEXTOSTATEIMAGEMASK(ICON_EMPTY);
m_pTreeCtrlItem->item.stateMask = TVIS_STATEIMAGEMASK;
break;
case 1:
m_pTreeCtrlItem->item.state = INDEXTOSTATEIMAGEMASK(ICON_EMPTY) | TVIS_BOLD;
m_pTreeCtrlItem->item.stateMask = TVIS_STATEIMAGEMASK | TVIS_BOLD;
break;
case 2:
m_pTreeCtrlItem->item.state = INDEXTOSTATEIMAGEMASK(ICON_MAIL);
m_pTreeCtrlItem->item.stateMask = TVIS_STATEIMAGEMASK;
break;
default:
m_pTreeCtrlItem->item.state = INDEXTOSTATEIMAGEMASK(ICON_MAIL) | TVIS_BOLD;
m_pTreeCtrlItem->item.stateMask = TVIS_STATEIMAGEMASK | TVIS_BOLD;
}
m_ServerTree.InsertItem(m_pTreeCtrlItem);
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::SavePeople()
{
HTREEITEM hServerItem = m_ServerTree.GetRootItem();
HTREEITEM hUserItem;
CString sServer;
CString sUser;
int nValue;
do
{
sServer = m_ServerTree.GetItemText(hServerItem);
nValue = 0;
if(m_ServerTree.GetItemState(hServerItem, TVIF_STATE) & TVIS_BOLD)
nValue = nValue|1;
if((m_ServerTree.GetItemState(hServerItem, TVIS_STATEIMAGEMASK) & TVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(ICON_MANUAL))
nValue = nValue|2;
g_pThisApp->WriteProfileInt("People Servers", sServer, nValue);
if(hUserItem = m_ServerTree.GetChildItem(hServerItem))
{
do
{
sUser = m_ServerTree.GetItemText(hUserItem);
nValue = 0;
if(m_ServerTree.GetItemState(hUserItem, TVIF_STATE) & TVIS_BOLD)
nValue = nValue|1;
if((m_ServerTree.GetItemState(hUserItem, TVIS_STATEIMAGEMASK) & TVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(ICON_MAIL))
nValue = nValue|2;
g_pThisApp->WriteProfileInt(sServer, sUser, nValue);
hUserItem = m_ServerTree.GetNextSiblingItem(hUserItem);
}
while(hUserItem);
}
hServerItem = m_ServerTree.GetNextSiblingItem(hServerItem);
}
while(hServerItem);
}
/////////////////////////////////////////////////////////////////////////////
BOOL CPagePeople::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_OnStart.SetCheck(g_pThisApp->GetProfileInt("People", "OnStart", 0));
m_OnEnd.SetCheck(g_pThisApp->GetProfileInt("People", "OnEnd", 0));
m_ServerTree.SubclassDlgItem(IDC_SERVERTREE, this);
m_PeopleSpin.SetRange(0, 10000);
m_pTreeCtrlItem = new TV_INSERTSTRUCT;
m_pTreeCtrlItem->item.mask = (TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_STATE);
// fill out treecontrol from ini file --------------------------------------
CStringArray* psCurrentServerArray;
int nServerNum = m_pAllServersArray->GetSize();
for(int nServerIndex = 0; nServerIndex < nServerNum; nServerIndex++)
{
psCurrentServerArray = (CStringArray*)m_pAllServersArray->GetAt(nServerIndex);
int nItemNum = psCurrentServerArray->GetSize();
ItemInsert(psCurrentServerArray->GetAt(0)); // first item - server
for(int nUserIndex = 1; nUserIndex < nItemNum; nUserIndex++)
ItemInsert(psCurrentServerArray->GetAt(0), psCurrentServerArray->GetAt(nUserIndex));
}
// image list ---------------------------------------------------------------
HICON Icon0 = g_pThisApp->LoadIcon(IDI_SERVER);
HICON Icon1 = g_pThisApp->LoadIcon(IDI_USER);
HICON Icon2 = g_pThisApp->LoadIcon(IDI_MANUAL);
HICON Icon3 = g_pThisApp->LoadIcon(IDI_MAIL);
HICON Icon4 = g_pThisApp->LoadIcon(IDI_LINE);
m_pImagesSmall = new CImageList;
m_pImagesSmall->Create(16, 16, ILC_COLORDDB | ILC_MASK, 5, 0);
m_pImagesLarge = new CImageList;
m_pImagesLarge->Create(32, 32, ILC_COLORDDB | ILC_MASK, 5, 0);
m_pImagesSmall->Add(Icon0);
m_pImagesSmall->Add(Icon1);
m_pImagesSmall->Add(Icon2);
m_pImagesSmall->Add(Icon3);
m_pImagesSmall->Add(Icon4);
m_pImagesLarge->Add(Icon0);
m_pImagesLarge->Add(Icon1);
m_pImagesLarge->Add(Icon2);
m_pImagesLarge->Add(Icon3);
m_pImagesLarge->Add(Icon4);
if(!g_bPeopleImages)
SetSmallImages();
else
SetLargeImages();
if(m_ServerTree.GetRootItem())
m_ServerTree.SelectItem(m_ServerTree.GetRootItem());
if(IfCanCheckAll())
{
if(g_bPeopleMonitoring)
{
m_Every.SetCheck(1);
OnEvery();
}
}
else
m_Every.SetCheck(0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::SetSmallImages()
{
m_ServerTree.SetImageList(m_pImagesSmall, TVSIL_NORMAL);
m_ServerTree.SetImageList(m_pImagesSmall, TVSIL_STATE);
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::SetLargeImages()
{
m_ServerTree.SetImageList(m_pImagesLarge, TVSIL_NORMAL);
m_ServerTree.SetImageList(m_pImagesLarge, TVSIL_STATE);
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::AddServer()
{
UpdateData();
if(m_sServer != "")
{
m_pTreeCtrlItem->item.pszText = m_sServer.GetBuffer(MAX_PATH);
m_sServer.ReleaseBuffer();
m_pTreeCtrlItem->item.iImage = 0;
m_pTreeCtrlItem->item.iSelectedImage = 0;
m_pTreeCtrlItem->hParent = TVI_ROOT;
m_pTreeCtrlItem->hParent = m_ServerTree.InsertItem(m_pTreeCtrlItem);
g_WriteToHistory(TRUE, "[People] Added " + m_sServer);
m_Server.SetWindowText("");
}
else
AfxMessageBox("You must enter a server");
m_ServerTree.RedrawWindow();
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::AddUser()
{
UpdateData();
if(m_sUser != "")
{
HTREEITEM hCurrItem = m_ServerTree.GetSelectedItem();
if(hCurrItem)
{
HTREEITEM hCurrServer;
if(hCurrServer = m_ServerTree.GetParentItem(hCurrItem))
hCurrItem = hCurrServer;
m_pTreeCtrlItem->hParent = hCurrItem;
m_pTreeCtrlItem->item.pszText = (LPSTR)m_sUser.GetBuffer(MAX_PATH);
m_ServerTree.SetItemImage(m_pTreeCtrlItem->hParent = m_ServerTree.InsertItem(m_pTreeCtrlItem), 1, 1);
m_sUser.ReleaseBuffer();
g_WriteToHistory(TRUE, "[People] Added " + m_sUser + " to " + m_ServerTree.GetItemText(hCurrItem));
m_User.SetWindowText("");
}
else
AfxMessageBox("Select a server");
}
else
AfxMessageBox("You must enter a user");
m_ServerTree.RedrawWindow();
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnRemove()
{
HTREEITEM hCurrItem = m_ServerTree.GetSelectedItem();
if(hCurrItem)
{
if(MessageBox("Remove this item???", NULL, MB_ICONQUESTION | MB_YESNO) == IDYES)
{
g_WriteToHistory(TRUE, "[People] Removed " + m_ServerTree.GetItemText(hCurrItem));
m_ServerTree.DeleteItem(hCurrItem);
}
}
else
AfxMessageBox("Nothing selected");
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnIsManual()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -