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

📄 pmonitordlg.cpp

📁 一个操作系统资源监测器的需求、设计与实现
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		CRect rc2;
		pWnd->GetWindowRect(&rc2);
		pWnd->UpdateWindow();

		int *info;
		info=sys->getMemoryUsedInfo();

		CString str;
		str.Format("%d",info[0]);

		this->DrawDynGraph(pDC1,pDC2,rc1,rc2,y,memory_count,info[1],1,str);
	}

	if(niflag)
	{
		int value=sys->getNetWorkInput();

		int y=this->DrawDynBg(IDC_DYNCOL3,IDC_DYNPLOY3);

		pWnd=this->GetDlgItem(IDC_DYNCOL3);
		CDC *pDC1;
		pDC1=pWnd->GetDC();
		CRect rc1;
		pWnd->GetWindowRect(&rc1);
		pWnd->UpdateWindow();

		pWnd=GetDlgItem(IDC_DYNPLOY3);
		CDC *pDC2;
		pDC2=pWnd->GetDC();
		CRect rc2;
		pWnd->GetWindowRect(&rc2);
		pWnd->UpdateWindow();

		CString str;
		str.Format("%d",value);

		int percent=(int)(((float)value/1000000)*100);

		this->DrawDynGraph(pDC1,pDC2,rc1,rc2,y,input_count,percent,2,str);
	}

	if(noflag)
	{
		int value=sys->getNetWorkOutput();

		int y=this->DrawDynBg(IDC_DYNCOL4,IDC_DYNPLOY4);

		pWnd=this->GetDlgItem(IDC_DYNCOL4);
		CDC *pDC1;
		pDC1=pWnd->GetDC();
		CRect rc1;
		pWnd->GetWindowRect(&rc1);
		pWnd->UpdateWindow();

		pWnd=GetDlgItem(IDC_DYNPLOY4);
		CDC *pDC2;
		pDC2=pWnd->GetDC();
		CRect rc2;
		pWnd->GetWindowRect(&rc2);
		pWnd->UpdateWindow();

		CString str;
		str.Format("%d",value);

		int percent=(int)(((float)value/1000000)*100);

		this->DrawDynGraph(pDC1,pDC2,rc1,rc2,y,output_count,percent,3,str);
	}
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CPMonitorDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CPMonitorDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}

	//新代码
	CWnd *pWnd;
	if(index>0)
	{
		pWnd=this->GetDlgItem(IDC_DISKPIC1);
		pWnd->UpdateWindow();

		this->DrawDiskInfo(diskvalue[0][0],diskvalue[0][1],IDC_DISKPIC1);
	}

	if(index>1)
	{
		pWnd=this->GetDlgItem(IDC_DISKPIC2);
		pWnd->UpdateWindow();

		this->DrawDiskInfo(diskvalue[1][0],diskvalue[1][1],IDC_DISKPIC2);
	}

	if(index>2)
	{
		pWnd=this->GetDlgItem(IDC_DISKPIC3);
		pWnd->UpdateWindow();

		this->DrawDiskInfo(diskvalue[2][0],diskvalue[2][1],IDC_DISKPIC3);
	}

	if(index>3)
	{
		pWnd=this->GetDlgItem(IDC_DISKPIC4);
		pWnd->UpdateWindow();

		this->DrawDiskInfo(diskvalue[3][0],diskvalue[3][1],IDC_DISKPIC4);
	}

	if(index>4)
	{
		pWnd=this->GetDlgItem(IDC_DISKPIC5);
		pWnd->UpdateWindow();

		this->DrawDiskInfo(diskvalue[4][0],diskvalue[4][1],IDC_DISKPIC5);
	}

	if(index>5)
	{
		pWnd=this->GetDlgItem(IDC_DISKPIC6);
		pWnd->UpdateWindow();

		this->DrawDiskInfo(diskvalue[5][0],diskvalue[5][1],IDC_DISKPIC6);
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CPMonitorDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CPMonitorDlg::OnSelchangeMain(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	if(m_main.GetCurSel()==0)
	{
		//显示部分
		if(index>0)
		{
			disk1->ShowWindow(SW_SHOW);
			m_dused1.ShowWindow(SW_SHOW);
			dtitle1->ShowWindow(SW_SHOW);
			dvalue1->ShowWindow(SW_SHOW);
			ctitle1->ShowWindow(SW_SHOW);
			cvalue1->ShowWindow(SW_SHOW);
			cntitle1->ShowWindow(SW_SHOW);
			cnvalue1->ShowWindow(SW_SHOW);
			cutitle1->ShowWindow(SW_SHOW);
			cuvalue1->ShowWindow(SW_SHOW);
		}
		if(index>1)
		{
			disk2->ShowWindow(SW_SHOW);
			m_dused2.ShowWindow(SW_SHOW);
			dtitle2->ShowWindow(SW_SHOW);
			dvalue2->ShowWindow(SW_SHOW);
			ctitle2->ShowWindow(SW_SHOW);
			cvalue2->ShowWindow(SW_SHOW);
			cntitle2->ShowWindow(SW_SHOW);
			cnvalue2->ShowWindow(SW_SHOW);
			cutitle2->ShowWindow(SW_SHOW);
			cuvalue2->ShowWindow(SW_SHOW);
		}
		if(index>2)
		{
			disk3->ShowWindow(SW_SHOW);
			m_dused3.ShowWindow(SW_SHOW);
			dtitle3->ShowWindow(SW_SHOW);
			dvalue3->ShowWindow(SW_SHOW);
			ctitle3->ShowWindow(SW_SHOW);
			cvalue3->ShowWindow(SW_SHOW);
			cntitle3->ShowWindow(SW_SHOW);
			cnvalue3->ShowWindow(SW_SHOW);
			cutitle3->ShowWindow(SW_SHOW);
			cuvalue3->ShowWindow(SW_SHOW);
		}
		if(index>3)
		{
			disk4->ShowWindow(SW_SHOW);
			m_dused4.ShowWindow(SW_SHOW);
			dtitle4->ShowWindow(SW_SHOW);
			dvalue4->ShowWindow(SW_SHOW);
			ctitle4->ShowWindow(SW_SHOW);
			cvalue4->ShowWindow(SW_SHOW);
			cntitle4->ShowWindow(SW_SHOW);
			cnvalue4->ShowWindow(SW_SHOW);
			cutitle4->ShowWindow(SW_SHOW);
			cuvalue4->ShowWindow(SW_SHOW);
		}
		if(index>4)
		{
			disk5->ShowWindow(SW_SHOW);
			m_dused5.ShowWindow(SW_SHOW);
			dtitle5->ShowWindow(SW_SHOW);
			dvalue5->ShowWindow(SW_SHOW);
			ctitle5->ShowWindow(SW_SHOW);
			cvalue5->ShowWindow(SW_SHOW);
			cntitle5->ShowWindow(SW_SHOW);
			cnvalue5->ShowWindow(SW_SHOW);
			cutitle5->ShowWindow(SW_SHOW);
			cuvalue5->ShowWindow(SW_SHOW);
		}
		if(index>5)
		{
			disk6->ShowWindow(SW_SHOW);
			m_dused6.ShowWindow(SW_SHOW);
			dtitle6->ShowWindow(SW_SHOW);
			dvalue6->ShowWindow(SW_SHOW);
			ctitle6->ShowWindow(SW_SHOW);
			cvalue6->ShowWindow(SW_SHOW);
			cntitle6->ShowWindow(SW_SHOW);
			cnvalue6->ShowWindow(SW_SHOW);
			cutitle6->ShowWindow(SW_SHOW);
			cuvalue6->ShowWindow(SW_SHOW);
		}

		//不能显示部分
		m_list.ShowWindow(SW_HIDE);
		m_finish.ShowWindow(SW_HIDE);

		m_frame1.ShowWindow(SW_HIDE);
		m_frame2.ShowWindow(SW_HIDE);
		m_frame3.ShowWindow(SW_HIDE);
		m_frame4.ShowWindow(SW_HIDE);
		m_frame5.ShowWindow(SW_HIDE);
		m_frame6.ShowWindow(SW_HIDE);
		m_frame7.ShowWindow(SW_HIDE);
		m_frame8.ShowWindow(SW_HIDE);
		m_col1.ShowWindow(SW_HIDE);
		m_col2.ShowWindow(SW_HIDE);
		m_col3.ShowWindow(SW_HIDE);
		m_col4.ShowWindow(SW_HIDE);
		m_ploy1.ShowWindow(SW_HIDE);
		m_ploy2.ShowWindow(SW_HIDE);
		m_ploy3.ShowWindow(SW_HIDE);
		m_ploy4.ShowWindow(SW_HIDE);
	}
	else if(m_main.GetCurSel()==1)
	{
		this->ShowTag(0);
	}
	else if(m_main.GetCurSel()==2)
	{
		this->ShowTag(1);
	}
	else if(m_main.GetCurSel()==3)
	{
		this->ShowTag(2);
	}
	
	*pResult = 0;
}

void CPMonitorDlg::OnOK() 
{
	// TODO: Add extra validation here
	int pid=m_list.GetSelectionMark();
}

void CPMonitorDlg::DrawDiskInfo(int total, int cur, UINT nID)
{
	CWnd *pWnd=this->GetDlgItem(nID);
	CDC *pDC=pWnd->GetDC();

	CRect rc;
	pWnd->GetWindowRect(&rc);

	int width=rc.Width()-2;
	int height=rc.Height()-2;

	pDC->FillSolidRect(0,0,width,height,RGB(0,0,0));

	int percent=(int)(100*((float)cur/total));

	int x0=width/4;
	int y0=5;

	int dh=height-y0-5;

	int dx=x0-1;
	int dy=dh/25;

	int y1=this->DrawDiskBg(pDC,x0,y0,dx,dy);

	this->DrawDiskValue(pDC,x0,y1,dx,dy,percent/4);

	this->DrawDiskText(pDC,x0,y1,dx,percent);
}


int CPMonitorDlg::DrawDiskBg(CDC *pDC,int x0,int y0,int dx,int dy)
{
	int x1,y1;

	for(int i=0;i<25;i++)
	{
		x1=x0;
		y1=y0+3*i;

		for(int j=0;j<(dx/2);j++)
		{
			pDC->FillSolidRect(x1+2*j,y1,1,1,RGB(22,81,59));

			pDC->FillSolidRect(x1+2*j+1,y1+1,1,1,RGB(22,81,59));
		}

		x1=x0+2+dx;

		for(j=0;j<(dx/2);j++)
		{
			pDC->FillSolidRect(x1+2*j,y1,1,1,RGB(22,81,59));

			pDC->FillSolidRect(x1+2*j+1,y1+1,1,1,RGB(22,81,59));
		}
	}
	
	pDC->FillSolidRect(x0,y1+3,dx,1,RGB(2,252,4));
	pDC->FillSolidRect(x0+2+dx,y1+3,dx,1,RGB(2,252,4));

	return y1;
}

void CPMonitorDlg::DrawDiskValue(CDC *pDC, int x0, int y1, int dx, int dy,int percent)
{
	int x2,y2;

	for(int i=0;i<percent;i++)
	{
		x2=x0;
		y2=y1-3*i;

		pDC->FillSolidRect(x2,y2,dx,2,RGB(2,252,4));

		x2=x0+2+dx;

		pDC->FillSolidRect(x2,y2,dx,2,RGB(2,252,4));
	}
}

void CPMonitorDlg::DrawDiskText(CDC *pDC, int x0, int y1, int dx, int percent)
{
	CString str;
	str.Format("%d",percent);
	str+="%";

	CFont *ft=new CFont();
	ft->CreateFont(0,5,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"MyFont");
	pDC->SelectObject(ft);

	pDC->DrawText(str,new CRect(x0,y1+6,x0+2*dx+3,y1+24),DT_CENTER);
}

void CPMonitorDlg::ShowTag(int tid)
{
	int i=0;
	int length;
	CString str;

	CProcessInfo *p;

	switch(tag[tid])
	{
	case PROCESS_INFO:
		//显示部分
		m_list.ShowWindow(SW_SHOW);
		m_finish.ShowWindow(SW_SHOW);

		pInfo=&sys->getProcessInfo();

		p=pInfo;

		while(p!=NULL)
		{
			str=p->getProcessName();
			m_list.InsertItem(i,str);

			str.Format("%d",p->getPCpuSize());
			m_list.SetItemText(i,1,str);

			str.Format("%d",p->getPMemorySize());
			length=str.GetLength();
			if(length>3)
			{
				str=str.Left(length-3)+","+str.Right(3);
			}
			m_list.SetItemText(i,2,str+" K");

			p=p->next;
			i++;
		}
		//不能显示部分
		m_frame1.ShowWindow(SW_HIDE);
		m_frame2.ShowWindow(SW_HIDE);
		m_frame3.ShowWindow(SW_HIDE);
		m_frame4.ShowWindow(SW_HIDE);
		m_frame5.ShowWindow(SW_HIDE);
		m_frame6.ShowWindow(SW_HIDE);
		m_frame7.ShowWindow(SW_HIDE);
		m_frame8.ShowWindow(SW_HIDE);
		m_col1.ShowWindow(SW_HIDE);
		m_col2.ShowWindow(SW_HIDE);
		m_col3.ShowWindow(SW_HIDE);
		m_col4.ShowWindow(SW_HIDE);
		m_ploy1.ShowWindow(SW_HIDE);
		m_ploy2.ShowWindow(SW_HIDE);
		m_ploy3.ShowWindow(SW_HIDE);
		m_ploy4.ShowWindow(SW_HIDE);
		break;
	case HOST_PERFORMANCE:
		//不能显示部分
		m_list.ShowWindow(SW_HIDE);
		m_finish.ShowWindow(SW_HIDE);

		m_frame5.ShowWindow(SW_HIDE);
		m_frame6.ShowWindow(SW_HIDE);
		m_frame7.ShowWindow(SW_HIDE);
		m_frame8.ShowWindow(SW_HIDE);
		m_col3.ShowWindow(SW_HIDE);
		m_col4.ShowWindow(SW_HIDE);
		m_ploy3.ShowWindow(SW_HIDE);
		m_ploy4.ShowWindow(SW_HIDE);

		//显示部分
		m_frame1.ShowWindow(SW_SHOW);
		m_frame2.ShowWindow(SW_SHOW);
		m_col1.ShowWindow(SW_SHOW);
		m_ploy1.ShowWindow(SW_SHOW);

		if(cflag)
		{
			m_frame1.SetWindowText("CPU使用");
			m_frame2.SetWindowText("CPU使用记录");

			if(mflag)
			{
				m_frame3.ShowWindow(SW_SHOW);
				m_frame4.ShowWindow(SW_SHOW);
				m_col2.ShowWindow(SW_SHOW);
				m_ploy2.ShowWindow(SW_SHOW);

				m_frame3.SetWindowText("内存使用");
				m_frame4.SetWindowText("内存使用记录");
			}
		}
		else
		{
			m_frame1.SetWindowText("内存使用");
			m_frame2.SetWindowText("内存使用记录");
		}

		break;
	case NETWORK_FLOW:
		//不能显示部分
		m_list.ShowWindow(SW_HIDE);
		m_finish.ShowWindow(SW_HIDE);

		m_frame1.ShowWindow(SW_HIDE);
		m_frame2.ShowWindow(SW_HIDE);
		m_frame3.ShowWindow(SW_HIDE);
		m_frame4.ShowWindow(SW_HIDE);
		m_col1.ShowWindow(SW_HIDE);
		m_col2.ShowWindow(SW_HIDE);
		m_ploy1.ShowWindow(SW_HIDE);
		m_ploy2.ShowWindow(SW_HIDE);

		//显示部分
		m_frame5.ShowWindow(SW_SHOW);
		m_frame6.ShowWindow(SW_SHOW);
		m_col3.ShowWindow(SW_SHOW);
		m_ploy3.ShowWindow(SW_SHOW);

		if(niflag)
		{
			m_frame5.SetWindowText("网络流入量");
			m_frame6.SetWindowText("网络流入量记录");

			if(noflag)
			{
				m_frame7.ShowWindow(SW_SHOW);
				m_frame8.ShowWindow(SW_SHOW);
				m_col4.ShowWindow(SW_SHOW);
				m_ploy4.ShowWindow(SW_SHOW);

				m_frame7.SetWindowText("网络流出量");
				m_frame8.SetWindowText("网络流出量记录");
			}
		}
		else
		{
			m_frame5.SetWindowText("网络流出量");
			m_frame6.SetWindowText("网络流出量记录");
		}
	}

	//不能显示部分
		if(index>0)
		{
			disk1->ShowWindow(SW_HIDE);
			m_dused1.ShowWindow(SW_HIDE);
			dtitle1->ShowWindow(SW_HIDE);
			dvalue1->ShowWindow(SW_HIDE);
			ctitle1->ShowWindow(SW_HIDE);
			cvalue1->ShowWindow(SW_HIDE);
			cntitle1->ShowWindow(SW_HIDE);
			cnvalue1->ShowWindow(SW_HIDE);
			cutitle1->ShowWindow(SW_HIDE);
			cuvalue1->ShowWindow(SW_HIDE);
		}
		if(index>1)
		{
			disk2->ShowWindow(SW_HIDE);
			m_dused2.ShowWindow(SW_HIDE);
			dtitle2->ShowWindow(SW_HIDE);
			dvalue2->ShowWindow(SW_HIDE);
			ctitle2->ShowWindow(SW_HIDE);
			cvalue2->ShowWindow(SW_HIDE);
			cntitle2->ShowWindow(SW_HIDE);
			cnvalue2->ShowWindow(SW_HIDE);
			cutitle2->ShowWindow(SW_HIDE);
			cuvalue2->ShowWindow(SW_HIDE);
		}
		if(index>2)
		{
			disk3->ShowWindow(SW_HIDE);
			m_dused3.ShowWindow(SW_HIDE);
			dtitle3->ShowWindow(SW_HIDE);
			dvalue3->ShowWindow(SW_HIDE);
			ctitle3->ShowWindow(SW_HIDE);
			cvalue3->ShowWindow(SW_HIDE);
			cntitle3->ShowWindow(SW_HIDE);
			cnvalue3->ShowWindow(SW_HIDE);
			cutitle3->ShowWindow(SW_HIDE);
			cuvalue3->ShowWindow(SW_HIDE);
		}
		if(index>3)
		{
			disk4->ShowWindow(SW_HIDE);
			m_dused4.ShowWindow(SW_HIDE);
			dtitle4->ShowWindow(SW_HIDE);
			dvalue4->ShowWindow(SW_HIDE);
			ctitle4->ShowWindow(SW_HIDE);
			cvalue4->ShowWindow(SW_HIDE);
			cntitle4->ShowWindow(SW_HIDE);
			cnvalue4->ShowWindow(SW_HIDE);
			cutitle4->ShowWindow(SW_HIDE);
			cuvalue4->ShowWindow(SW_HIDE);
		}
		if(index>4)
		{
			disk5->ShowWindow(SW_HIDE);
			m_dused5.ShowWindow(SW_HIDE);
			dtitle5->ShowWindow(SW_HIDE);
			dvalue5->ShowWindow(SW_HIDE);
			ctitle5->ShowWindow(SW_HIDE);
			cvalue5->ShowWindow(SW_HIDE);
			cntitle5->ShowWindow(SW_HIDE);
			cnvalue5->ShowWindow(SW_HIDE);
			cutitle5->ShowWindow(SW_HIDE);
			cuvalue5->ShowWindow(SW_HIDE);
		}
		if(index>5)
		{
			disk6->ShowWindow(SW_HIDE);
			m_dused6.ShowWindow(SW_HIDE);
			dtitle6->ShowWindow(SW_HIDE);
			dvalue6->ShowWindow(SW_HIDE);

⌨️ 快捷键说明

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