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

📄 ccamsview.cpp

📁 一个网络监视的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CCAMSView.cpp : implementation of the CCCAMSView class
//

#include "stdafx.h"
#include "CCAMS.h"

#include "CCAMSDoc.h"
#include "CCAMSView.h"
#include "MainFrm.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCCAMSView

IMPLEMENT_DYNCREATE(CCCAMSView, CFormView)

BEGIN_MESSAGE_MAP(CCCAMSView, CFormView)
	//{{AFX_MSG_MAP(CCCAMSView)
	ON_WM_SIZE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCCAMSView construction/destruction

CCCAMSView::CCCAMSView()
	: CFormView(CCCAMSView::IDD),m_Plot(10)	// time span in minutes
{
	//{{AFX_DATA_INIT(CCCAMSView)
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	m_bCanSize = false;
	m_strPreClient = "FirstClient";
}

CCCAMSView::~CCCAMSView()
{
}

void CCCAMSView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCCAMSView)
	DDX_Control(pDX, IDC_CLPLOT, m_ctlPlot);
	DDX_Control(pDX, IDC_LIST, m_listHis);
	//}}AFX_DATA_MAP
}

void CCCAMSView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	m_listHis.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

	CMainFrame *pWnd = (CMainFrame *)AfxGetMainWnd();
	pWnd->StartListenThread();

//	if ( GetDocument()->m_bClientEmpty )
//		pWnd->m_wndCategory.EnableWindow( false);

	CRect Rect;
	GetDlgItem(IDC_CLPLOT)->GetClientRect(&Rect); 

	m_Plot.Create(WS_CHILD|WS_VISIBLE, Rect, GetDlgItem(IDC_CLPLOT), 12000);
	m_Plot.SetSerie(0, PS_SOLID, RGB(255,0,0), 0, 100, "CPU");
	m_Plot.SetSerie(1, PS_SOLID, RGB(0,0,255), 0, 10, "File");
	m_Plot.SetSerie(2, PS_SOLID, RGB(255,0,255), 0, 10, "Mail");
	m_Plot.SetSerie(3, PS_SOLID, RGB(0,255,255), 0, 10, "Net");
	m_Plot.SetSerie(4, PS_SOLID, RGB(0,255,0), 0, 10, "Pro");

	m_Plot.m_bAutoScrollX = true;
	m_bCanSize = true;
	SetTimer(1, 9000, NULL);	// 10 s
}

/////////////////////////////////////////////////////////////////////////////
// CCCAMSView diagnostics

#ifdef _DEBUG
void CCCAMSView::AssertValid() const
{
	CFormView::AssertValid();
}

void CCCAMSView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CCCAMSDoc* CCCAMSView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCCAMSDoc)));
	return (CCCAMSDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCCAMSView message handlers

//===============================================================
// 函 数 名:OnSize
// 功能描述:动态控制控件大小, 使控件占满整个显示区域
// 输入参数:void
// 输出参数:void
// 创建日期:04-7-18
// 修改日期:04-7-21
// 作    者:陈欢
// 调用函数: non
// 被调函数: 显示区域大小变化时被调用
// 附加说明:重载父类函数
//===============================================================
void CCCAMSView::OnSize(UINT nType, int cx, int cy)
{
	CFormView::OnSize(nType, cx, cy);
	
//	列表列表控件必须是第一个控件
//	CWnd *pchild = this->GetWindow(GW_CHILD); //Identifies the CWnd first child window

	this->ShowWindow(SW_MAXIMIZE);
	CWnd *pchild = 0;

	pchild = GetDlgItem(IDC_LIST);
	if ( pchild != NULL)
	{
		CRect rect;
		this->GetClientRect(&rect);
		pchild->ScreenToClient(&rect);
		pchild->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(),
							SWP_NOZORDER | SWP_NOACTIVATE);
	}

	pchild = GetDlgItem(IDC_CLPLOT);
	if ( pchild != NULL)
	{
		CRect rect;
		this->GetClientRect(&rect);
		pchild->ScreenToClient(&rect);
		pchild->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(),
							SWP_NOZORDER | SWP_NOACTIVATE);
	}

	if ( m_bCanSize )
	{
		CRect Rect;
		GetClientRect(Rect);
		m_Plot.MoveWindow(Rect);
	}
}

//===============================================================
// 函 数 名:InitListHead
// 功能描述:初始化列表控件的头部
// 输入参数:void
// 输出参数:void
// 创建日期:04-7-20
// 修改日期:04-7-20
// 作    者:陈欢
// 调用函数: non
// 被调函数: OnUpdate
// 附加说明:和函数 InitList 一起被调用, 且在它之前
//===============================================================
void CCCAMSView::InitListHead()
{
	// init list ctrl
	if ( m_listHis.GetItemCount() > 0 )
		m_listHis.DeleteAllItems();
	while(m_listHis.DeleteColumn(0)){}

	LV_COLUMN	lvColumn;
	lvColumn.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	lvColumn.fmt=LVCFMT_LEFT;
	//设置第0列
	lvColumn.cx = 100;
	lvColumn.iSubItem = 0;
	lvColumn.pszText = "Which Client";
	m_listHis.InsertColumn(0, &lvColumn);
	//设置第1列
	lvColumn.cx = 100;
	lvColumn.iSubItem = 1;
	lvColumn.pszText = "When";
	m_listHis.InsertColumn(1, &lvColumn);
	//设置第2列
	lvColumn.cx = 300;
	lvColumn.iSubItem = 2;
	lvColumn.pszText = "What Happens";
	m_listHis.InsertColumn(2, &lvColumn);
}

