XTPCalendarTip.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarTip.cpp
  2. //
  3. // This file is a part of the XTREME CALENDAR MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "Common/XTPDrawHelpers.h"
  22. #include "Common/XTPSystemHelpers.h"
  23. #include "XTPCalendarControl.h"
  24. #include "XTPCalendarTheme.h"
  25. #include "XTPCalendarThemeOffice2007.h"
  26. #include "XTPCalendarTip.h"
  27. #ifdef _DEBUG
  28. #define new DEBUG_NEW
  29. #undef THIS_FILE
  30. static char THIS_FILE[] = __FILE__;
  31. #endif
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CXTPCalendarTip
  34. CXTPCalendarTip::CXTPCalendarTip()
  35. {
  36. m_pTheme = NULL;
  37. m_bAdvancedMode = FALSE;
  38. m_pParentWnd = NULL;
  39. m_pFont = NULL;
  40. m_rcHover.SetRect(0, 0, 0, 0);
  41. }
  42. CXTPCalendarTip::~CXTPCalendarTip()
  43. {
  44. }
  45. BEGIN_MESSAGE_MAP(CXTPCalendarTip, CWnd)
  46. //{{AFX_MSG_MAP(CXTPCalendarTip)
  47. ON_WM_NCHITTEST_EX()
  48. ON_WM_ERASEBKGND()
  49. ON_WM_PAINT()
  50. //}}AFX_MSG_MAP
  51. END_MESSAGE_MAP()
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CXTPCalendarTip message handlers
  54. LRESULT CXTPCalendarTip::OnNcHitTest(CPoint point)
  55. {
  56. UNREFERENCED_PARAMETER(point);
  57. return HTTRANSPARENT;
  58. }
  59. BOOL CXTPCalendarTip::Create(CWnd* pParentWnd)
  60. {
  61. ASSERT_VALID(pParentWnd);
  62. // Already created ?
  63. if (m_hWnd)
  64. return TRUE;
  65. m_pParentWnd = pParentWnd;
  66. return CWnd::CreateEx(0, AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), NULL, WS_POPUP,
  67.   CXTPEmptyRect(), pParentWnd, NULL);
  68. }
  69. void CXTPCalendarTip::Activate(BOOL bActive, BOOL bAdvanced)
  70. {
  71. if (bActive)
  72. m_bAdvancedMode = bAdvanced;
  73. if (bActive)
  74. {
  75. CString strText = m_strTooltipText;
  76. CWindowDC dc(this);
  77. CXTPFontDC font(&dc, m_pFont);
  78. CXTPWindowRect rc(this);
  79. rc.right = rc.left + dc.GetTextExtent(strText).cx + 6;
  80. CRect rcWork = XTPMultiMonitor()->GetWorkArea(m_pParentWnd);
  81. if (rc.right > rcWork.right)
  82. {
  83. rc.OffsetRect(rcWork.right - rc.right, 0);
  84. }
  85. Invalidate(FALSE);
  86. }
  87. ShowWindow(bActive ? SW_SHOWNOACTIVATE : SW_HIDE);
  88. }
  89. BOOL CXTPCalendarTip::OnEraseBkgnd(CDC*)
  90. {
  91. return TRUE;
  92. }
  93. void CXTPCalendarTip::OnPaint()
  94. {
  95. CPaintDC dc(this);
  96. CXTPClientRect rc(this);
  97. if (!m_pTheme)
  98. {
  99. COLORREF clrText = GetSysColor(COLOR_INFOTEXT);
  100. dc.FillSolidRect(rc, GetSysColor(COLOR_INFOBK));
  101. dc.Draw3dRect(rc, RGB(241, 239, 226), RGB(113, 111, 100));
  102. dc.SetTextColor(clrText);
  103. dc.SetBkMode(TRANSPARENT);
  104. CXTPFontDC font(&dc, m_pFont);
  105. CRect rcText(rc);
  106. rcText.left += 3;
  107. rcText.top += 3;
  108. dc.DrawText(m_strTooltipText, rcText, DT_WORDBREAK | DT_NOPREFIX);
  109. }
  110. else // Office 2007 theme-similar drawings
  111. {
  112. // fill background
  113. COLORREF clrLight = m_pTheme->GetColor(CXTPCalendarThemeOffice2007::xtpCLR_DayViewCellWorkBk);
  114. COLORREF clrDark = m_pTheme->GetColor(CXTPCalendarThemeOffice2007::xtpCLR_DayViewCellNonWorkBk);
  115. COLORREF clrText = m_bAdvancedMode ?
  116. XTPDrawHelpers()->LightenColor(120, m_pTheme->m_clrBaseColor) :
  117. RGB(0, 0, 0);
  118. COLORREF clrBorder = m_pTheme->GetColor(CXTPCalendarThemeOffice2007::xtpCLR_DayViewSingleDayEventBorder);
  119. CXTPPaintManagerColorGradient grclrBk(clrLight, clrDark);
  120. dc.SetTextColor(clrText);
  121. dc.SetBkMode(TRANSPARENT);
  122. m_pTheme->DrawRoundRect(&dc, &rc, clrBorder, FALSE, grclrBk);
  123. CXTPFontDC font(&dc, m_pTheme->m_fntBaseFont);
  124. CRect rcText(rc);
  125. rcText.DeflateRect(3, 3, 3, 3);
  126. dc.DrawText(m_strTooltipText, rcText, DT_WORDBREAK | DT_NOPREFIX | DT_VCENTER |
  127. (m_bAdvancedMode ? DT_CENTER : 0));
  128. }
  129. }
  130. CSize CXTPCalendarTip::CalcToolTipRect()
  131. {
  132. CWindowDC dc(NULL);
  133. CRect rc(0, 0, 152-6, 20);
  134. CXTPFontDC font(&dc, m_pFont);
  135. dc.DrawText(m_strTooltipText, rc, DT_CALCRECT | DT_WORDBREAK);
  136. return CSize(152, rc.Height()+6);
  137. }
  138. void CXTPCalendarTip::SetTheme(CXTPCalendarTheme* pTheme)
  139. {
  140. m_pTheme = pTheme;
  141. }