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 );