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

📄 pagepeople.cpp

📁 网络管理器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 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 + -