ProgressCtrlEx.cpp
上传用户:maicowu
上传日期:2007-01-02
资源大小:87k
文件大小:2k
源码类别:

TreeView控件

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 5/22/98 8:51:37 AM
  5.   Comments: ProgressCtrlEx.cpp : implementation file
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "ProgressCtrlEx.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CProgressCtrlEx
  16. // Function name : CProgressCtrlEx::CProgressCtrlEx
  17. // Description     : Constructor
  18. // Return type : 
  19. CProgressCtrlEx::CProgressCtrlEx()
  20. {
  21. }
  22. // Function name : CProgressCtrlEx::~CProgressCtrlEx
  23. // Description     : Destructor
  24. // Return type : 
  25. CProgressCtrlEx::~CProgressCtrlEx()
  26. {
  27. }
  28. BEGIN_MESSAGE_MAP(CProgressCtrlEx, CProgressCtrl)
  29. //{{AFX_MSG_MAP(CProgressCtrlEx)
  30. // NOTE - the ClassWizard will add and remove mapping macros here.
  31. //}}AFX_MSG_MAP
  32. END_MESSAGE_MAP()
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CProgressCtrlEx message handlers
  35. // Function name : CProgressCtrlEx::WindowProc
  36. // Description     : Corupt message PBM_SETPOS for put on center percent.
  37. // Return type : LRESULT 
  38. // Argument         : UINT message
  39. // Argument         : WPARAM wParam
  40. // Argument         : LPARAM lParam
  41. LRESULT CProgressCtrlEx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  42. {
  43. LRESULT result = CProgressCtrl::WindowProc(message, wParam, lParam);
  44. if (message == PBM_SETPOS)
  45. {
  46. int percent = (int)wParam;
  47. if (percent <= 100)
  48. {
  49. CString percentStr; percentStr.Format(_T("%i%%"),percent);
  50. CRect rect; GetClientRect(rect);
  51. CDC* pDC = GetDC();
  52. CFont* pOldFont = pDC->SelectObject(GetParent()->GetFont());
  53. CSize dSize = pDC->GetTextExtent(percentStr);
  54. CRect rectPercent = rect;
  55. rectPercent.left += (rect.Width() - dSize.cx)/2;
  56. rectPercent.right = rectPercent.left + dSize.cx + 4;
  57. rectPercent.left -= 2;
  58. rectPercent.right += 2;
  59. rectPercent.top += (rect.Height() - dSize.cy)/2;
  60. rectPercent.bottom = rectPercent.top + dSize.cy;
  61. CBrush brush(GetSysColor(COLOR_BTNFACE));
  62. CBrush* pOldBrush = pDC->SelectObject(&brush);
  63. pDC->Rectangle(rectPercent);
  64. pDC->SetBkMode(TRANSPARENT);
  65. pDC->DrawText(percentStr, rectPercent, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  66. pDC->SelectObject(pOldFont);
  67. pDC->SelectObject(pOldBrush);
  68. ReleaseDC(pDC);
  69. }
  70. }
  71. return result;
  72. }