ToolTips für TreeView-Einträge

By dose | August 29, 2006
Under: technical stuff, Uncategorized

Manchmal kann es praktisch sein, dem User zu den einzelnen Einträgen in einem TreeView zusätzliche Informationen anzuzeigen. Wie unter Windows üblich, kann man dies mittes eines ToolTips bewerkstelligen.
Standardmäßig zeigt das TreeView-Control nur dann Tooltips an, wenn der Text des Eintrags abgeschnitten wird, sofern das Quickinfo flag gesetzt ist.
Will man jedoch Tooltips zu einzelnen Einträgen anzeigen, findet man keine entsprechende Funktion dafür. Man ist daher forciert, das Ganze selbst auszuprogrammieren. Sucht man im Internet nach entsprechenden Informationen, findet man leider nur MFC-Codebeispiele. Grundsätzlich ist die Lösung jedoch relativ einfach:

Mittels des Filtern der Windowmessage WM_MOUSEMOVE des Treeview-Controls kann man die Position des Mauscursors auf dem Control herausfinden und mittels TreeView_HitText prüfen, ob dieser sich über einem Eintrag befindet. Um dies realisieren zu können, muss das Control gesubclassed werden (dies geschieht in bekannter Weise mittels SetWindowLong GWL_WNDPROC. Ist nun das entsprechende Item identifiziert, für welches der ToolTip angezeigt werden soll, so legt man einfach ein Tooltip für das TreeView-Control an, sofern noch keines existiert. Existiert bereits ein Tooltip, so ist einfach der Text des Tooltips entsprechend dem zum Eintrag zugehörigen Text geändert. Damit der Tooltip wieder verschwindet, wenn der Cursor außerhalb des Bereichs von einem Eintrag ist, wird der Tooltip in diesem Fall einfach wieder gelöscht.
Um nun den anzuzeigenden Text einem Eintrag zuzuordnen, kann der LPARAM-Parameter verwendet werden. Nachdem man wahrscheinlich noch andere Paramter mitspeichern möchte, wird beim Anlegen eines Eintrags Speicher alloziert, in welchem eine Struktur mit den Parametern, u.a. auch den anzuzeigenden Text, gespeichert wird.
Der allozierte Speicher ist daher bei einer TVN_DELETEITEM notification wieder freizugeben.

Das komplette Codefragment mit der Realisierung des Ganzen gibt es hier

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :