#include "stdafx.h"
#include "MFTrafficButton.h"
#include "MemDC.h"
#include <math.h>
#ifndef _WIN32_IE
#define _WIN32_IE 0x0500
#endif
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// MFTrafficButton
MFTrafficButton::MFTrafficButton()
{
brushInitalized = FALSE;
interfaceCallBack = NULL;
useAdaptiveScale = FALSE;
gridxstartpos = 0;
gridystartpos = 0;
gridxresolution = GRIDXRESOLUTION;
gridyresolution = GRIDYRESOLUTION;
gridscrollxspeed = GRIDSCROLLXSPEED;
gridscrollyspeed = GRIDSCROLLYSPEED;
plotgranularity = PLOTGRANULATRITY;
netupdatespeed = NETUPDATESPEED;
gridupdatespeed = GRIDUPDATESPEED;
ToggleStatusText = "局部最大值";
}
MFTrafficButton::~MFTrafficButton()
{
}
BEGIN_MESSAGE_MAP(MFTrafficButton, CButton)
//{{AFX_MSG_MAP(MFTrafficButton)
ON_WM_TIMER()
ON_WM_RBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// MFTrafficButton message handlers
void MFTrafficButton::PreSubclassWindow()
{
CButton::PreSubclassWindow();
// 这个函数确保这个button是用来绘制的而不是接收按下的消息的
ModifyStyle( 0 , BS_OWNERDRAW );
this->GetWindowRect(&TrafficDrawRectangle);
this->GetWindowRect(&TrafficDrawUpdateRectangle);
ScreenToClient(&TrafficDrawUpdateRectangle);
ScreenToClient(&TrafficDrawRectangle);
TGSize.cx = TrafficDrawRectangle.right - TrafficDrawRectangle.left;
TGSize.cy = TrafficDrawRectangle.bottom - TrafficDrawRectangle.top;
initalized = FALSE;
MaxTrafficAmount = 0.0;
SelectedInterface = 0;
smallFont.CreateFont(-10,0,0,0,FW_THIN, FALSE, FALSE, FALSE, DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH, "Times New Roman");
red = RGB(255,125,125);
green = RGB(125,255,125);
cyan = RGB(0,255,255);
darkblue= RGB(0,0,75);
// darkblue= RGB(255,255,255);
darkgray= RGB(50,50,50);
white = RGB(255,255,255);
black = RGB(0,0,0);
lightgreen = RGB(156,255,156);
darkgreen = RGB(32,64,32);
// darkgreen =0;
greenbrush.CreateSolidBrush(green);
redbrush.CreateSolidBrush(red);
GridPen.CreatePen(PS_SOLID ,1 , darkgreen);
GetWindowRect(&TrafficDrawRectangle);
ScreenToClient(&TrafficDrawRectangle);
TGSize.cx = TrafficDrawRectangle.right - TrafficDrawRectangle.left;
TGSize.cy = TrafficDrawRectangle.bottom - TrafficDrawRectangle.top;
TrafficEntries = TGSize.cx / plotgranularity;
TrafficStats = new TRAFFICENTRY[TrafficEntries+1];
for(DWORD x=0; x<TrafficEntries; x++)
{
TrafficStats[x].connected = TRUE;//FALSE;
TrafficStats[x].value = 0.0;//(float)x * (float)TrafficEntries*0.05;//;10.0 + 10.0*(sin(5.0*(float)x*3.14/180.0));
}
MaxTrafficAmount = 0.0;
SelectedInterface = 0;
CRgn rectRgn, ellRgn, finalRgn;
rectRgn.CreateRectRgn(0,0,TGSize.cx, TGSize.cy);
ShapeWNDRegion.CreateRectRgn(0,0,TGSize.cx, TGSize.cy);;
ShapeDCRegion.CreateRectRgn(0,0,TGSize.cx, TGSize.cy);;
int x1,x2,y1,y2,xe,ye,xs,ys;
int xof, yof;
int r;
xs = TGSize.cx;
ys = TGSize.cy;
x1 = 0;
y1 = 0;
x2 = xs;
y2 = ys;
xe = 5;//Radius of edge
ye = 5;//Radius of edge
xof = (int)( (float)xs*0.0);
yof = (int)( (float)ys*0.0);
r = ellRgn.CreateRoundRectRgn(x1,y1,x2,y2,xe,ye);
r = ellRgn.OffsetRgn(-xof, -yof);
r = ShapeWNDRegion.CombineRgn(&rectRgn, &ellRgn,RGN_AND );
r = ShapeDCRegion.CombineRgn(&rectRgn, &ellRgn,RGN_AND );
this->SetWindowRgn((HRGN)ShapeWNDRegion, TRUE);
initalized = TRUE;
SetTimer(GRIDTIMER, gridupdatespeed, 0);
SetTimer(NETTIMER, netupdatespeed, 0);
}
void MFTrafficButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
// CButton::OnDrawItem(nIDCtl, lpDrawItemStruct);
ASSERT( lpDrawItemStruct != NULL );
CDC * pDC = CDC::FromHandle( lpDrawItemStruct -> hDC );
int erg = pDC->SelectClipRgn(&ShapeDCRegion);
CRect rect = lpDrawItemStruct -> rcItem;
UINT state = lpDrawItemStruct -> itemState;
UINT nStyle = GetStyle( );
int nSavedDC = pDC -> SaveDC( );
// Create the brush for the color bar
if(brushInitalized == FALSE)
{
CBitmap bmp;
CMemDC *memDC = new CMemDC(pDC);
RECT clipRect;
memDC->GetClipBox(&clipRect);
if(clipRect.right - clipRect.left > 1)
{
bmp.CreateCompatibleBitmap(memDC,plotgranularity, TGSize.cy);
CBitmap *pOld = memDC->SelectObject(&bmp);
CSize bmps = bmp.GetBitmapDimension();
double factor = 255.0 / (float)TGSize.cy;
BYTE r,g,b;
for(int x = 0; x<TGSize.cy; x++)
{
g = (BYTE)(255-factor*x);
r = (BYTE)(factor*x);
b = (BYTE)64;
memDC->SetPixelV(0,x,RGB(r,g,b));
memDC->SetPixelV(1,x,RGB(r,g,b));
}
memDC->SelectObject(pOld);
colorbrush.CreatePatternBrush(&bmp);
brushInitalized = TRUE;
}
}
if(initalized == TRUE)
{
COLORREF backcolor = GetSysColor(COLOR_BTNFACE);
CBrush brush;
CMemDC *memDC = new CMemDC(pDC);
RECT clipRect;
memDC->GetClipBox(&clipRect);
memDC->FillSolidRect(&clipRect,backcolor);
CFont *oldFont;
int xp, yp, xx, yy;
orgBrushOrigin = memDC->GetBrushOrg();
oldFont = memDC->SelectObject(&smallFont);
double scale = (double)TGSize.cy / (double)MaxTrafficAmount;
yp = TrafficDrawRectangle.bottom;
xp = TrafficDrawRectangle.left;
RECT fillrect;
CString tmp;
// 填充背景
back = memDC->GetBkColor();
brush.CreateSolidBrush(darkblue);
memDC->FillRect(&TrafficDrawRectangle, &brush);
// 画网格
int xgridlines, ygridlines;
xgridlines = TGSize.cx / gridxresolution;
ygridlines = TGSize.cy / gridyresolution;
CPen* oldPen = memDC->SelectObject(&GridPen);
// 创建垂直线
for (int x=0; x<= xgridlines; x++)
{
memDC->MoveTo(x*gridxresolution + gridxstartpos, 0 );
memDC->LineTo(x*gridxresolution + gridxstartpos, TGSize.cy );
}
// 添加水平线
for (int y=0; y<= ygridlines; y++)
{
memDC->MoveTo(0 , gridystartpos + TGSize.cy - y*gridyresolution - 2);
memDC->LineTo(TGSize.cx , gridystartpos + TGSize.cy - y*gridyresolution - 2);
}
gridxstartpos += gridscrollxspeed;
gridystartpos += gridscrollyspeed;
if(gridxstartpos < 0 ) gridxstartpos = gridxresolution;
if(gridxstartpos > gridxresolution ) gridxstartpos = 0;
if(gridystartpos < 0 ) gridystartpos = gridyresolution;
if(gridystartpos > gridyresolution ) gridystartpos = 0;
memDC->SelectObject(oldPen );
for(DWORD cnt=0; cnt<TrafficEntries; cnt++)
{
xx = xp + cnt*plotgranularity;
double traffic = (double)TrafficStats[cnt].value;
yy = yp - (int)((double)TrafficStats[cnt].value * scale);
// 网络处在连接状态才绘制
if(TrafficStats[cnt].connected == TRUE)
{
fillrect.bottom = yp;
fillrect.top = yy;
fillrect.left = xx;
fillrect.right = xx+plotgranularity;
memDC->SetBrushOrg(xx,yp);
if(TrafficStats[cnt].value > 0.0)
{
memDC->FillRect(&fillrect, &colorbrush);
memDC->SetPixelV(xx, yy, cyan);
}
}
}
tmp.Format("%8.1f",TrafficStats[TrafficEntries-1].value);
COLORREF textcolor = memDC->GetTextColor();
int bkmode = memDC->GetBkMode();
memDC->SetBkMode(TRANSPARENT);
memDC->SetTextColor(darkblue);
memDC->TextOut(6,5,AllTraffic);
memDC->SetTextColor(cyan);
// memDC->SetTextColor(darkblue);
memDC->TextOut(5,5,AllTraffic);
memDC->SetTextColor(textcolor);
memDC->SetBkMode(bkmode);
memDC->SelectObject(oldFont);
memDC->SetBrushOrg(orgBrushOrigin.x, orgBrushOrigin.y);
delete memDC;
}
pDC -> RestoreDC( nSavedDC );
}
void MFTrafficButton::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent ==
没有合适的资源?快使用搜索试试~ 我知道了~
VC++服务器监控程序
共41个文件
h:8个
cpp:5个
obj:5个
4星 · 超过85%的资源 需积分: 9 92 下载量 133 浏览量
2010-05-10
13:40:00
上传
评论 1
收藏 3.53MB RAR 举报
温馨提示
本程序源码功能是实现对服务器各项指标的监控,包括:网络流量,CPU使用率,内存空闲率,服务器攻击,日志处理,短信报警,监控数据显示,等等。
资源推荐
资源详情
资源评论
收起资源包目录
VC服务器监控程序.rar (41个子文件)
网络流量监控系统
NetTraffic
NetTrafficButton.rc 6KB
Globals.h 615B
NetTrafficButtonDlg.cpp 5KB
StdAfx.cpp 29B
mftrafficbutton.cpp 14KB
resource.h 832B
NetTrafficButton.opt 56KB
NetTrafficButton.ncb 177KB
MFNetTraffic.h 1KB
NetTrafficButton.cpp 943B
MemDC.h 2KB
NetTrafficButtonDlg.h 1KB
NetTrafficButton.aps 21KB
Debug
mftrafficbutton.sbr 0B
vc60.pdb 364KB
MFNetTraffic.sbr 0B
NetTrafficButton.sbr 0B
NetTrafficButton.res 3KB
vc60.idb 217KB
NetTrafficButton.bsc 3.05MB
NetTrafficButton.pdb 361KB
mftrafficbutton.obj 54KB
NetTrafficButton.obj 15KB
NetTrafficButtonDlg.sbr 0B
MFNetTraffic.obj 44KB
StdAfx.obj 104KB
NetTrafficButtonDlg.obj 30KB
NetTrafficButton.ilk 347KB
NetTrafficButton.exe 140KB
StdAfx.sbr 1.31MB
NetTrafficButton.pch 6.55MB
StdAfx.h 505B
MFNetTraffic.cpp 9KB
NetTrafficButton.dsw 585B
NetTrafficButton.plg 3KB
NetTrafficButton.dsp 5KB
mftrafficbutton.h 3KB
res
NetTrafficButton.rc2 432B
NetTrafficButton.ico 1KB
MainFrame.ico 1KB
NetTrafficButton.h 831B
共 41 条
- 1
helihuang
- 粉丝: 2
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页