私は80文字以上をサポートするツールチップを持つために、CListCtrlのOnToolTipNotifyをオーバーライドしようとしています。特定のセルに対してツールチップを表示したい。私はこれに関連したたくさんの投稿を見てきましたが、誰も私にこれを行う最善の方法を理解するのを完全に手伝ってくれませんでした。ここまで私がこれまで持っていたことはありますが、私はT2Wを使用するワイド文字コードに懸念しています。私はT2Wがスタックからメモリを使い、関数が返ってきたらそれがクリーンアップされると読んでいます。したがって、lpszTextは無効になります。これはうまくいくようですが、私はそれを行う別の方法を見つけることができません。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;
}
...
}
私は 'ON_NOTIFY_REFLECT(LVN_GETINFOTIP、OnGetInfoTip)'と '無効CMyListCtrlExを使用:: OnGetInfoTip(NMHDR * pNMHDR、LRESULT * PRESULT)' – sergiol