Tooltips in Treeview mit TVN_GETINFOTIP, Zeitproblem



  • Moin, ich fange in meinem Treeview den Event TVN_GETINFOTIP ab um Tooltips für die Items darzustellen. Anscheinend wird die Nachricht sofort geschickt sobald der Mauscursor über dem Item ist, nicht etwas wie beim Listview, wo man etwa 1 Sekunde über dem Item verweilen muss damit die Nachricht gesendet wird. Ferner ist mir aufgefallen, daß normalerweise bei einen in die Breite zu langen Itemennamen im Treeview der Name des Items quasi als Tooltip nach rechts verlängert über den Fensterrand hinaus dargestellt wird. Dies wird beim Abfangen der Nachricht TVN_GETINFOTIP nicht mehr so dargestellt, was mich zu der Vermutung veranlasst, daß hier ein direkter Zusammenhang zwischen der Nachricht und dem Einblenden des langen Namens ist. Meine Problem beim Abfangen von TVN_GETINFOTIP ist, daß durch das sofortige Schicken dieser Nachricht ständig Tooltips eingeblendet werden und der Treeview dadurch flackert. Hat jemand einen Vorschlag wie ich das beheben kann?


  • Mod

    Ich verstehe nicht was Du meinst...

    Ja die Nachricht wird sofort gesendet, denn das Control prüft sofort, ob ein Tooltip später notwendig wird oder nicht. Nur wenn es notwendig sein sollte wird der Tooltip initialisiert und eine Sekunde später erscheint er.

    Wie sind Dein Handler für diese Funktion aus?

    Und was meinst Du mit "sofortiges Schicken der Nachricht"!
    Dies ist eine Notification, dienichts mit dem Anzeigen des Tooltips zu tun hat, sie holt nur den Text, der angezeigt werden soll...
    Selber darfst Du diese nicht senden.



  • Also so werden meine Tooltips aufgerufen:

    case WM_NOTIFY:{
    		switch(((LPNMHDR)lParam)->code){
    			case TBN_GETINFOTIP:
    				Show_ToolTipsToolbar(lParam);
    				return 0;
    			case TVN_GETINFOTIP:
    				Show_ToolTips_TV(lParam);
    				return 0;
    			case LVN_GETINFOTIP:
    				Show_ToolTips_LV(lParam);
    				return 0;
    

    naja und in den entsprechenden Unterfunktionen bekommt ((LPNMTBGETINFOTIP)lParam)->pszText, ((LPNMTVGETINFOTIP)lParam)->pszText und ((LPNMLVGETINFOTIP)lParam)->pszText ihren Text. Hier ist es nun so, daß der Tooltip für den TV sofort angezeigt wird und der Tooltip für den LV erst nach ca 1 Sekunde. Ich hätte eben auch gerne daß der Tooltip des TV auch erst nach 1 Sekunde und nicht softort angezeigt wird. Geht das irgendwie?


  • Mod

    Dein Code ist IMHO unsinnig.
    Warum verwendest Du nicht TVM_GETTOOLTIPS?
    http://msdn2.microsoft.com/en-us/library/bb773729(VS.85).aspx
    Dann einfach TTM_SETDELAYTIME auf 0 setzen für den entsprechenden Wert.
    http://msdn2.microsoft.com/en-us/library/bb760404(VS.85).aspx



  • Ok danke für die Antwort, leider verstehe ich die Verwendung von "TVM_GETTOOLTIPS" nicht ganz. Bei dem Code den ich gepostet habe gekommt der Eventhandler die Notifymessage "TVN_GETINFOTIP" und ich kann darauf reagieren. Aber "TVM_GETTOOLTIPS" ist ja eine Message die ich senden muss um Tooltips zu erhalten. Muss ich da irgendeine Zeitmessroutine einbauen, um zu ermitteln ob der Cursor über dem Item verweilt oder sende ich die Message wenn ich "TVN_GETINFOTIP" erhalte? Ich bin da nun etwas verwirrt, du hast nicht zufällig einen Link zu einem Bsp-Code parrat?


  • Mod

    Du willst doch nur das Verhalten des Tooltops verändern, so wie ich Deine Frage verstanden habe.
    Er soll sofort erscheinen! Und dafür ist mein Anstatz.



  • Abgesehen von der Tatsache, daß ich mit der Methode die ich da anwende, ja eine Tooltipanzeige hinbekomme (hab ich so in einem Bsp-Code gfunden). Wie ist die richtige Vorgehnsweise? Also da ich null Plan habe, wäre ich für eine ausführlichere Erklärung sehr dankbar. Mein erster Schritt ist das Treeviewfenster zu erstellen, wie gehts dann weiter? Hoffe du kannst/willst helfen.


Anmelden zum Antworten