VC/MFC 在ListCtl 控件中随鼠标移动提示单元格信息

时间:2021-03-26 17:30:34
  1. BEGIN_MESSAGE_MAP(CTipListCtrl, CListCtrl)
  2. //{{AFX_MSG_MAP(CTipListCtrl)
  3. ON_WM_MOUSEMOVE()
  4. ON_WM_DESTROY()
  5. //}}AFX_MSG_MAP
  6. END_MESSAGE_MAP()
  7. /////////////////////////////////////////////////////////////////////////////
  8. // CTipListCtrl message handlers
  9. void CTipListCtrl::OnMouseMove(UINT nFlags, CPoint point)
  10. {
  11. // TODO: Add your message handler code here and/or call default
  12. if(m_bEnableTips)
  13. {
  14. CString str;
  15. LVHITTESTINFO lvhti;
  16. // 判断鼠标当前所在的位置(行, 列)
  17. lvhti.pt = point;
  18. SubItemHitTest(&lvhti);
  19. // 如果鼠标移动到另一个单元格内, 则进行处理; 否则, 不做处理
  20. if((lvhti.iItem != m_nItem) || (lvhti.iSubItem != m_nSubItem))
  21. {
  22. // 保存当前鼠标所在的(行,列)
  23. m_nItem = lvhti.iItem;
  24. m_nSubItem = lvhti.iSubItem;
  25. // 如果鼠标移动到一个合法的单元格内,则显示新的提示信息
  26. // 否则, 不显示提示
  27. if((m_nItem != -1) && (m_nSubItem != -1))
  28. {
  29. // @@@@@@@@ 在这里修改要显示的提示信息
  30. // 这里仅仅是一个例子---获得当前单元格的文字信息, 并设置为新的提示信息
  31. str = GetItemText(m_nItem ,m_nSubItem);
  32. m_toolTip.AddTool(this, str);
  33. // 显示提示框
  34. m_toolTip.Pop();
  35. }
  36. else
  37. {
  38. m_toolTip.AddTool(this, _T("双击记录可查看人员详细信息并对其修改"));
  39. // 显示提示框
  40. m_toolTip.Pop();
  41. }
  42. }
  43. }
  44. CListCtrl::OnMouseMove(nFlags, point);
  45. }
  46. BOOL CTipListCtrl::PreTranslateMessage(MSG* pMsg)
  47. {
  48. // TODO: Add your specialized code here and/or call the base class
  49. if(::IsWindow(m_toolTip.GetSafeHwnd()))
  50. {
  51. m_toolTip.RelayEvent(pMsg);
  52. }
  53. return CListCtrl::PreTranslateMessage(pMsg);
  54. }
  55. void CTipListCtrl::OnDestroy()
  56. {
  57. CListCtrl::OnDestroy();
  58. // TODO: Add your message handler code here
  59. // listctrl销毁时, 同时销毁 tooltipctrl
  60. m_toolTip.DestroyWindow();
  61. m_toolTip.Detach();
  62. }
  63. BOOL CTipListCtrl::EnableTips()
  64. {
  65. EnableToolTips(TRUE);
  66. // 创建tooltip控件
  67. m_bEnableTips = m_toolTip.Create(this, TTS_ALWAYSTIP);
  68. if(m_bEnableTips)
  69. {
  70. m_toolTip.Activate(TRUE);
  71. m_toolTip.SetDelayTime(TTDT_INITIAL, 0);
  72. }
  73. return m_bEnableTips;
  74. }