1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
...
int CToolTipListCtrl::OnToolHitTest(CPoint point, TOOLINFO * pTI) const
{
int x = 0;
int i;
int cnt = ((CListCtrl*)this)->GetHeaderCtrl()->GetItemCount();
for ( i = 0 ; i < cnt ; i ++ )
{
x += ((CListCtrl*)this)->GetColumnWidth(i);
if ( point.x < x )
{
GetClientRect( &(pTI->rect) );
pTI->hwnd = m_hWnd;
pTI->uId = i;
pTI->lpszText = LPSTR_TEXTCALLBACK;
((CToolTipListCtrl*)this)->m_nColToolTip = i;
return i; //By returning a unique value per listItem,
//See if the point falls onto a list item
}
}
((CToolTipListCtrl*)this)->m_nColToolTip = -1;
return -1;
}
BOOL CToolTipListCtrl::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
//Handle both ANSI and UNICODE versions of the message
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
*pResult = 0;
CString strTipText;
strTipText.Format("Colonne %i", m_nColToolTip);
//Deal with UNICODE
#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
return FALSE;
} |
Partager