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

P2P编程

开发平台:

Visual C++

  1. // ToolTipHeaderCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "testbt.h"
  5. #include "ToolTipHeaderCtrl.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CToolTipHeaderCtrl
  13. CToolTipHeaderCtrl::CToolTipHeaderCtrl()
  14. {
  15. }
  16. CToolTipHeaderCtrl::~CToolTipHeaderCtrl()
  17. {
  18. }
  19. BEGIN_MESSAGE_MAP(CToolTipHeaderCtrl, CHeaderCtrl)
  20. //{{AFX_MSG_MAP(CToolTipHeaderCtrl)
  21. ON_WM_MOVE()
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CToolTipHeaderCtrl message handlers
  26. //This function called form DataTipListCtrl's InsertColumn() overriden function.
  27. int CToolTipHeaderCtrl::AddToolTip(int nCol, LPCTSTR lpszTip)
  28. {
  29. RECT rcColumn;
  30. GetItemRect(nCol, &rcColumn);
  31. CRect rectTool = rcColumn;
  32. return m_Tooltip.AddTool(this, lpszTip, (LPCRECT)rectTool, nCol+1);
  33. }
  34. // This function called when scrolling or column resizing.
  35. void CToolTipHeaderCtrl::RecalcToolRect()
  36. {
  37. // This prevent debug assertion fail on last WM_MOVE on app close.
  38. if(!::IsWindow(m_Tooltip.m_hWnd))
  39. return;
  40. CDC *pDC = GetDC();
  41. CFont *pOldFont = (CFont*)pDC->SelectObject(GetFont());
  42. HDITEM hdCol;
  43. hdCol.mask = HDI_WIDTH | HDI_FORMAT;
  44. RECT rcColumn;
  45. GetClientRect(&rcColumn);
  46. // Get scroll position
  47. int nHScrollPos = GetParent()->GetScrollPos(SB_HORZ);
  48. rcColumn.left -= nHScrollPos;
  49. rcColumn.right -= nHScrollPos;
  50. RECT rcList;
  51. GetParent()->GetClientRect(&rcList);
  52. CRect rectTool;
  53. int numcol = GetItemCount();
  54. for(int col=0; col<numcol; col++)
  55. {
  56. // Get column string extent
  57. GetItem(col, &hdCol);
  58. rcColumn.right = rcColumn.left + LOWORD(hdCol.cxy);
  59. // Calculate ToolTip hover rectangle
  60. rectTool = rcColumn;
  61. /*
  62. if(cxText > rectTool.Width()-12)
  63. {
  64. if(rectTool.Width() > 24)
  65. {
  66. rectTool.left += 8;
  67. rectTool.right -= 8;
  68. }
  69. }
  70. else if(rcText.left < 0)
  71. {
  72. rectTool = rcColumn;
  73. if(rectTool.Width() > 24)
  74. rectTool.right -= 8;
  75. }
  76. else if(rcText.right > rcList.right)
  77. {
  78. rectTool = rcColumn;
  79. if(rectTool.Width() > 24)
  80. rectTool.left += 8;
  81. }
  82. else
  83. rectTool.SetRectEmpty();
  84. //*/
  85. rectTool.OffsetRect(nHScrollPos, 0);
  86. m_Tooltip.SetToolRect(this, col+1, &rectTool);
  87. rcColumn.left = rcColumn.right;
  88. }
  89. pDC->SelectObject(pOldFont);
  90. ReleaseDC(pDC);
  91. }
  92. void CToolTipHeaderCtrl::PreSubclassWindow() 
  93. {
  94. // TODO: Add your specialized code here and/or call the base class
  95. m_Tooltip.Create(this);
  96. m_Tooltip.Activate(TRUE);
  97. int iret = m_Tooltip.SetMaxTipWidth(500);
  98. iret = m_Tooltip.GetMaxTipWidth();
  99. CHeaderCtrl::PreSubclassWindow();
  100. }
  101. BOOL CToolTipHeaderCtrl::PreTranslateMessage(MSG* pMsg) 
  102. {
  103. // TODO: Add your specialized code here and/or call the base class
  104. m_Tooltip.RelayEvent(pMsg);
  105. return CHeaderCtrl::PreTranslateMessage(pMsg);
  106. }
  107. void CToolTipHeaderCtrl::OnMove(int x, int y) 
  108. {
  109. CHeaderCtrl::OnMove(x, y);
  110. // TODO: Add your message handler code here
  111. RecalcToolRect();
  112. }