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

📄 pmonitordlg.cpp

📁 一个操作系统资源监测器的需求、设计与实现
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// PMonitorDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PMonitor.h"
#include "PMonitorDlg.h"
#include "stdio.h"
#include "MINIFRAME.h"

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

///////////////
#define HOST_MAIN 0
#define PROCESS_INFO 1
#define HOST_PERFORMANCE 2
#define NETWORK_FLOW 3

//动态生成的控件的ID
#define IDC_DISK1  50
#define IDC_TITLE10  51
#define IDC_TITLE11  52
#define IDC_TITLE12  53
#define IDC_TITLE13  54
#define IDC_TITLE14  55
#define IDC_TITLE15  56
#define IDC_TITLE16  57
#define IDC_TITLE17  58
#define IDC_TITLE18  59

#define IDC_DISK2  60
#define IDC_TITLE20  61
#define IDC_TITLE21  62
#define IDC_TITLE22  63
#define IDC_TITLE23  64
#define IDC_TITLE24  65
#define IDC_TITLE25  66
#define IDC_TITLE26  67
#define IDC_TITLE27  68
#define IDC_TITLE28  69

#define IDC_DISK3  70
#define IDC_TITLE30  71
#define IDC_TITLE31  72
#define IDC_TITLE32  73
#define IDC_TITLE33  74
#define IDC_TITLE34  75
#define IDC_TITLE35  76
#define IDC_TITLE36  77
#define IDC_TITLE37  78
#define IDC_TITLE38  79

#define IDC_DISK4  80
#define IDC_TITLE40  81
#define IDC_TITLE41  82
#define IDC_TITLE42  83
#define IDC_TITLE43  84
#define IDC_TITLE44  85
#define IDC_TITLE45  86
#define IDC_TITLE46  87
#define IDC_TITLE47  88
#define IDC_TITLE48  89

#define IDC_DISK5  90
#define IDC_TITLE50  91
#define IDC_TITLE51  92
#define IDC_TITLE52  93
#define IDC_TITLE53  94
#define IDC_TITLE54  95
#define IDC_TITLE55  96
#define IDC_TITLE56  97
#define IDC_TITLE57  98
#define IDC_TITLE58  99

#define IDC_DISK6  110
#define IDC_TITLE60  111
#define IDC_TITLE61  112
#define IDC_TITLE62  113
#define IDC_TITLE63  114
#define IDC_TITLE64  115
#define IDC_TITLE65  116
#define IDC_TITLE66  117
#define IDC_TITLE67  118
#define IDC_TITLE68  119

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data

	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPMonitorDlg dialog

CPMonitorDlg::CPMonitorDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPMonitorDlg::IDD, pParent)
{
	//自定义变量
	param=new CParameter();
	sys=new CSysInfo();
	this->pInfo=NULL;

	//{{AFX_DATA_INIT(CPMonitorDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPMonitorDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPMonitorDlg)
	DDX_Control(pDX, IDC_MFRAME8, m_frame8);
	DDX_Control(pDX, IDC_MFRAME7, m_frame7);
	DDX_Control(pDX, IDC_MFRAME6, m_frame6);
	DDX_Control(pDX, IDC_MFrame5, m_frame5);
	DDX_Control(pDX, IDC_DYNPLOY4, m_ploy4);
	DDX_Control(pDX, IDC_DYNPLOY3, m_ploy3);
	DDX_Control(pDX, IDC_DYNCOL4, m_col4);
	DDX_Control(pDX, IDC_DYNCOL3, m_col3);
	DDX_Control(pDX, IDC_MFRAME4, m_frame4);
	DDX_Control(pDX, IDC_MFRAME3, m_frame3);
	DDX_Control(pDX, IDC_MFRAME2, m_frame2);
	DDX_Control(pDX, IDC_MFrame1, m_frame1);
	DDX_Control(pDX, IDC_DYNPLOY2, m_ploy2);
	DDX_Control(pDX, IDC_DYNPLOY1, m_ploy1);
	DDX_Control(pDX, IDC_DYNCOL2, m_col2);
	DDX_Control(pDX, IDC_DYNCOL1, m_col1);
	DDX_Control(pDX, IDOK, m_finish);
	DDX_Control(pDX, IDC_PROLIST, m_list);
	DDX_Control(pDX, IDC_DISKPIC6, m_dused6);
	DDX_Control(pDX, IDC_DISKPIC5, m_dused5);
	DDX_Control(pDX, IDC_DISKPIC4, m_dused4);
	DDX_Control(pDX, IDC_DISKPIC3, m_dused3);
	DDX_Control(pDX, IDC_DISKPIC2, m_dused2);
	DDX_Control(pDX, IDC_DISKPIC1, m_dused1);
	DDX_Control(pDX, IDC_Main, m_main);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPMonitorDlg, CDialog)
	//{{AFX_MSG_MAP(CPMonitorDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_NOTIFY(TCN_SELCHANGE, IDC_Main, OnSelchangeMain)
	ON_WM_TIMER()
	ON_COMMAND(ID_PARAM_MANAGE, OnParamManage)
	ON_COMMAND(ID_MIN_UP, OnMinUp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPMonitorDlg message handlers

//自定义的全局变量
//常量
int COLCYC=0;
int SYSINFO_CYC=3600;   //一小时

//变量
int tag[]={0,0,0};
int index=0;
int diskvalue[6][2]={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}};
//CFile *file=new CFile();

BOOL cflag=FALSE;
BOOL mflag=FALSE;
BOOL niflag=FALSE;
BOOL noflag=FALSE;

int cpu_count=0;
int memory_count=0;
int input_count=0;
int output_count=0;

int level[4][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};
COLORREF color[4][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};
CPoint *cpoint=new CPoint[101];
CPoint *mpoint=new CPoint[101];
CPoint *ipoint=new CPoint[101];
CPoint *opoint=new CPoint[101];
int pervalue[4][101];

