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

本文介绍如何通过派生CListCtrl类并在WM_MOUSEMOVE消息中添加代码来实现鼠标悬停时显示Tooltip的功能。具体步骤包括创建派生类CTipListCtrl,判断鼠标位置并获取对应单元格的文字信息,最后更新Tooltip的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、思路:
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 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值