Mehrzeilige Tooltips für Toolbar



  • Hallo zusammen,

    ich möchte gerne den Tooltip eines Tool-Buttons der Toolbar dynamisch durch einen Hinweis ergänzen.
    Dazu wäre es nötig, diesen mehrzeilig zu gestalten.
    Man erkennts dann einfach besser.
    Aber sobald ein "\n" oder "\r\n" drin ist, wird der Text in der Ausgabe
    dort abgeschnitten.

    Die Tooltips kommen als normales Rechteck, so wie bei jeder anderen Anwendung auch, für diese Art Tooltip und nicht wie eine Sprechblase, die das eigentlich kann.

    Die Toolbar stammt von "CToolBar" ab.
    Meine Auswerte-Fktn.:

    afx_msg BOOL CMainFrame::OnToolTipNotify(UINT id, NMHDR *pNotifyStruct, LRESULT *result)
    {
      BOOL			bReturn;
      CString		cText;
      LPTOOLTIPTEXT pToolTipText = (LPTOOLTIPTEXT)pNotifyStruct;
      TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNotifyStruct;
      TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNotifyStruct;
    
      if (pNotifyStruct->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
    	  pNotifyStruct->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) {
    	  memset(pToolTipText->szText, 0, sizeof(pToolTipText->szText));
    	  return TRUE;
      }
    
      bReturn = OnToolTipText(id, pNotifyStruct, result);
      if(!bReturn)
    	  return bReturn;
      cText = pToolTipText->szText;
    
      if ((pNotifyStruct->idFrom == ID_GRAFIK) && bSonderzustand)
    	  cText += _T("\r\nHier ist aktuell anderes Verhalten.");
    
      //memset(pToolTipText->szText, 0, sizeof(pToolTipText->szText));// Original
      memset(pToolTipText->szText, 0, sizeof(cText));// Das hilft aber auch nix.
      wcsncpy(pToolTipText->szText,cText.GetBuffer(1),sizeof(pToolTipText->szText)/2);
      cText.ReleaseBuffer();
    
      return bReturn;
    }
    

    Weiss da bitte jemand Rat?
    Oder geht das bei dieser Art Tooltip gar nicht?


  • Mod



  • Und beachte auch die " Note" im Link bzgl. szText und lpszText.



  • @Martin-Richter sagte in Mehrzeilige Tooltips für Toolbar:

    TTM_SETMAXTIPWIDTH

    Habe versucht, das "SendMessage(pNotifyStruct->hwndFrom, TTM_SETMAXTIPWIDTH, 0, 150);" in meine "OnToolTipNotify(..)"
    einzubauen.
    Also bevor das "memset(..)" und das "wcsncpy(..)" ausgeführt wird.
    "SendMessage(..)"hat allerdings eine andere Signatur, als in dem Beispiel angegeben.
    ==> HWND != UINT und Anzahl Parameter !!! Es will hier nur 3.
    Mit Anpassung compiliert es zwar, bringt aber nix.

    Auch ist meine Methode eigentlich schon der Empfänger der Message.
    Ich kapier das leider nicht.

    Wissen die bei Microsoft selbst nicht, was sie machen?
    Oder ich befinde mich in einem anderen Context.

    Mein Text beschränkt sich auch auf die erlaubten 80 Zeichen.
    Und ich habs mit ganz wenig Zeichen probiert.

    Die Beispiele, die ich bisher gefunden habe, bringen mich hier leider nicht weiter.



  • Das ist die globale WinAPI-Funktion SendMessage, nicht die MFC-Funktion CWnd:SendMessage.

    ::SendMessage(pNotifyStruct->hwndFrom, TTM_SETMAXTIPWIDTH, 0, 150);
    


  • @Th69

    !!!!!
    Danke!
    Es war ausreichend, dieses "::SendMessage(..)" an besagter Stelle einzubauen.



  • Funktioniert denn jetzt die mehrzeilige Anzeige?



  • @Th69
    Hi Th69,

    vielen Dank nochmals für den Hinweis.
    Bis gerade eben dachte ich es würde funktionieren.
    Und es funktioniert auch unter Windows10. Alles wie im Web beschrieben.
    Zwar ohne die Möglichkeit, die Hintergrundfarbe einzustellen, aber es geht.

    Nun der grosse Mangel:
    Habe es gerade unter Windows XP ausprobiert (Win7 kann ich gerade leider nicht testen!!).
    Dort bekomme ich leider nur ein schwarzes Rechteck in der Form des mehrzeiligen Tooltips.

    Hast Du da ev. noch eine Ahnung, was man da machen könnte?
    ... Tja, wir haben noch Kunden, die das Zeug einsetzen.

    Nachtrag:
    Habe Fehler gemacht.
    Ich habe meinen Versuch, auch die Farbe anzupassen, vergessen wieder rauszunehmen.
    Das produzierte den Tooltip als schwarzes Rechteck.
    Und wenn einmal diese Message abgesetzt wurde, wirkt sie sich fortlaufend auf alle anderen Tooltips aus.
    Unter Win10 ist es nicht aufgefallen, da es einfach nicht drauf reagiert.



  • @elmut19 sagte in Mehrzeilige Tooltips für Toolbar:

    Habe es gerade unter Windows XP ausprobiert

    hast Du mal auf den Kalender geschaut?



  • Schau dir mal die Sourcen von Custom ToolTips for MFC Projects an (dieser Artikel ist von 2007, daher gehe ich davon aus, daß es noch unter XP entwickelt wurde).
    Oder A multiline extended tooltip control bzw. CXInfoTip - Information Tooltip, welche noch älter (v. 1999 bzw. 2001) sind.



  • @Swordfish
    Kalender?
    Verstehe ich jetzt leider nicht.



  • @Th69 sagte in Mehrzeilige Tooltips für Toolbar:

    Schau dir mal die Sourcen von Custom ToolTips for MFC Projects an (dieser Artikel ist von 2007, daher gehe ich davon aus, daß es noch unter XP entwickelt wurde).
    Oder A multiline extended tooltip control bzw. CXInfoTip - Information Tooltip, welche noch älter (v. 1999 bzw. 2001) sind.

    Vielen Dank Th69
    Ich werd das mal durchsehen.


Log in to reply