BOOL CPMonitorDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	//file->Open("d:\\record.txt",CFile::modeNoTruncate|CFile::modeReadWrite,NULL);

	//获取采集数据周期
	COLCYC=param->getIntegerValue("ColCyc");

	//确定Tag页
	//添加Tag页
	TC_ITEM tItem; 
    tItem.mask = TCIF_TEXT; 
    tItem.pszText = "系统资源"; 
    tItem.cchTextMax = strlen(tItem.pszText); 
    m_main.InsertItem(0, &tItem);

	//设定时钟
	this->SetTimer(1,SYSINFO_CYC*1000,NULL);

	int tid=1;
	CString fstr=param->getCStringValue("PROCESS");
	if(fstr!="UnSel")
	{
		TC_ITEM tItem; 
		tItem.mask = TCIF_TEXT; 
		tItem.pszText = "进程"; 
		tItem.cchTextMax = strlen(tItem.pszText); 
		m_main.InsertItem(tid, &tItem);

		tag[tid-1]=PROCESS_INFO;

		tid++;

		//设定时钟
		this->SetTimer(2,60*COLCYC*1000,NULL);
	}

	fstr=param->getCStringValue("Memory");
	if(fstr!="UnSel")
	{
		TC_ITEM tItem; 
		tItem.mask = TCIF_TEXT; 
		tItem.pszText = "性能"; 
		tItem.cchTextMax = strlen(tItem.pszText); 
		m_main.InsertItem(tid, &tItem);

		tag[tid-1]=HOST_PERFORMANCE;

		tid++;

		mflag=TRUE;

		//设定时钟
		this->SetTimer(4,COLCYC*1000,NULL);

		fstr=param->getCStringValue("CPU");
		if(fstr!="UnSel")
		{
			cflag=TRUE;

			//设定时钟
			this->SetTimer(3,COLCYC*1000,NULL);
		}
	}
	else
	{
		fstr=param->getCStringValue("CPU");
		if(fstr!="UnSel")
		{
			TC_ITEM tItem; 
			tItem.mask = TCIF_TEXT; 
			tItem.pszText = "性能"; 
			tItem.cchTextMax = strlen(tItem.pszText); 
			m_main.InsertItem(tid, &tItem);

			tag[tid-1]=HOST_PERFORMANCE;

			tid++;

			cflag=TRUE;

			//设定时钟
			this->SetTimer(3,COLCYC*1000,NULL);
		}
	}

	fstr=param->getCStringValue("NetIN");
	if(fstr!="UnSel")
	{
		TC_ITEM tItem; 
		tItem.mask = TCIF_TEXT; 
		tItem.pszText = "网络流量"; 
		tItem.cchTextMax = strlen(tItem.pszText); 
		m_main.InsertItem(tid, &tItem);

		tag[tid-1]=NETWORK_FLOW;

		tid++;

		niflag=TRUE;

		//设定时钟
		this->SetTimer(5,COLCYC*1000,NULL);

		fstr=param->getCStringValue("NetOUT");
		if(fstr!="UnSel")
		{
			noflag=TRUE;

			//设定时钟
			this->SetTimer(6,COLCYC*1000,NULL);
		}
	}
	else
	{
		fstr=param->getCStringValue("NetOUT");
		if(fstr!="UnSel")
		{
			TC_ITEM tItem; 
			tItem.mask = TCIF_TEXT; 
			tItem.pszText = "网络流量"; 
			tItem.cchTextMax = strlen(tItem.pszText); 
			m_main.InsertItem(tid, &tItem);

			tag[tid-1]=NETWORK_FLOW;

			tid++;

			noflag=TRUE;

			//设定时钟
			this->SetTimer(6,COLCYC*1000,NULL);
		}
	}

	//初始化显示Tag页“系统资源”内的信息
	CDiskInfo *diskInfo;
	diskInfo=&sys->getDiskInfo();

	int id=0;
	CString str;
	CRect *rc;

	while(diskInfo!=NULL)
	{
		if(diskInfo->getDiskSize()>0&&diskInfo->getDiskName()!="Virtual Memory")
		{
			if((index%2)==0)
			{
				id=index/2;

				switch(id)
				{
				case 0:
					disk1=new CButton();
					rc=new CRect(23,42,223,220);
					disk1->Create(diskInfo->getDiskName(),BS_GROUPBOX,*rc,this,IDC_DISK1);
					disk1->ShowWindow(SW_SHOW);

					m_dused1.SetWindowPos(&(wndBottom),95,61,64,105,SWP_SHOWWINDOW);
					m_dused1.ShowWindow(SW_SHOW);
					diskvalue[index][0]=diskInfo->getDiskSize();
					diskvalue[index][1]=diskInfo->getDUsedSize();

					dtitle1=new CStatic();
					rc=new CRect(25,178,62,196);
					dtitle1->Create("容量:",SS_CENTER,*rc,this,IDC_TITLE11);
					dtitle1->ShowWindow(SW_SHOW);

					dvalue1=new CStatic();
					rc=new CRect(67,178,109,196);
					str.Format("%d",diskInfo->getDiskSize());
					dvalue1->Create(str+"(G)",SS_CENTER,*rc,this,IDC_TITLE12);
					dvalue1->ShowWindow(SW_SHOW);

					ctitle1=new CStatic();
					rc=new CRect(120,178,180,196);
					ctitle1->Create("使用容量:",SS_CENTER,*rc,this,IDC_TITLE13);
					ctitle1->ShowWindow(SW_SHOW);

					cvalue1=new CStatic();
					rc=new CRect(181,178,217,196);
					str.Format("%d",diskInfo->getDUsedSize());
					cvalue1->Create(str+"(G)",SS_CENTER,*rc,this,IDC_TITLE14);
					cvalue1->ShowWindow(SW_SHOW);

					cntitle1=new CStatic();
					rc=new CRect(25,198,75,216);
					cntitle1->Create("簇大小:",SS_CENTER,*rc,this,IDC_TITLE15);
					cntitle1->ShowWindow(SW_SHOW);

					cnvalue1=new CStatic();
					rc=new CRect(76,198,116,216);
					str.Format("%d",diskInfo->getClusterSize());
					cnvalue1->Create(str,SS_CENTER,*rc,this,IDC_TITLE16);
					cnvalue1->ShowWindow(SW_SHOW);

					cutitle1=new CStatic();
					rc=new CRect(120,198,172,216);
					cutitle1->Create("簇个数:",SS_CENTER,*rc,this,IDC_TITLE17);
					cutitle1->ShowWindow(SW_SHOW);

					cuvalue1=new CStatic();
					rc=new CRect(174,198,215,216);
					str.Format("%d",diskInfo->getClusterNum());
					cuvalue1->Create(str,SS_CENTER,*rc,this,IDC_TITLE18);
					cuvalue1->ShowWindow(SW_SHOW);

					break;
				case 1:
					disk3=new CButton();
					rc=new CRect(23,191+42,223,191+220);
					disk3->Create(diskInfo->getDiskName(),BS_GROUPBOX,*rc,this,IDC_DISK3);
					disk3->ShowWindow(SW_SHOW);

					m_dused3.SetWindowPos(&(wndBottom),95,191+61,64,105,SWP_SHOWWINDOW);
					m_dused3.ShowWindow(SW_SHOW);
					diskvalue[index][0]=diskInfo->getDiskSize();
					diskvalue[index][1]=diskInfo->getDUsedSize();

					dtitle3=new CStatic();
					rc=new CRect(25,191+178,62,191+196);
					dtitle3->Create("容量:",SS_CENTER,*rc,this,IDC_TITLE31);
					dtitle3->ShowWindow(SW_SHOW);

					dvalue3=new CStatic();
					rc=new CRect(67,191+178,109,191+196);
					str.Format("%d",diskInfo->getDiskSize());
					dvalue3->Create(str+"(G)",SS_CENTER,*rc,this,IDC_TITLE32);
					dvalue3->ShowWindow(SW_SHOW);

					ctitle3=new CStatic();
					rc=new CRect(120,191+178,180,191+196);
					ctitle3->Create("使用容量:",SS_CENTER,*rc,this,IDC_TITLE33);
					ctitle3->ShowWindow(SW_SHOW);

					cvalue3=new CStatic();
					rc=new CRect(181,191+178,217,191+196);
					str.Format("%d",diskInfo->getDUsedSize());
					cvalue3->Create(str+"(G)",SS_CENTER,*rc,this,IDC_TITLE34);
					cvalue3->ShowWindow(SW_SHOW);

					cntitle3=new CStatic();
					rc=new CRect(25,191+198,75,191+216);
					cntitle3->Create("簇大小:",SS_CENTER,*rc,this,IDC_TITLE35);
					cntitle3->ShowWindow(SW_SHOW);

					cnvalue3=new CStatic();
					rc=new CRect(76,191+198,116,191+216);
					str.Format("%d",diskInfo->getClusterSize());
					cnvalue3->Create(str,SS_CENTER,*rc,this,IDC_TITLE36);
					cnvalue3->ShowWindow(SW_SHOW);

					cutitle3=new CStatic();
					rc=new CRect(120,191+198,172,191+216);
					cutitle3->Create("簇个数:",SS_CENTER,*rc,this,IDC_TITLE37);
					cutitle3->ShowWindow(SW_SHOW);

					cuvalue3=new CStatic();
					rc=new CRect(174,191+198,215,191+216);
					str.Format("%d",diskInfo->getClusterNum());
					cuvalue3->Create(str,SS_CENTER,*rc,this,IDC_TITLE38);
					cuvalue3->ShowWindow(SW_SHOW);

					break;
				case 2:
					disk5=new CButton();
					rc=new CRect(23,382+42,223,382+220);
					disk5->Create(diskInfo->getDiskName(),BS_GROUPBOX,*rc,this,IDC_DISK5);
					disk5->ShowWindow(SW_SHOW);

					m_dused5.SetWindowPos(&(wndBottom),95,382+61,64,105,SWP_SHOWWINDOW);
					m_dused5.ShowWindow(SW_SHOW);
					diskvalue[index][0]=diskInfo->getDiskSize();
					diskvalue[index][1]=diskInfo->getDUsedSize();

					dtitle5=new CStatic();
					rc=new CRect(25,382+178,62,382+196);
					dtitle5->Create("容量:",SS_CENTER,*rc,this,IDC_TITLE51);
					dtitle5->ShowWindow(SW_SHOW);

					dvalue5=new CStatic();
					rc=new CRect(67,382+178,109,382+196);
					str.Format("%d",diskInfo->getDiskSize());
					dvalue5->Create(str+"(G)",SS_CENTER,*rc,this,IDC_TITLE52);
					dvalue5->ShowWindow(SW_SHOW);

					ctitle5=new CStatic();
					rc=new CRect(120,382+178,180,382+196);
					ctitle5->Create("使用容量:",SS_CENTER,*rc,this,IDC_TITLE53);
					ctitle5->ShowWindow(SW_SHOW);

					cvalue5=new CStatic();
					rc=new CRect(181,382+178,217,382+196);
					str.Format("%d",diskInfo->getDUsedSize());
					cvalue5->Create(str+"(G)",SS_CENTER,*rc,this,IDC_TITLE54);
					cvalue5->ShowWindow(SW_SHOW);

					cntitle5=new CStatic();
					rc=new CRect(25,382+198,75,382+216);
					cntitle5->Create("簇大小:",SS_CENTER,*rc,this,IDC_TITLE55);
					cntitle5->ShowWindow(SW_SHOW);

					cnvalue5=new CStatic();
					rc=new CRect(76,382+198,116,382+216);
					str.Format("%d",diskInfo->getClusterSize());
					cnvalue5->Create(str,SS_CENTER,*rc,this,IDC_TITLE56);
					cnvalue5->ShowWindow(SW_SHOW);

					cutitle5=new CStatic();
					rc=new CRect(120,382+198,172,382+216);
					cutitle5->Create("簇个数:",SS_CENTER,*rc,this,IDC_TITLE57);
					cutitle5->ShowWindow(SW_SHOW);

					cuvalue5=new CStatic();
					rc=new CRect(174,382+198,215,382+216);
					str.Format("%d",diskInfo->getClusterNum());
					cuvalue5->Create(str,SS_CENTER,*rc,this,IDC_TITLE58);
					cuvalue5->ShowWindow(SW_SHOW);
				}
			}
			else
			{
				id=index/2;

				switch(id)
				{
				case 0:
					disk2=new CButton();
					rc=new CRect(210+23,42,210+223,220);
					disk2->Create(diskInfo->getDiskName(),BS_GROUPBOX,*rc,this,IDC_DISK2);
					disk2->ShowWindow(SW_SHOW);

					m_dused2.SetWindowPos(&(wndBottom),210+95,61,64,105,SWP_SHOWWINDOW);
					m_dused2.ShowWindow(SW_SHOW);
					diskvalue[index][0]=diskInfo->getDiskSize();
					diskvalue[index][1]=diskInfo->getDUsedSize();

					dtitle2=new CStatic();
					rc=new CRect(210+25,178,210+62,196);
					dtitle2->Create("容量:",SS_CENTER,*rc,this,IDC_TITLE21);
					dtitle2->ShowWindow(SW_SHOW);

					dvalue2=new CStatic();
					rc=new CRect(210+67,178,210+109,196);
					str.Format("%d",diskInfo->getDiskSize());
					dvalue2->Create(str+"(G)",SS_CENTER,*rc,this,IDC_TITLE22);
					dvalue2->ShowWindow(SW_SHOW);

					ctitle2=new CStatic();
					rc=new CRect(210+120,178,210+180,196);
					ctitle2->Create("使用容量:",SS_CENTER,*rc,this,IDC_TITLE23);
					ctitle2->ShowWindow(SW_SHOW);

⌨️ 快捷键说明

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