MFC 네트워크 속도 및 데이터 모니터링 프로그램의 실현(완료)

4005 단어
제때에 네트워크 속도와 데이터 정보를 얻으려면 결국은 네트워크 카드를 통과한 데이터 양에 대한 처리이다.인터넷 카드를 통과한 데이터는 방향에 따라 두 종류로 나눌 수 있는데 하나는 들어온 것이고 다른 하나는 나간 것이다. 정확히 말하면 업로드와 다운로드이다.
네트워크 속도는 단위 시간 내의 데이터 양인데, 본질은 사실 데이터이다.
위에서 언급한 그 종류의 MFNetTraffic는 기능이 매우 완전하여 데이터 정보를 얻지 못하고 인터넷 속도로 전환되어 프로그램에서 호출하기만 하면 된다.또한 그 클래스는 자신이 쓴 것이 아니기 때문에 아무런 수정도 하지 않았기 때문에 그 중의 일부 함수는 이 프로그램에서 호출되지 않았을 수도 있다.
이렇게 많은 말을 했지만 사실 네트워크 속도와 데이터를 감시하는 가장 관건적인 문제는 이미 해결되었다. 바로 현재의 네트워크 속도, 즉 데이터 정보를 어떻게 얻는가이다. 이어진 목표는 그것들을 합리적으로 보여주는 것일 뿐이다.
현재 유행하는 방법은 작은 직사각형 부상 창을 만들고 네트워크 속도, 즉 유량 정보를 동적으로 표시하는 것이다. 360과 금산과 같은 것이다.이런 방법도 확실히 고전적이기 때문에 본 프로그램도 이런 디스플레이 방식을 채택한다.
작은 창은 제목 표시줄이 없는 대화상자입니다. 대화상자 속성에서 제목 표시줄을 선택 취소하면 됩니다.또한 정보를 표시하는 데는 Text 컨트롤이 사용됩니다.
구체적인 절차는 시작 프로그램 -> 팝업 창 -> 정보 얻기 -> 정보 표시입니다.
정보를 동적으로 표시하려면 타이머 함수를 설정하여 일정 시간마다 정보를 가져와 작은 창에 표시합니다.
추가 사항:
1. 작은 창은 항상 지붕을 놓는다. 여기에는 지붕을 없애는 기능이 추가되지 않는다. 첫째, 작은 창이 작기 때문이다. 둘째, 투명도를 조정하는 기능이 추가되었다. 만약에 작은 창이 보고 싶지 않으면 투명도를 최소값으로 설정하면 된다.
2. 투명도 설정 함수:
매개 변수는 0-255, 즉 투명도 범위, 0은 완전 투명, 255는 불투명이다.(실재vc6.0상 복잡하기 때문에 높은 버전에서SetLayered Window Attributes 함수를 직접 호출하면 됩니다.)
/************************************************************************/
/*                                                                */
/************************************************************************/
BOOL CTraffic_MonitoringDlg::SetWindowTransparency(int Byte)
{
	//       
	COLORREF maskColor = GetSysColor(COLOR_3DFACE); //       
	SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)|0x00080000);  
	HINSTANCE hInst = LoadLibrary(_T("User32.dll"));    
	if (hInst)      
	{         
		typedef BOOL (WINAPI *MyFun)(HWND,COLORREF,BYTE,DWORD);  	        
		MyFun myfun = NULL;  	      
		myfun = (MyFun)GetProcAddress(hInst, "SetLayeredWindowAttributes");  	       
		if (myfun) 
		{
			myfun(GetSafeHwnd(),maskColor,Byte,2);  	// 100    (  0-255)
		}
		else
		{
			FreeLibrary(hInst);  
			return FALSE;
		}
		FreeLibrary(hInst);  
    }  

	return TRUE;
}

3. 작은 창 작업 표시줄 아이콘 해제(창 초기화 함수에서 호출):
//        
    ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW,0);

4. 표시할 정보가 비교적 많기 때문에 모두 6가지가 있는데 그것이 바로 다운로드 속도, 업로드 속도, 다운로드 데이터, 업로드 데이터, 총 데이터, 총 데이터이다.
그래서 동시에 너무 공간을 차지하기 때문에 기본적으로 두 가지, 즉 업로드와 다운로드의 인터넷 속도만 표시하기로 했다.다른 정보는 숨겨져 있습니다. 사용자가 보기 위해 작은 창을 왼쪽 단추로 두 번 클릭하면 확장 창이 뜨고 나머지 네 가지 정보를 표시합니다.
창 확장 및 축소 기능 구현 함수:
/************************************************************************/
/*   、                                                          */
/************************************************************************/
void CTraffic_MonitoringDlg::ExtendDlg(int nResourceID, BOOL bExpand)
{
	// nResourceID      ID(   picture  )
	//   bExpand==TRUE,         ;
	//        ,           nResourceID    
	static CRect rcLarge;
	static CRect rcSmall;
	
	//     ,             
	if(rcLarge.IsRectNull())
	{
		CRect rcLandmark;
		//         
		CWnd* pWndLandmark=GetDlgItem(nResourceID);
		ASSERT(pWndLandmark);
		
		//         
		GetWindowRect(rcLarge);
		//              
		pWndLandmark->GetWindowRect(rcLandmark);
		
		rcSmall=rcLarge;
		rcSmall.bottom=rcLandmark.top;
	}
	
	if(bExpand)
	{
		//      :           (  )  (rcLarge)
		SetWindowPos(NULL,0,0,rcLarge.Width(),rcLarge.Height(),
			SWP_NOMOVE|SWP_NOZORDER);
	}
	else
	{
		//      :             (rcSmall)
		SetWindowPos(NULL,0,0,rcSmall.Width(),rcSmall.Height(),
			SWP_NOMOVE|SWP_NOZORDER);
	}
}

5. 조작이 편리하도록 프로그램에 트레이를 추가하고 오른쪽 키로 한 창의 팝업에 응답한다. 이 창은 네트, 투명도 등 정보를 설정하는 데 사용된다.
트레이 구현 방법:http://blog.csdn.net/wwkaven/article/details/30487699
6. 프로그램이 가능한 한 간단하도록 트레이 아이콘을 삭제하는 기능을 추가하여 프로그램을 종료하려면 작은 창을 우클릭하면 됩니다.
7. 마지막으로 자원 관리자가 다시 시작하면 트레이 아이콘이 없어지는 문제:
http://blog.csdn.net/wwkaven/article/details/32108845
프로그램:http://download.csdn.net/detail/wwkaven/7515523
전체 소스 코드:http://download.csdn.net/detail/wwkaven/7515507

좋은 웹페이지 즐겨찾기