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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportTip.cpp : implementation of the CXTPReportTip class.
  2. //
  3. // This file is a part of the XTREME REPORTCONTROL 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 "XTPReportControl.h"
  24. #include "XTPReportDefines.h"
  25. #include "XTPReportTip.h"
  26. #ifdef _DEBUG
  27. #define new DEBUG_NEW
  28. #undef THIS_FILE
  29. static char THIS_FILE[] = __FILE__;
  30. #endif
  31. /////////////////////////////////////////////////////////////////////////////
  32. // CXTPReportTip
  33. CXTPReportTip::CXTPReportTip()
  34. {
  35. m_pParentWnd = NULL;
  36. m_pItem = NULL;
  37. m_nRowIndex = -1;
  38. }
  39. CXTPReportTip::~CXTPReportTip()
  40. {
  41. }
  42. BEGIN_MESSAGE_MAP(CXTPReportTip, CWnd)
  43. //{{AFX_MSG_MAP(CXTPReportTip)
  44. ON_WM_MOUSEMOVE()
  45. ON_WM_NCHITTEST_EX()
  46. ON_WM_ERASEBKGND()
  47. ON_WM_PAINT()
  48. //}}AFX_MSG_MAP
  49. END_MESSAGE_MAP()
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CXTPReportTip message handlers
  52. LRESULT CXTPReportTip::OnNcHitTest(CPoint /*point*/)
  53. {
  54. return (UINT)HTTRANSPARENT;
  55. }
  56. BOOL CXTPReportTip::Create(CWnd* pParentWnd)
  57. {
  58. ASSERT_VALID(pParentWnd);
  59. // Already created ?
  60. if (m_hWnd)
  61. return TRUE;
  62. m_pParentWnd = pParentWnd;
  63. return CWnd::CreateEx(WS_EX_TOOLWINDOW, AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), NULL, WS_POPUP,
  64. CXTPEmptyRect(), 0, NULL);
  65. }
  66. void CXTPReportTip::Activate(BOOL bActive, BOOL bMultiline)
  67. {
  68. m_bMultiline = bMultiline;
  69. if (bActive)
  70. {
  71. CXTPWindowRect rc (this);
  72. if (!bMultiline)
  73. {
  74. CString strText = m_strTooltipText;
  75. CWindowDC dc(this);
  76. CXTPFontDC font(&dc, &m_fntToolTip);
  77. rc.right = rc.left + dc.GetTextExtent(strText).cx + 6;
  78. }
  79. if ((m_pParentWnd->GetExStyle() & WS_EX_RTLREADING) || (m_pParentWnd->GetExStyle() & WS_EX_LAYOUTRTL))
  80. {
  81. rc.OffsetRect(-rc.right + m_rcHover.right + 1, 0);
  82. }
  83. CRect rcWork = XTPMultiMonitor()->GetWorkArea();
  84. if (rc.right > rcWork.right)
  85. rc.OffsetRect(rcWork.right - rc.right, 0);
  86. if (rc.left < rcWork.left)
  87. rc.OffsetRect(rcWork.left - rc.left, 0);
  88. if (bMultiline)
  89. {
  90. if (rc.bottom > rcWork.bottom)
  91. rc.OffsetRect(0, rcWork.bottom - rc.bottom);
  92. }
  93. MoveWindow(rc);
  94. Invalidate(FALSE);
  95. }
  96. SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, (bActive ? SWP_SHOWWINDOW : SWP_HIDEWINDOW | SWP_NOZORDER) | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE);
  97. }
  98. BOOL CXTPReportTip::OnEraseBkgnd(CDC*)
  99. {
  100. return TRUE;
  101. }
  102. void CXTPReportTip::OnPaint()
  103. {
  104. CPaintDC dc(this);
  105. CXTPClientRect rc(this);
  106. COLORREF clrText = GetXtremeColor(COLOR_INFOTEXT);
  107. dc.FillSolidRect(rc, GetXtremeColor(COLOR_INFOBK));
  108. dc.Draw3dRect(rc, clrText, clrText);
  109. dc.SetTextColor(clrText);
  110. dc.SetBkMode(TRANSPARENT);
  111. if ((m_pParentWnd->GetExStyle() & WS_EX_RTLREADING) || (m_pParentWnd->GetExStyle() & WS_EX_LAYOUTRTL))
  112. {
  113. dc.SetTextAlign(TA_RTLREADING);
  114. }
  115. CXTPFontDC font(&dc, &m_fntToolTip);
  116. CRect rcText(rc);
  117. if (m_bMultiline)
  118. {
  119. rcText.left += 2;
  120. rcText.right--;
  121. }
  122. else
  123. {
  124. rcText.left += 3;
  125. rcText.top -= 2;
  126. }
  127. dc.DrawText(m_strTooltipText, rcText, (m_bMultiline ? DT_WORDBREAK : DT_SINGLELINE) | DT_VCENTER | DT_NOPREFIX);
  128. }