先看一下效果圖,然后介紹具體做法:

一、思路:
1. 確定鼠標(biāo)落在哪一個(gè)單元格上面
2. 獲得該單元格的文字信息
3. 更新tooltip的信息。
二、實(shí)施:
1. 添加CListCtrl的派生類CTipListCtrl
2. 為該派生類添加WM_MOUSEMOVE消息
3. 在WM_MOUSEMOVE的消息處理函數(shù)中添加如下代碼:
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 // 判斷鼠標(biāo)當(dāng)前所在的位置(行, 列)
11 lvhti.pt = point;
12 SubItemHitTest(&lvhti);
13
14 // 如果鼠標(biāo)移動(dòng)到另一個(gè)單元格內(nèi), 則進(jìn)行處理; 否則, 不做處理
15 if((lvhti.iItem != m_nItem) || (lvhti.iSubItem != m_nSubItem))
16 {
17 // 保存當(dāng)前鼠標(biāo)所在的(行,列)
18 m_nItem = lvhti.iItem;
19 m_nSubItem = lvhti.iSubItem;
20
21 // 如果鼠標(biāo)移動(dòng)到一個(gè)合法的單元格內(nèi),則顯示新的提示信息
22 // 否則, 不顯示提示
23 if((m_nItem != -1) && (m_nSubItem != -1))
24 {
25 // @@@@@@@@ 在這里修改要顯示的提示信息
26 // 這里僅僅是一個(gè)例子---獲得當(dāng)前單元格的文字信息, 并設(shè)置為新的提示信息
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
三、示例代碼下載。