Im Moment habe ich eine QuickInfo, die erscheint, wenn ich den Mauszeiger über ein Bearbeitungsfeld bewege. Das Problem besteht darin, dass diese QuickInfo mehrere Fehlermeldungen enthält und sich alle in einer langen Zeile befinden. Ich muss jede Fehlermeldung in einer eigenen Zeile haben. Die Fehlermeldungen sind in einem CString mit einer neuen Zeile enthalten, die sie voneinander trennt.Wie erhalte ich eine Multithread-Tooltip in MFC
Mein bestehender Code ist unten.
BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
// need to handle both ANSI and UNICODE versions of the message
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
// TCHAR szFullText[256];
CString strTipText=_T("");
UINT nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
}
//m_errProjAccel[ch] contains 1 or more error messages each seperated by a new line.
if((int)nID >= ID_PROJECTED_ACCEL1 && (int)nID < ID_PROJECTED_ACCEL1 + PROJECTED_ROWS -1) {
int ch = nID - ID_PROJECTED_ACCEL1;
strTipText = m_errProjAccel[ch];
}
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]));
else
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]));
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]));
else
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]));
#endif
*pResult = 0;
// bring the tooltip window above other popup windows
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
return TRUE; // message was handled
}
Ich benutzte \ n. Ich habe es in \ r \ n geändert, aber es scheint nicht geholfen zu haben. – JonDrnek
Ich habe festgestellt, dass Tooltips \ n, \ r \ n und \ r als gültige Zeilenumbrüche akzeptieren. Ich war sogar in der Lage, sie im selben Tooltip zu mischen. Dies liegt an Fehlern/Inkonsistenzen in der Software, die wir beheben werden, aber es funktioniert. – Aardvark
Um den lpszText zu verwenden, könnte man folgendes tun: '' 'pTTT-> lpszText = const_cast (statischer_cast (strTipText));' '' –
Mangs