给CTreeCtrl\CListCtrl\CListBox的Item添加tooltip

1. 从CTreeCtrl派生自己的类,如CMyTreeCtrl。打开Tooltip功能:
view plaincopy to clipboardprint?
void CMyTreeCtrl::PreSubclassWindow()   
{  
// TODO: Add your specialized code here and/or call the base class  
   
CTreeCtrl::PreSubclassWindow();  
EnableToolTips(TRUE);  

2. 重写OnToolHitTest
int CMyTreeCtrl::OnToolHitTest(CPoint point, TOOLINFO * pTI) const
{
RECT rect;
UINT nFlags;
HTREEITEM hitem = HitTest( point, &nFlags );
if( nFlags & TVHT_ONITEMLABEL )
{
GetItemRect( hitem, &rect, TRUE );
pTI->hwnd = m_hWnd;
pTI->uId = (UINT)hitem;
pTI->lpszText = LPSTR_TEXTCALLBACK;
pTI->rect = rect;
return pTI->uId;
}
return -1;
}
3. 响应TTN_NEEDTEXT消息
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
view plaincopy to clipboardprint?
//here we supply the text for the item   
BOOL CMyTreeCtrl::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )  
{  
// need to handle both ANSI and UNICODE versions of the message   
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;  
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;  
CString strTipText;  
UINT nID = pNMHDR->idFrom;  
// Do not process the message from built in tooltip   
if( nID == (UINT)m_hWnd &&  
(( pNMHDR->code == TTN_NEEDTEXTA && pTTTA->uFlags & TTF_IDISHWND ) ||  
( pNMHDR->code == TTN_NEEDTEXTW && pTTTW->uFlags & TTF_IDISHWND ) ) )  
return FALSE;  

// Get the mouse position  
const MSG* pMessage;  
CPoint pt;  
pMessage = GetCurrentMessage(); // get mouse pos   
ASSERT ( pMessage );  
pt = pMessage->pt;  
ScreenToClient( &pt );  

UINT nFlags;  
HTREEITEM hitem = HitTest( pt, &nFlags ); //Get item pointed by mouse  

   
strTipText.Format( "%s", GetItemText( (HTREEITEM ) nID)); //get item text   
DWORD dw = GetItemData((HTREEITEM ) nID); //get item data  

#ifndef _UNICODE  
if (pNMHDR->code == TTN_NEEDTEXTA)  
lstrcpyn(pTTTA->szText, strTipText, 80);  
else
_mbstowcsz(pTTTW->szText, strTipText, 80);  
#else  
if (pNMHDR->code == TTN_NEEDTEXTA)  
_wcstombsz(pTTTA->szText, strTipText, 80);  
else
lstrcpyn(pTTTW->szText, strTipText, 80);  
#endif  
*pResult = 0;  

return TRUE;    // message was handled  

附-参考:
1. CTreeCtrl\CListCtrl\CListBox With ToolTip Based On the Item Data
2. Custom ToolTip for Tree Control

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Passants/archive/2009/02/02/3858541.aspx


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值