Ich versuche OnToolTipNotify zu überschreiben, damit die CListCtrl Tooltips mit mehr als 80 Zeichen unterstützt. Ich möchte, dass die Tooltips für bestimmte Zellen angezeigt werden. Ich habe eine Reihe von Posts gesehen, die mir dabei geholfen haben, aber keiner hat mir völlig geholfen, den besten Weg zu verstehen, dies zu tun. Hier ist, was ich bisher habe, aber ich bin besorgt mit dem breiten Zeichencode, der T2W verwendet. Ich habe gelesen, dass T2W Speicher aus dem Stack verwendet und wenn die Funktion zurückkehrt, wird es aufgeräumt. Also wird lpszText ungültig. Dies scheint jedoch zu funktionieren und ich kann keinen anderen Weg finden, es zu tun.MFC CListCtrl OnToolTipNotify
BOOL CListCtrlEx::OnToolTipNotify(UINT tooldId, NMHDR* notifMsg, LRESULT result)
{
USES_CONVERSION;
TOOLTIPTEXTA* tttA = reinterpret_cast<TOOLTIPTEXTA*>(notifMsg);
TOOLTIPTEXTW* tttW = reinterpret_cast<TOOLTIPTEXTW*>(notifMsg);
...
int row, col;
cellHitTest(row, col);
CString tipStr;
// Note getTooltip() returns const ref to cell's tooltip string
if (-1 < row && -1 < col)
tipStr = m_Data[row]->colvals[col]->getTooltip();
if (tipStr.IsEmpty()) return FALSE;
if (TTN_NEEDTEXTA == notifMsg->code)
{
tttA->lpszText = tipStr.GetBuffer();
tttA->hinst = 0;
}
else
{
// Question: Is this a problem? Will the buffer pointed to
// by tttW->lpszText be deleted after this function ends
// making the pointer invalid?
tttW->lpszText = T2W(tipStr.GetBuffer());
tttW->hinst = 0;
}
...
}
Ich verwendete 'ON_NOTIFY_REFLECT (LVN_GETINFOTIP, OnGetInfoTip)' und 'void CMyListCtrlEx :: OnGetInfoTip (NMHDR * pNMHDR, LRESULT * pResult)' – sergiol