DynamicClock.cpp
上传用户:fltzhang
上传日期:2021-02-05
资源大小:1886k
文件大小:3k
源码类别:

Static控件

开发平台:

Visual C++

  1. // DynamicClock.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Clock.h"
  5. #include "DynamicClock.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CDynamicClock
  13. CDynamicClock::CDynamicClock()
  14. {
  15. m_colText = RGB(0, 0, 0);
  16. m_strTimeFormat = "%Y-%m-%d %H:%M:%S";
  17. m_Font.FromHandle((HFONT)GetStockObject(SYSTEM_FONT));
  18. }
  19. CDynamicClock::~CDynamicClock()
  20. {
  21. }
  22. BEGIN_MESSAGE_MAP(CDynamicClock, CStatic)
  23. //{{AFX_MSG_MAP(CDynamicClock)
  24. ON_WM_TIMER()
  25. ON_WM_CTLCOLOR_REFLECT()
  26. //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CDynamicClock message handlers
  30. void CDynamicClock::PreSubclassWindow() 
  31. {
  32. // TODO: Add your specialized code here and/or call the base class
  33. GetCurrentTime();
  34. SetTimer(1, 1000, NULL);
  35. AdaptFontRect();
  36. //  CDC *pDC = GetDC();
  37. //  CFont *pOldfont = pDC->SelectObject(&m_Font);
  38. //  CString str;
  39. //  GetWindowText(str);     
  40. //  CSize size = pDC->GetTextExtent(str, str.GetLength()+1);
  41. //  SetWindowPos(NULL, 0, 0, size.cx, size.cy, SWP_NOMOVE);
  42. //  pDC->SelectObject(pOldfont);
  43. //  ReleaseDC(pDC);
  44. CStatic::PreSubclassWindow();
  45. }
  46. void CDynamicClock::GetCurrentTime()
  47. {
  48. CTime tNow = CTime::GetCurrentTime();
  49. SetWindowText(tNow.Format(m_strTimeFormat));
  50. this->UpdateTime();
  51. }
  52. void CDynamicClock::OnTimer(UINT nIDEvent) 
  53. {
  54. // TODO: Add your message handler code here and/or call default
  55. GetCurrentTime();
  56. CStatic::OnTimer(nIDEvent);
  57. }
  58. void CDynamicClock::SetFont(CFont *font)
  59. {
  60. m_Font.Detach();
  61. if (!((HFONT)m_Font))
  62. {
  63. LOGFONT lf;
  64. font->GetObject(sizeof(LOGFONT), &lf);
  65. m_Font.CreateFontIndirect(&lf);
  66. }
  67. AdaptFontRect();
  68. //  CDC *pDC = GetDC();
  69. //  CFont *pOldfont = pDC->SelectObject(font);
  70. //  CString str;
  71. //  GetWindowText(str);     
  72. //  CSize size = pDC->GetTextExtent(str, str.GetLength()+1);
  73. //  SetWindowPos(NULL, 0, 0, size.cx, size.cy, SWP_NOMOVE);
  74. //  pDC->SelectObject(pOldfont);
  75. //  ReleaseDC(pDC);
  76. CStatic::SetFont(font);
  77. }
  78. LOGFONT CDynamicClock::GetLogFont()
  79. {
  80. LOGFONT lf;
  81. m_Font.GetLogFont(&lf);
  82. return lf;
  83. }
  84. HBRUSH CDynamicClock::CtlColor(CDC* pDC, UINT nCtlColor) 
  85. {
  86. // TODO: Change any attributes of the DC here
  87. pDC->SelectObject(&m_Font);
  88. pDC->SetTextColor(m_colText);
  89. pDC->SetBkMode(TRANSPARENT);
  90. HBRUSH hbr = (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
  91. // TODO: Return a non-NULL brush if the parent's handler should not be called
  92. return hbr;
  93. }
  94. void CDynamicClock::SetTextColor(COLORREF textColor)
  95. {
  96. m_colText = textColor;
  97. }
  98. COLORREF CDynamicClock::GetTextColor()
  99. {
  100. return m_colText;
  101. }
  102. void CDynamicClock::SetTimeFromat(CString timeFromat)
  103. {
  104. m_strTimeFormat = timeFromat;
  105. }
  106. void CDynamicClock::UpdateTime()
  107. {
  108. CRect rc;
  109. GetWindowRect(rc);
  110. GetParent()->ScreenToClient(rc);
  111. GetParent()->InvalidateRect(rc);
  112. }
  113. void CDynamicClock::AdaptFontRect()
  114. {
  115. CDC *pDC = GetDC();
  116. CFont *pOldfont = pDC->SelectObject(&m_Font);
  117. CString str;
  118. GetWindowText(str);     
  119. CSize size = pDC->GetTextExtent(str, str.GetLength()+1);
  120. SetWindowPos(NULL, 0, 0, size.cx, size.cy, SWP_NOMOVE);
  121. pDC->SelectObject(pOldfont);
  122. ReleaseDC(pDC);
  123. }