//===============================================================
// 函 数 名:InitList
// 功能描述:填加列表控件的内容
// 输入参数:void
// 输出参数:void
// 创建日期:04-7-18
// 修改日期:04-7-20
// 作    者:陈欢
// 调用函数: ListCPU, ListFile, ListMail, ListNet, ListProcess
// 被调函数: OnUpdate
// 附加说明:若当前选择显示所有类别的信息, 调用全部函数
//           若选择某一个种类, 则调用一个相应的函数
//===============================================================
void CCCAMSView::InitList()
{
	CWaitCursor wait;

	int cate = GetDocument()->m_nCategory;
	switch ( cate )
	{
	case 5:	// All Activity, without break;
	case 0:	//CPU
		ListCPU();
		if ( cate != 5 )	//
		break;
	case 1:		// File
		ListFile();
		if ( cate != 5 )	//
		break;
	case 2:		// Mail
		ListMail();
		if ( cate != 5 )	//
		break;
	case 3:		// Net
		ListNet();
		if ( cate != 5 )	//
		break;
	case 4:		// Process
		ListProcess();
		break;
	}
}

//===============================================================
// 函 数 名:OnUpdate
// 功能描述:设置视图中两相控件的显示属性, 设置工具栏下拉列表的显示属性
// 输入参数:CView* pSender, LPARAM lHint, CObject* pHint
// 输出参数:void
// 创建日期:04-7-18
// 修改日期:04-7-22
// 作    者:陈欢
// 调用函数: InitListHead, InitList
// 被调函数: OnInitialUpdate, 当此视图被重新显示时被系统调用
// 附加说明:若当前选择显示所有类别的信息, 调用全部函数
//           若选择某一个种类, 则调用一个相应的函数
//===============================================================
void CCCAMSView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	if ( GetDocument()->m_nCurView == 0 )
	{
		m_listHis.ShowWindow( SW_SHOW );
		m_ctlPlot.ShowWindow( SW_HIDE );

		CMainFrame *pWnd = (CMainFrame *)AfxGetMainWnd( );
		pWnd->m_wndCategory.EnableWindow( true );
		if ( GetDocument()->m_bClientEmpty )
			pWnd->m_wndCategory.EnableWindow( false );

		InitListHead();
		InitList();
	}
	else
	{
		m_ctlPlot.ShowWindow( SW_SHOW );
		m_listHis.ShowWindow( SW_HIDE );

		CMainFrame *pWnd = (CMainFrame *)AfxGetMainWnd( );
		pWnd->m_wndCategory.EnableWindow( false );
	}
}

//===============================================================
// 函 数 名:ListCPU
// 功能描述:读取数据库存中的 CPU 记录, 在列表框中显示出来
// 输入参数:void
// 输出参数:void
// 创建日期:04-7-20
// 修改日期:04-7-20
// 作    者:陈欢
// 调用函数: non
// 被调函数: InitList
// 附加说明:引用全局变量 g_criCpuAccess, gm_setCpu
//===============================================================
void CCCAMSView::ListCPU()
{
	extern CRITICAL_SECTION g_criCpuAccess;
	extern CSetCPU		gm_setCpu;
	EnterCriticalSection( &g_criCpuAccess );

	try
	{
		if ( !gm_setCpu.IsOpen() )
			gm_setCpu.Open();
		gm_setCpu.Requery();

		int i = 0;
		CString strFilter = GetDocument()->m_strCurClient;
		LV_ITEM lvi;
		lvi.mask = LVIF_TEXT;

		while ( !gm_setCpu.IsEOF() )
		{
			CString ip = gm_setCpu.m_client.GetBuffer(0);
			if ( !strFilter.IsEmpty() && ip != strFilter )
			{
				gm_setCpu.MoveNext();
				continue;
			}

			// who
			lvi.iItem = i;
			lvi.iSubItem = 0;
			lvi.pszText = ip.GetBuffer(0);
			m_listHis.InsertItem( &lvi );

			// when
			m_listHis.SetItemText( i, 1, gm_setCpu.m_time );
	
			// what
			CString str;
			str.Format( "%d", gm_setCpu.m_usage );
			str = "CPU  usage: " + str;
			m_listHis.SetItemText( i, 2, str );
		
			i++;
			gm_setCpu.MoveNext();
		}
	}
	catch(...)	{	}

	gm_setCpu.Close();

	LeaveCriticalSection( &g_criCpuAccess );
}

//===============================================================

⌨️ 快捷键说明

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