为CListCtrl单元格添加提示信息的类

    技术2022-05-19  19

    一、思路: 1. 确定鼠标落在哪一个单元格上面 2. 获得该单元格的文字信息 3. 更新tooltip的信息。

      二、实施: 1. 添加CListCtrl的派生类CTipListCtrl 2. 为该派生类添加WM_MOUSEMOVE消息 3. 在WM_MOUSEMOVE的消息处理函数中添加如下代码:

     1  void CTipListCtrl::OnMouseMove(UINT nFlags, CPoint point)   2  {  3      // TODO: Add your message handler code here and/or call default  4   5      if(m_bEnableTips)  6      {  7          CString str;  8          LVHITTESTINFO lvhti;  9  10          // 判断鼠标当前所在的位置(行, 列) 11          lvhti.pt = point;     12          SubItemHitTest( &lvhti ); 13  14          // 如果鼠标移动到另一个单元格内, 则进行处理; 否则, 不做处理 15          if((lvhti.iItem != m_nItem) || (lvhti.iSubItem != m_nSubItem)) 16          { 17              // 保存当前鼠标所在的(行,列) 18              m_nItem = lvhti.iItem; 19              m_nSubItem = lvhti.iSubItem; 20  21              // 如果鼠标移动到一个合法的单元格内,则显示新的提示信息 22              // 否则, 不显示提示 23              if((m_nItem != -1) && (m_nSubItem != -1)) 24              { 25                  // @@@@@@@@ 在这里修改要显示的提示信息 26                  // 这里仅仅是一个例子---获得当前单元格的文字信息, 并设置为新的提示信息 27                  str = GetItemText(m_nItem ,m_nSubItem);                 28                  m_toolTip.AddTool(this, str); 29                  // 显示提示框 30                  m_toolTip.Pop(); 31              } 32              else 33              { 34                  m_toolTip.AddTool(this, ""); 35                  m_toolTip.Pop(); 36              } 37          } 38      } 39  40      CListCtrl::OnMouseMove(nFlags, point); 41  } 42 

    最新回复(0)