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

📄 miniframe.cpp

📁 一个操作系统资源监测器的需求、设计与实现
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			start=fstr.Find(" ",pos);
			str=fstr.Mid(pos,start-pos);
			color[2][3]=atoi(str);

			start++;
			pos=fstr.Find(" ",start);
			str=fstr.Mid(start,pos-start);
			level[2][3]=atoi(str);
		}

		start=fstr.Find("Level3",pos);
		start+=7;
		pos=fstr.Find(" ",start);
		str=fstr.Mid(start,pos-start);
		if(str=="Sel")
		{
			pos++;
			start=fstr.Find(" ",pos);
			str=fstr.Mid(pos,start-pos);
			color[2][2]=atoi(str);

			start++;
			pos=fstr.Find(" ",start);
			str=fstr.Mid(start,pos-start);
			level[2][2]=atoi(str);
		}

		start=fstr.Find("Level4",pos);
		start+=7;
		pos=fstr.Find(" ",start);
		str=fstr.Mid(start,pos-start);
		if(str=="Sel")
		{
			pos++;
			start=fstr.Find(" ",pos);
			str=fstr.Mid(pos,start-pos);
			color[2][1]=atoi(str);

			start++;
			pos=fstr.Find(" ",start);
			str=fstr.Mid(start,pos-start);
			level[2][1]=atoi(str);
		}

		start=fstr.Find("Level5",pos);
		start+=7;
		pos=fstr.Find(" ",start);
		str=fstr.Mid(start,pos-start);
		color[2][0]=atoi(str);

		pos++;
		start=fstr.Find("<",start);
		str=fstr.Mid(pos,start-pos);
		level[2][0]=atoi(str);
	}

	//网络流出量
	fstr=param->getCStringValue("FRAME4");
	if(fstr=="")
	{
		level[3][0]=10;
		level[3][1]=50;
		level[3][2]=80;
		level[3][3]=90;
		level[3][4]=100;

		color[3][0]=255;
		color[3][1]=16744703;
		color[3][2]=16744576;
		color[3][3]=65280;
		color[3][4]=12632256;
	}
	else
	{
		start=fstr.Find("Level1",0);
		start+=7;
		pos=fstr.Find(" ",start);
		str=fstr.Mid(start,pos-start);
		if(str=="Sel")
		{
			pos++;
			start=fstr.Find(" ",pos);
			str=fstr.Mid(pos,start-pos);
			color[3][4]=atoi(str);

			level[3][4]=100;
		}

		start=fstr.Find("Level2",pos);
		start+=7;
		pos=fstr.Find(" ",start);
		str=fstr.Mid(start,pos-start);
		if(str=="Sel")
		{
			pos++;
			start=fstr.Find(" ",pos);
			str=fstr.Mid(pos,start-pos);
			color[3][3]=atoi(str);

			start++;
			pos=fstr.Find(" ",start);
			str=fstr.Mid(start,pos-start);
			level[3][3]=atoi(str);
		}

		start=fstr.Find("Level3",pos);
		start+=7;
		pos=fstr.Find(" ",start);
		str=fstr.Mid(start,pos-start);
		if(str=="Sel")
		{
			pos++;
			start=fstr.Find(" ",pos);
			str=fstr.Mid(pos,start-pos);
			color[3][2]=atoi(str);

			start++;
			pos=fstr.Find(" ",start);
			str=fstr.Mid(start,pos-start);
			level[3][2]=atoi(str);
		}

		start=fstr.Find("Level4",pos);
		start+=7;
		pos=fstr.Find(" ",start);
		str=fstr.Mid(start,pos-start);
		if(str=="Sel")
		{
			pos++;
			start=fstr.Find(" ",pos);
			str=fstr.Mid(pos,start-pos);
			color[3][1]=atoi(str);

			start++;
			pos=fstr.Find(" ",start);
			str=fstr.Mid(start,pos-start);
			level[3][1]=atoi(str);
		}

		start=fstr.Find("Level5",pos);
		start+=7;
		pos=fstr.Find(" ",start);
		str=fstr.Mid(start,pos-start);
		color[3][0]=atoi(str);

		pos++;
		start=fstr.Find("<",start);
		str=fstr.Mid(pos,start-pos);
		level[3][0]=atoi(str);
	}
}

