📄 log.cpp
字号:
// Log.cpp : implementation file
//
#include "stdafx.h"
#include "LANDetect.h"
#include "Log.h"
#include "LOGResult.h"
#include "DlgAdp.h"
#include "Detail.h"
#include "Find.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLog dialog
CString buffer[255];
int bnum[255];
int Lnum; //统计buffer中共有多少个数据
CLog::CLog(CWnd* pParent /*=NULL*/)
: CDialog(CLog::IDD, pParent)
{
//{{AFX_DATA_INIT(CLog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CLog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLog)
DDX_Control(pDX, IDC_LIST_NEED, m_need);
DDX_Control(pDX, IDC_LIST_LOG, m_log);
DDX_Control(pDX, IDC_COMBO_YEAR, m_year);
DDX_Control(pDX, IDC_COMBO_MONTH, m_month);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLog, CDialog)
//{{AFX_MSG_MAP(CLog)
ON_BN_CLICKED(IDC_BUTTON_SHOW, OnButtonShow)
ON_BN_CLICKED(IDC_BUTTON_DETECT, OnButtonDetect)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_LOG, OnColumnclickListLog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLog message handlers
BOOL CLog::OnInitDialog()
{
CDialog::OnInitDialog();
//设置组合框的初始值
m_month.SetCurSel(0);
m_year.SetCurSel(0);
Lnum=0;
//设置LIST控件的初始化
DWORD dwStyle=GetWindowLong(m_log.GetSafeHwnd(),GWL_STYLE);
dwStyle&=~LVS_TYPEMASK;
dwStyle|=LVS_REPORT;
SetWindowLong(m_log.GetSafeHwnd(),GWL_STYLE,dwStyle);
m_log.InsertColumn(0,"IP地址",LVCFMT_LEFT,120);
m_log.InsertColumn(1,"累计次数",LVCFMT_CENTER,80);
m_log.SetExtendedStyle(LVS_EX_GRIDLINES);
::SendMessage(m_log.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,
LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
DWORD dwStyle1=GetWindowLong(m_need.GetSafeHwnd(),GWL_STYLE);
dwStyle1&=~LVS_TYPEMASK;
dwStyle1|=LVS_REPORT;
SetWindowLong(m_need.GetSafeHwnd(),GWL_STYLE,dwStyle);
m_need.InsertColumn(0,"IP地址",LVCFMT_CENTER,230);
m_need.SetExtendedStyle(LVS_EX_GRIDLINES);
::SendMessage(m_need.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,
LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
//初始化需要显示的数据 关键:需要统计某一IP的累计次数
CString SIP;
//连接数据库
if(m_db.IsOpen())
m_db.Close();
CString sql;
sql="select * from Record";
m_db.Open(CRecordset::dynaset,_T(sql));
while(!m_db.IsEOF()) //先将需要的信息存下来
{
SIP=m_db.m_DIP;
if(!IsInsert(SIP))
{
buffer[Lnum]=SIP;
bnum[Lnum]=1;
Lnum++;
}
else
bnum[(IsInsert(SIP))-1]++;
m_db.MoveNext();
}
for(int i=0;i<Lnum;i++) //显示保存下来的结果
{
m_log.InsertItem(0,buffer[i],0);
CString num;
num.Format("%d",bnum[i]);
m_log.SetItemText(0,1,num);
}
SetProp(m_log.GetSafeHwnd(),"排序列号",(HANDLE)0);
SetProp(m_log.GetSafeHwnd(),"排序顺序",(HANDLE)1);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//判断该IP是否已添加到列表中
int CLog::IsInsert(CString SIP)
{
for(int i=0;i<Lnum;i++)
{
if(SIP==buffer[i])
return ++i;
}
return 0;
}
void CLog::OnButtonShow()
{
for(int i=0;i<Lnum;i++)
{
buffer[i]="";
bnum[i]=0;
}
Lnum=0;
m_log.DeleteAllItems();
if(m_db.IsOpen())
m_db.Close();
CString sql;
sql="select * from Record";
m_db.Open(CRecordset::dynaset,_T(sql));
//CString Getstring1,Getstring2;
int Getyear,Getmonth; //获取选中的年、月
//m_year.GetLBText(m_year.GetCurSel(),Getstring1);
//m_month.GetLBText(m_month.GetCurSel(),Getstring2);
Getyear=m_year.GetCurSel();
Getmonth=m_month.GetCurSel();
while(!m_db.IsEOF())
{
CString Gettime,GetIP;
GetIP=m_db.m_DIP;
Gettime=m_db.m_DTimes;
Deal(GetIP,Gettime,Getyear,Getmonth);
m_db.MoveNext();
}
for(i=0;i<Lnum;i++) //显示保存下来的结果
{
m_log.InsertItem(0,buffer[i],0);
CString num;
num.Format("%d",bnum[i]);
m_log.SetItemText(0,1,num);
}
}
void CLog::Deal(CString GetIP,CString Gettime,int Getyear,int Getmonth)
{
int Month;
if(Gettime.GetAt(6)!='-')
Month=(Gettime.GetAt(5)-48)*10+(Gettime.GetAt(6)-48);
else
Month=Gettime.GetAt(5)-48;
CString Year;
switch(Getyear)
{
case 0:
Year="";
break;
case 1:
Year="2007";
break;
case 2:
Year="2008";
break;
case 3:
Year="2009";
break;
default:
break;
}
CString GetYear;
GetYear.Format("%c%c%c%c",Gettime.GetAt(0),Gettime.GetAt(1),Gettime.GetAt(2),Gettime.GetAt(3));
if(Getyear!=0)
{
if(Getmonth==0)
{
if(Year!=GetYear)
return;
}
else
{
if(Year!=GetYear||Getmonth!=Month)
return;
}
}
else
{
if(Getmonth!=0)
{
if(Getmonth!=Month)
return;
}
}
if(!IsInsert(GetIP))
{
buffer[Lnum]=GetIP;
bnum[Lnum]=1;
Lnum++;
}
else
bnum[(IsInsert(GetIP))-1]++;
}
//监测某一个主机
void CLog::OnButtonDetect()
{
if(dev==NULL){
MessageBox("请选择网卡!");
return ;
}
for(int i=0;i<m_need.GetItemCount();i++)
{
LIP[i]=m_need.GetItemText(i,0);
}
Lognum=m_need.GetItemCount();
if(Lognum==0)
{
AfxMessageBox("要监测的主机列表不可为空!");
return;
}
CLOGResult dlg;
dlg.DoModal();
}
void CLog::OnButtonAdd()
{
// TODO: Add your control notification handler code here
POSITION pos=m_log.GetFirstSelectedItemPosition();
if(pos==NULL)
{
AfxMessageBox("请从左边列表中选择一项!");
return;
}
int SelIndex = m_log.GetNextSelectedItem(pos);
CString str;
str=m_log.GetItemText(SelIndex,0);
//判断右列表中是否已有该项
for(int i=0;i<m_need.GetItemCount();i++)
{
if(m_need.GetItemText(i,0)==str)
{
AfxMessageBox("右侧待测列表中已有该IP地址!");
return;
}
}
m_need.InsertItem(0,str,0);
}
void CLog::OnButtonDel()
{
POSITION pos=m_need.GetFirstSelectedItemPosition();
if(pos==NULL)
{
AfxMessageBox("请从右边列表中选择一项!");
return;
}
int SelIndex = m_need.GetNextSelectedItem(pos);
m_need.DeleteItem(SelIndex);
}
void CLog::OnButtonSet()
{
CDlgAdp dlg;
dlg.DoModal();
}
//排序比较函数
int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
{
MyData *p=(MyData *)lParamSort;
CListCtrl* list =p->listctrl;
int isub=p->isub;
LVFINDINFO findInfo;
findInfo.flags = LVFI_PARAM;
findInfo.lParam = lParam1;
int iItem1 = list->FindItem(&findInfo, -1);
findInfo.lParam = lParam2;
int iItem2 = list->FindItem(&findInfo, -1);
CString strItem1 =list->GetItemText(iItem1,isub);
CString strItem2 =list->GetItemText(iItem2,isub);
int cflag;
if(atoi(LPCSTR(strItem1)) > atoi(LPCSTR(strItem2)))
cflag=1;
else
cflag=-1;
if(p->seq)
return cflag;
else
return -cflag;
}
//对列表进行排序
void CLog::OnColumnclickListLog(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
MyData *tmpp=new MyData;
tmpp->listctrl=&m_log;
tmpp->isub=pNMListView->iSubItem;
int sortnum=(int)GetProp(m_log.GetSafeHwnd(),"排序列号");
int sortasc=(int)GetProp(m_log.GetSafeHwnd(),"排序顺序");
if(sortnum==pNMListView->iSubItem){
sortasc=(sortasc+1)%2;
SetProp(m_log.GetSafeHwnd(),"排序顺序",(HANDLE)sortasc);
}
SetProp(m_log.GetSafeHwnd(),"排序列号",(HANDLE)pNMListView->iSubItem);
tmpp->seq=sortasc;
for (int i=0;i<m_log.GetItemCount();i++)
{
m_log.SetItemData(i, i);
}
m_log.SortItems(CompareFunc,(LPARAM)tmpp);
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -