MonitorSpeedWnd.cpp
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:4k
源码类别:

P2P编程

开发平台:

Visual C++

  1. // MonitorSpeedWnd.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "testbt.h"
  5. #include "MonitorSpeedWnd.h"
  6. #include "FileBase.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. #define DISPLAY_TIMEOUT_ID 2 
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CMonitorSpeedWnd
  15. CMonitorSpeedWnd::CMonitorSpeedWnd()
  16. {
  17. m_pCategoryDownload = 0;
  18. }
  19. CMonitorSpeedWnd::~CMonitorSpeedWnd()
  20. {
  21. }
  22. BEGIN_MESSAGE_MAP(CMonitorSpeedWnd, CWnd)
  23. //{{AFX_MSG_MAP(CMonitorSpeedWnd)
  24. ON_WM_PAINT()
  25. ON_WM_TIMER()
  26. ON_WM_CREATE()
  27. ON_WM_ERASEBKGND()
  28. //}}AFX_MSG_MAP
  29. END_MESSAGE_MAP()
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CMonitorSpeedWnd message handlers
  32. BOOL CMonitorSpeedWnd::CreateEx(CWnd *pParent, CRect rc, UINT uID, long lParam, CCategoryDownload* pCategoryDownload)
  33. {
  34. ASSERT(pCategoryDownload);
  35. m_pCategoryDownload = pCategoryDownload;
  36. CMonitorSpeedbase::CreateEx(pCategoryDownload, 10);
  37. return Create(0, 0, WS_CHILD|WS_BORDER|WS_VISIBLE, rc, pParent, uID);
  38. }
  39. int CMonitorSpeedWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  40. {
  41. if (CWnd::OnCreate(lpCreateStruct) == -1)
  42. return -1;
  43. BOOL bRet = SetTimer(DISPLAY_TIMEOUT_ID, 1000, 0);
  44. ASSERT(bRet);
  45. // m_bmpBk.LoadBitmap(IDB_BITMAP_MONITOR_SPEED_BK);
  46. return 0;
  47. }
  48. BOOL CMonitorSpeedWnd::OnEraseBkgnd(CDC* pDC) 
  49. {
  50. CRect rc;
  51.     pDC->GetClipBox(&rc);
  52. DrawFace(RGB(255, 255, 255), RGB(213, 232, 245), rc, rc, pDC);
  53. return TRUE;
  54. return CWnd::OnEraseBkgnd(pDC);
  55. }
  56. void CMonitorSpeedWnd::OnPaint() 
  57. {
  58. CPaintDC dc(this); // device context for painting
  59. CRect rc;
  60.     GetClientRect(rc);
  61. CMonitorSpeedbase::OnPaint(dc, rc, false);
  62. /*
  63. CRect rcText = rc;
  64. rcText.bottom = rcText .top + 10;
  65. CRect rcUp = rc;
  66. rcUp.top += 10;
  67. rcUp.right = rcUp.left + rcUp.Width()/2;
  68. int iVisibleCount = rcUp.Width()/m_lGridWidth;
  69. long lMax = 5;
  70. long lRet = GetMaxValue(m_lValueUp, iVisibleCount);
  71. if (lRet > lMax ) lMax = lRet;
  72. lRet = GetMaxValue(m_lValueDown, iVisibleCount);
  73. if (lRet > lMax ) lMax = lRet;
  74. lMax = (lMax/5 + 1) * 5;
  75. assert (lMax > 0);
  76. CString strText;
  77. // strText.Format("D:%s/s, U:%s/s", FormatSize(m_lDownRate).data(), FormatSize(m_lUpRate).data());
  78. strText.Format("%dK/S", lMax);
  79. CFont* pOldFont = dc.SelectObject(&m_font);
  80. dc.SetBkMode(TRANSPARENT);
  81. dc.DrawText(strText, rcText, DT_RIGHT|DT_VCENTER|DT_SINGLELINE);
  82. dc.SelectObject(pOldFont);
  83. DrawLine(m_lValueDown, dc, RGB(125, 172, 249), rcUp, lMax , iVisibleCount);
  84. rcUp.OffsetRect(rcUp.Width(), 0);
  85. DrawLine(m_lValueUp, dc, RGB(249, 152, 111), rcUp, lMax, iVisibleCount);
  86. //*/
  87. // Do not call CWnd::OnPaint() for painting messages
  88. }
  89. void CMonitorSpeedWnd::OnTimer(UINT nIDEvent) 
  90. {
  91. if (DISPLAY_TIMEOUT_ID != nIDEvent)
  92. return;
  93. CMonitorSpeedbase::OnTimer();
  94. Invalidate();
  95. // CWnd::OnTimer(nIDEvent);
  96. }
  97. void CMonitorSpeedWnd::DrawFace(COLORREF Top, COLORREF Bottom, CRect& rc, CRect CalRc, CDC* pDC)
  98. {
  99. if (!CalRc.Height())
  100. return;
  101. int R, G, B;
  102. R = (GetRValue(Top) - GetRValue(Bottom)) / CalRc.Height();
  103. G = (GetGValue(Top) - GetGValue(Bottom)) / CalRc.Height();
  104. B = (GetBValue(Top) - GetBValue(Bottom)) / CalRc.Height();
  105. int ColR = GetRValue(Top), ColG = GetGValue(Top), ColB = GetBValue(Top);
  106. COLORREF ColMax = Top > Bottom ? Top : Bottom;
  107. COLORREF ColMin = Top > Bottom ? Bottom: Top;
  108. for(int i=0; i<rc.Height(); i++)
  109. {
  110. ColR -= R;
  111. ColG -= G;
  112. ColB -= B;
  113. CPen Pen;
  114. Pen.CreatePen(PS_SOLID, 1, RGB(ColR, ColG, ColB));
  115. CPen* pOldPen = pDC->SelectObject(&Pen);
  116. // pDC->SelectObject(&Pen);
  117. pDC->MoveTo(rc.left, rc.top+i);
  118. pDC->LineTo(rc.right, rc.top+i);
  119. pDC->SelectObject(pOldPen);
  120. Pen.DeleteObject();
  121. }
  122. }