void CMINIFRAME::DrawDynInfo(int obj, int nID)
{
	int value=0,index=0;
	int * values;
	int xpos=0,ypos=0;
	int W=0,H=0;
	int width=20,heigth=20;
	COLORREF curColor=0;

	switch(obj)
	{
	case CPU_USAGE:
		value=sys->getCpuUsedRadio();
		cpu_inf.Format("%d",value);
		cpu_inf="CPU:\r\n"+cpu_inf+"%";

		index=this->CheckLevel(value,0);
		if(index==-1)
		{
			curColor=RGB(2,252,4);
		}
		else
		{
			curColor=this->color[0][index];
		}

		break;
	case MEMORY_USAGE:
		values=sys->getMemoryUsedInfo();
		memory_inf.Format("%d",values[0]);
		memory_inf="内存:\r\n"+memory_inf;

		index=this->CheckLevel(values[1],1);
		if(index==-1)
		{
			curColor=RGB(2,252,4);
		}
		else
		{
			curColor=this->color[1][index];
		}

		value=values[1];

		break;
	case NETWORK_INPUT_USAGE:
		value=sys->getNetWorkInput();
		input_inf.Format("%dK",value);
		input_inf="网络流入量:\r\n"+input_inf;

		value=(int)(((float)value/1024/100)*100);

		index=this->CheckLevel(value,2);
		if(index==-1)
		{
			curColor=RGB(2,252,4);
		}
		else
		{
			curColor=this->color[2][index];
		}

		break;
	case NETWORK_OUTPUT_USAGE:
		value=sys->getNetWorkOutput();
		output_inf.Format("%dK",value);
		output_inf="网络流出量:\r\n"+output_inf;

		value=(int)(((float)value/1024/100)*100);

		index=this->CheckLevel(value,3);
		if(index==-1)
		{
			curColor=RGB(2,252,4);
		}
		else
		{
			curColor=this->color[3][index];
		}
	}

	CWnd *pWnd=this->GetDlgItem(IDC_PLATFORM);

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

	W=rc.Width()/count;
	H=rc.Height();

	width=W-4;
	heigth=H-5;

	xpos=W*nID+2;
	ypos=2;

	CDC *pDC=pWnd->GetWindowDC();
	//pDC->FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(106,150,244));

	this->DrawBackGround(pDC,xpos,ypos,width,heigth);

	this->DrawCurrent(pDC,xpos,ypos,width,heigth,value,curColor);
}

void CMINIFRAME::DrawBackGround(CDC *pDC, int x0, int y0, int dx, int dy)
{
	pDC->FillSolidRect(x0,y0,dx,dy,RGB(0,0,0));

	for(int i=1;i<dx;i=i+2)
	{
		for(int j=0;j<dy;j=j+2)
		{
			pDC->FillSolidRect(x0+i,y0+j,1,1,RGB(22,81,59));
		}

		pDC->FillSolidRect(x0+i+1,y0,1,dy,RGB(22,81,59));
	}
}

int CMINIFRAME::CheckLevel(int usage, int nID)
{
	for(int i=0;i<5;i++)
	{
		if(usage<=level[nID][i])
		{
			return i;
		}
	}

	return -1;
}

void CMINIFRAME::DrawCurrent(CDC *pDC, int x0, int y0, int dx, int dy, int percent, COLORREF curColor)
{
	if(percent>100)
	{
		percent=100;
	}

	int pos=(int)(((float)dy/100)*percent);

	pDC->FillSolidRect(x0,y0+dy-pos,dx,pos,curColor);
}

//DEL void CMINIFRAME::OnLButtonDown(UINT nFlags, CPoint point) 
//DEL {
//DEL 	// TODO: Add your message handler code here and/or call default
//DEL 	
//DEL 	CDialog::OnLButtonDown(nFlags, point);
//DEL 
//DEL 	//GetParentFrame()->PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
//DEL }

//////////////////
// Non-client hit-test handler to move window by its client area.
// If the user clicks anywhere on the client area, pretend it's the
// caption. Windows does the rest!
//
//DEL UINT CMINIFRAME::OnNcHitTest(CPoint pt)
//DEL {
//DEL 	CRect rc;
//DEL 	GetClientRect(&rc);
//DEL 	ClientToScreen(&rc);
//DEL 	return rc.PtInRect(pt) ? HTCAPTION : CDialog::OnNcHitTest(pt);
//DEL }

void CMINIFRAME::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	/*for(int i=0;i<count;i++)
	{
		this->KillTimer(i);
	}*/
	
	CDialog::OnClose();
}

void CMINIFRAME::OnCtrl() 
{
	// TODO: Add your control notification handler code here
	for(int i=0;i<count;i++)
	{
		this->KillTimer(i);
	}

	CDialog::EndDialog(0);

	this->parent->ShowWindow(SW_SHOW);

	
}

void CMINIFRAME::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	//CString str;

	CWnd *pWnd=this->GetDlgItem(IDC_PLATFORM);

	CRect rc,*nowrc;
	pWnd->GetWindowRect(&rc);

	CDC *pDC=pWnd->GetWindowDC();
	pDC->SetTextAlign(TA_CENTER);
	pDC->SetBkColor(RGB(255,255,255));
	pDC->SetTextColor(RGB(0,0,0));

	switch(this->CheckPoint(point,rc))
	{
	case 1:
		//pDC->TextOut(cx,cy,cpu_inf);
		nowrc=new CRect(cx,cy,cx+dh,rc.Height()-3);
		pDC->DrawText(cpu_inf,nowrc,DT_WORDBREAK+DT_CENTER);
		break;
	case 2:
		pDC->TextOut(cx,cy,memory_inf);
		break;
	case 3:
		pDC->TextOut(cx,cy,input_inf);
		break;
	case 4:
		pDC->TextOut(cx,cy,output_inf);
	}
	
	CDialog::OnMouseMove(nFlags, point);
}

int CMINIFRAME::CheckPoint(CPoint p,CRect rc)
{
	int width=rc.Width();
	int heigth=rc.Height();

	int dw=width/count;

	for(int i=0;i<count;i++)
	{
		if(p.x>=(dw*i+2)&&p.x<=(dw*(i+1)-2)&&p.y>=2&&p.y<=heigth-3)
		{
			cx=dw*i+2;
			cy=2;

			dh=dw-4;

			return i+1;
		}
	}

	return 0;
}

⌨️ 快捷键说明

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