Wie komme ich zu einem multi-line tooltip im MFC
Gerade jetzt, ich habe einen tool-Tipp, das erscheint, wenn ich den Mauszeiger über ein Eingabefeld. Das problem ist, dass dieses tool Tipp enthält mehrere Fehler-Nachrichten, und Sie sind alle in einer langen Zeile. Ich muss jede Fehlermeldung werden auf einer eigenen Zeile. Die Fehlermeldungen enthalten sind, in einen CString mit einer neuen Zeile trennen von Ihnen.
Mein vorhandener 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
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen mehrzeilige tooltips erklärt hier in der MSDN - Bibliothek Lesen Sie die "Umsetzung Mehrzeilige ToolTips" Abschnitt. Senden Sie eine
TTM_SETMAXTIPWIDTH
Nachricht an das ToolTip-Steuerelement in Reaktion auf eineTTN_GETDISPINFO
- Benachrichtigung, um ihn zu zwingen, um Sie mehrere Zeilen verwenden. In Ihrem string, Sie sollten separate Zeilen mit\r\n
.Auch, wenn Ihr text länger als 80 Zeichen sind, sollten Sie die
lpszText
Mitglied derNMTTDISPINFO
Struktur, anstatt Sie zu kopieren in dieszText
array.pTTT->lpszText = const_cast<LPTSTR>(static_cast<LPCTSTR>(strTipText));