ItemToolTipCtrl.cpp
上传用户:yangzi5763
上传日期:2007-01-02
资源大小:239k
文件大小:5k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 10/21/98 12:26:29 PM
  5.   Comments: ItemToolTipCtrl.cpp : implementation file
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "xpropertieswnd.h"
  9. #include "ItemToolTipCtrl.h"
  10. #include "PageListCtrl.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CItemToolTipCtrl
  18. // Function name : CItemToolTipCtrl::CItemToolTipCtrl
  19. // Description     : Default constructor
  20. // Return type : 
  21. CItemToolTipCtrl::CItemToolTipCtrl()
  22. {
  23. EnableAutomation();
  24. m_pParent = NULL;
  25. m_bActivate = NULL;
  26. }
  27. // Function name : CItemToolTipCtrl::~CItemToolTipCtrl
  28. // Description     : virtual destructor
  29. // Return type : 
  30. CItemToolTipCtrl::~CItemToolTipCtrl()
  31. {
  32. }
  33. void CItemToolTipCtrl::OnFinalRelease()
  34. {
  35. // When the last reference for an automation object is released
  36. // OnFinalRelease is called.  The base class will automatically
  37. // deletes the object.  Add additional cleanup required for your
  38. // object before calling the base class.
  39. CToolTipCtrl::OnFinalRelease();
  40. }
  41. BEGIN_MESSAGE_MAP(CItemToolTipCtrl, CToolTipCtrl)
  42. //{{AFX_MSG_MAP(CItemToolTipCtrl)
  43. //}}AFX_MSG_MAP
  44. END_MESSAGE_MAP()
  45. BEGIN_DISPATCH_MAP(CItemToolTipCtrl, CToolTipCtrl)
  46. //{{AFX_DISPATCH_MAP(CItemToolTipCtrl)
  47. // NOTE - the ClassWizard will add and remove mapping macros here.
  48. //}}AFX_DISPATCH_MAP
  49. END_DISPATCH_MAP()
  50. // Note: we add support for IID_IItemToolTipCtrl to support typesafe binding
  51. //  from VBA.  This IID must match the GUID that is attached to the 
  52. //  dispinterface in the .ODL file.
  53. // {7C49E333-68BA-11D2-86C6-0040055C08D9}
  54. static const IID IID_IItemToolTipCtrl =
  55. { 0x7c49e333, 0x68ba, 0x11d2, { 0x86, 0xc6, 0x0, 0x40, 0x5, 0x5c, 0x8, 0xd9 } };
  56. BEGIN_INTERFACE_MAP(CItemToolTipCtrl, CToolTipCtrl)
  57. INTERFACE_PART(CItemToolTipCtrl, IID_IItemToolTipCtrl, Dispatch)
  58. END_INTERFACE_MAP()
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CItemToolTipCtrl message handlers
  61. // Function name : CItemToolTipCtrl::Create
  62. // Description     : Create function
  63. // Return type : BOOL 
  64. // Argument         : CPageListCtrl* pParent
  65. BOOL CItemToolTipCtrl::Create(CPageListCtrl * pParent)
  66. {
  67. if (CToolTipCtrl::Create((CWnd*)pParent, TTS_ALWAYSTIP))
  68. // We don't use this string
  69. if (AddTool((CWnd*)pParent, IDS_STRING_TOOLTIP))
  70. {
  71. m_pParent = pParent;
  72. Activate(TRUE);
  73. EnableToolTips(TRUE);
  74. SetDelayTime(0);
  75. // Update the tooltip text to be NULL when we start.
  76. UpdateTipText((LPCTSTR)NULL,m_pParent);
  77. return TRUE;
  78. }
  79. return FALSE;
  80. }
  81. // Function name : CItemToolTipCtrl::WindowProc
  82. // Description     : Catch WM_MOUSEMOVE for checking the lenght of GetDefaultValue
  83. // Return type : LRESULT 
  84. // Argument         : UINT message
  85. // Argument         : WPARAM wParam
  86. // Argument         : LPARAM lParam
  87. LRESULT CItemToolTipCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  88. {
  89. switch (message)
  90. {
  91. case TTM_RELAYEVENT:
  92. {
  93. if (GetFocus() == m_pParent)
  94. switch (((LPMSG)lParam)->message)
  95. {
  96. case WM_MOUSEMOVE:
  97. {
  98. int nItem = m_pParent->HitTest(CPoint(LOWORD(((LPMSG)lParam)->lParam), HIWORD(((LPMSG)lParam)->lParam)));
  99. BOOL bNeed = FALSE;
  100. CString tToolTip;
  101. if (Activate(bNeed = NeedToolTip(nItem, tToolTip)))
  102. if (bNeed)
  103. UpdateTipText(tToolTip, m_pParent);
  104. break;
  105. }
  106. case WM_LBUTTONDOWN:
  107. {
  108. Activate(FALSE);
  109. break;
  110. }
  111. }
  112. break;
  113. }
  114. }
  115. return CToolTipCtrl::WindowProc(message, wParam, lParam);
  116. }
  117. // Function name : CItemToolTipCtrl::Activate
  118. // Description     : 
  119. // Return type : BOOL 
  120. // Argument         : BOOL bActivate
  121. BOOL CItemToolTipCtrl::Activate(BOOL bActivate)
  122. {
  123. if ((int)m_bActivate != (int)bActivate)
  124. {
  125. m_bActivate = bActivate;
  126. CToolTipCtrl::Activate(bActivate);
  127. return TRUE;
  128. }
  129. m_bActivate = bActivate;
  130. return FALSE;
  131. }
  132. // Function name : CItemToolTipCtrl::NeedToolTip
  133. // Description     : Check if item nItem need a tool tip
  134. // Return type : BOOL 
  135. // Argument         : int nItem
  136. BOOL CItemToolTipCtrl::NeedToolTip(int nItem, CString& item)
  137. {
  138. BOOL bResult = FALSE;
  139. if (nItem >= 0)
  140. {
  141. item = m_pParent->GetDefaultValue(nItem);
  142. if (!item.IsEmpty())
  143. {
  144. CDC* pDC = m_pParent->GetDC();
  145. CFont* pFont = pDC->SelectObject(m_pParent->GetFont());
  146. bResult = pDC->GetTextExtent(item).cx > m_pParent->GetLastRect(nItem).Width();
  147. pDC->SelectObject(pFont);
  148. m_pParent->ReleaseDC(pDC);
  149. }
  150. }
  151. return bResult;
  152. }