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

[cpp] view plaincopy
 
  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. /////////////////////////////////////////////////////////////////////////////  
  9. // CTipListCtrl message handlers  
  10.   
  11. void CTipListCtrl::OnMouseMove(UINT nFlags, CPoint point)   
  12. {  
  13.     // TODO: Add your message handler code here and/or call default  
  14.   
  15.     if(m_bEnableTips)  
  16.     {  
  17.         CString str;  
  18.         LVHITTESTINFO lvhti;  
  19.           
  20.         // 判断鼠标当前所在的位置(行, 列)  
  21.         lvhti.pt = point;     
  22.         SubItemHitTest(&lvhti);  
  23.           
  24.         // 如果鼠标移动到另一个单元格内, 则进行处理; 否则, 不做处理  
  25.         if((lvhti.iItem != m_nItem) || (lvhti.iSubItem != m_nSubItem))  
  26.         {  
  27.             // 保存当前鼠标所在的(行,列)  
  28.             m_nItem = lvhti.iItem;  
  29.             m_nSubItem = lvhti.iSubItem;  
  30.               
  31.             // 如果鼠标移动到一个合法的单元格内,则显示新的提示信息  
  32.             // 否则, 不显示提示  
  33.               
  34.             if((m_nItem != -1) && (m_nSubItem != -1))  
  35.             {  
  36.                 // @@@@@@@@ 在这里修改要显示的提示信息  
  37.                 // 这里仅仅是一个例子---获得当前单元格的文字信息, 并设置为新的提示信息  
  38.                 str = GetItemText(m_nItem ,m_nSubItem);               
  39.                 m_toolTip.AddTool(this, str);  
  40.                 // 显示提示框  
  41.                 m_toolTip.Pop();  
  42.             }  
  43.             else  
  44.             {  
  45.                 m_toolTip.AddTool(this, _T("双击记录可查看人员详细信息并对其修改"));  
  46.                 // 显示提示框  
  47.                 m_toolTip.Pop();  
  48.             }  
  49.               
  50.         }  
  51.     }  
  52.       
  53.     CListCtrl::OnMouseMove(nFlags, point);  
  54. }  
  55.   
  56. BOOL CTipListCtrl::PreTranslateMessage(MSG* pMsg)   
  57. {  
  58.     // TODO: Add your specialized code here and/or call the base class  
  59.     if(::IsWindow(m_toolTip.GetSafeHwnd()))  
  60.     {  
  61.         m_toolTip.RelayEvent(pMsg);  
  62.     }  
  63.       
  64.     return CListCtrl::PreTranslateMessage(pMsg);  
  65. }  
  66.   
  67. void CTipListCtrl::OnDestroy()   
  68. {  
  69.     CListCtrl::OnDestroy();  
  70.       
  71.     // TODO: Add your message handler code here  
  72.     // listctrl销毁时, 同时销毁 tooltipctrl  
  73.     m_toolTip.DestroyWindow();  
  74.     m_toolTip.Detach();  
  75. }  
  76.   
  77. BOOL CTipListCtrl::EnableTips()  
  78. {  
  79.     EnableToolTips(TRUE);  
  80.     // 创建tooltip控件  
  81.     m_bEnableTips = m_toolTip.Create(this, TTS_ALWAYSTIP);  
  82.       
  83.     if(m_bEnableTips)  
  84.     {  
  85.         m_toolTip.Activate(TRUE);  
  86.         m_toolTip.SetDelayTime(TTDT_INITIAL, 0);  
  87.     }  
  88.       
  89.     return m_bEnableTips;  
  90. }  
上一篇:时域结构 | 带你读《5G 空口设计与实践进阶 》之十七


下一篇:评论:建立个人信息“保护伞”非常有必要