Ich konnte keinen prägnanten Codeabschnitt finden, mit dem ich QuickInfos zu einem CStatic (und CLed) -Steuerelement hinzufügen/anzeigen kann. Offensichtlich gilt der Standardcode für diese Art von Kontrolle nicht. Kann jemand Code-Snippets posten?Tooltip zu einem Cstatic hinzufügen
Antwort
Ich hoffe, dass dieser Code Ihr Problem lösen wird. Eine wichtige Sache machen NOTIFY Eigenschaft von CStatic = TRUE.
if(!m_ToolTip.Create(this))
{
TRACE0("Unable to create the ToolTip!");
}
else
{
CWnd* pWnd = GetDlgItem(IDC_STATIC_MASTER_PWD);
m_ToolTip.AddTool(pWnd,"Ok");
m_ToolTip.Activate(TRUE);
}
Lassen Sie mich wissen, wenn irgendein Problem.
Ich musste dies * plus * einen 'PreTranslateMessage'-Handler implementieren, wie in [m_skippers Antwort] beschrieben (https://stackoverflow.com/a/33772406/3549027), bevor es funktionieren würde. Es kann auch gut sein, darauf hinzuweisen, dass 'm_ToolTip' ein' CToolTipCtrl' ist. – dlf
Ich hatte Erfolg mit mehrzeilige Tooltips diese einfache Klasse mit:
Erstellen Sie eine Klasse für Quick-Infos:
class ToolTip
{
public:
static HWND CreateToolTip(int toolID, HWND hDlg, UINT id);
};
Als nächstes implementieren ein Tooltip Erstellungsfunktion:
HWND ToolTip::CreateToolTip(int toolID, HWND hDlg, UINT id)
{
if (!toolID || !hDlg || !id)
{
return FALSE;
}
CString strTTText;
strTTText.LoadString(id);
// Get the window handle of the control to attach the TT to.
HWND hwndTool = ::GetDlgItem(hDlg, toolID);
// Create the tooltip window
HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP |TTS_ALWAYSTIP,// | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
hDlg, NULL,
AfxGetInstanceHandle() , NULL);
if (!hwndTool || !hwndTip)
{
return (HWND)NULL;
}
// Associate the tooltip with the tool.
TOOLINFO toolInfo = { 0 };
toolInfo.cbSize = sizeof(toolInfo);
toolInfo.hwnd = hDlg;
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
toolInfo.uId = (UINT_PTR)hwndTool;
toolInfo.lpszText = (char*)(LPCTSTR)strTTText;
::SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
::SendMessageA(hwndTip, TTM_SETMAXTIPWIDTH, 0, 40); // force multi-line
return hwndTip;
}
Anruf es irgendwo in Ihrem InitDialog:
CMyDialog::InitDialog()
{
ToolTip::CreateToolTip(PickAUniqueNumber, m_hWnd, IDS_MY_RESOURCE_STRING);
}
Wenn ich CStatic auf Dialog basiert automatisch erstellt mfc Anwendung hinzufügen, Tooltips zeigen nicht, bis ich Relay in vorübersetzt Dialognachricht
BOOL CTooltipStaticDlg::PreTranslateMessage(MSG* pMsg)
{
m_ToolTip.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
Ich weiß nicht hinzufügen, wenn dies noch erforderlich ist, aber hier ist das, was ich gebraucht um das Problem zu lösen: fügen Sie einfach SS_NOTIFY zu dwStyle hinzu, wenn Sie das statische Label erstellen. (oder einfach "Nofity" "True" in den Eigenschaften). Das hat gut für mich funktioniert.
Ich hatte auf meinem Dialogfeld Etikett mit zugewiesenen benutzerdefinierten ID IDC_PATH. Ich brauchte aktivieren Benachrichtigen Flag (SS_NOTIFY) des Etiketts und ich brauchte CWnd Methode OnToolHitTest zu überlasten und Tooltip Treffertest wie folgt behandeln:
INT_PTR CPath::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
{
INT_PTR r = CWnd::OnToolHitTest(point,pTI);
this->ClientToScreen(&point);
CRect rcLbl;
GetDlgItem(IDC_PATH)->GetWindowRect(&rcLbl);
if(rcLbl.PtInRect(point))
{
pTI->uFlags |= TTF_IDISHWND;
pTI->uFlags &= ~TTF_NOTBUTTON;
pTI->uId = (UINT_PTR)GetDlgItem(IDC_PATH)->m_hWnd;
return IDC_PATH;
}
return r;
}
Dann ist mein Dialog gestartet TTN_NEEDTEXT eine Benachrichtigung zu erhalten, die ich behandelt und dynamicaly Setze Text für Tooltip.
BOOL CPath::OnTtnNeedText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(id);
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT_PTR nID = pNMHDR->idFrom;
BOOL bRet = FALSE;
if (pTTT->uFlags & TTF_IDISHWND)
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
if(nID == IDC_PATH)
{
pTTT->lpszText = (LPSTR)(LPCTSTR)m_FullDestPath;
bRet = TRUE;
}
}
*pResult = 0;
return bRet;
}
- 1. Hintergrundfarbe der CStatic Ausgabe
- 2. CStatic Custom Control
- 3. Wie kann ich zu einem Datagridtextcolumn ein Tooltip hinzufügen
- 4. Tooltip zu SVG-Elementen mit Text aus einem Array hinzufügen
- 5. Wie man eine Tooltip zu einem "td" mit jquery hinzufügen?
- 6. Hinzufügen von Tooltip zu Div mit einem Überlauf
- 7. Tooltip zu deaktivierter Taste in Shiny hinzufügen?
- 8. Google Charts hinzufügen Tooltip
- 9. Hinzufügen Tooltip für Radiobuttonlist Artikel
- 10. checkcolumn tooltip aus einem Datenbankfeld
- 11. Chartist Plugin Tooltip: das Etikett im Tooltip Hinzufügen
- 12. Schaltfläche zum Schließen hinzufügen (rot x) zu einer .NET ToolTip
- 13. Hinzufügen einer QuickInfo zu einem Eingabefeld
- 14. Wie man eine Tooltip zu einer Svg-Grafik hinzufügen?
- 15. Chart.js Hinzufügen von Kommas zu Tooltip und Y-Achse
- 16. Hinzufügen Hyperlink zu benutzerdefinierten Tooltip in Google Charts
- 17. Wie füge ich einen Twitter Bootstrap Tooltip zu einem Symbol
- 18. Tooltip zur Schriftart hinzufügen awesome icon
- 19. Wie kann ich einen Tooltip zu einem Knoten hinzufügen, der Control nicht mit FXML implementiert?
- 20. zu einem Objekt hinzufügen
- 21. Tooltip verhindert das Klicken auf "Hinzufügen"
- 22. chart.js Percentage hinzufügen Anmelden bei Tooltip
- 23. Hinzufügen von Screentips zu einem Label
- 24. zu Eigenschaften einer Kontrolle in einem Tooltip Bindung
- 25. Positionierung ein Tooltip relativ zu einem anderen div in JQuery
- 26. Elemente zu einem JList Hinzufügen
- 27. Schaltfläche zu einem Bild hinzufügen
- 28. Scrollbalken zu einem Qwidget hinzufügen
- 29. hinzufügen Grenzen zu einem UIPangesture
- 30. Sekunden zu einem Datum hinzufügen
Ich weiß nicht, warum diese Frage einen Downvote bekam. Tooltip-Vorgänge in MFC sind nicht immer einfach oder offensichtlich, daher ist dies eine sehr wichtige Frage. –
@MarkRansom rücksichtslose und ignorante Negativität ist solch ein trauriger Aspekt der menschlichen Existenz - es ist die einzige Erklärung, die es geben kann. –