一、思路:
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