CTreeCtrl beim Expand füllen
-
Hallo zusammen,
ich hab da ein kleines Problem ich möchte gerne eine TreeCtrl beim Expand füllen.
Also ich geh wie folgt vor. Ich fülle die TreeCtrl mit Daten aus einer Map, allerdings nur die erste Ebene.
Bei allen Elementen die Unterelemente haben, füge ich ein leeres unterelement hinzu, damit das Plus neben dem Eintrag erscheint.
Jetzt möchte ich das die Subitems je nach Bedarf hinzugefügt werden.
D.h. wenn ich dann auf ein expandierbares Item klicke soll er das Dummy-Unterelement löschen und die eigentlichen Elemente hinzufügen.Hat jemand sowas schon gemacht oder gibts da nen Howto für. Bin noch nicht so erfahren mit der MFC.
mfg Oliver
-
du musst die klicks in dem control abfragen und mit dem HitTest schauen ob ein + angeklickt wurde
ich hab hier grad nur ein beispiel wie man abfragt ob die checkbox eines eintrags in einer listview ausgewaehlt wurdevoid ApplicationList::OnLButtonDown(UINT nFlags, CPoint point) { CListCtrl::OnLButtonDown(nFlags, point); UINT flags; int pos = this->HitTest(point, &flags); if((pos != -1) && (flags & LVHT_ONITEM)) { BOOL checked = this->GetCheck(pos); } }du brauchst du im prinzip "nur" ein bissl anpassen
ich glaub MFC selber bietet keine "OnItemExpand" an - bin aber nicht sicher, musste mal in die MSDN schauen
//Edit: ich glaub es gibt doch "OnItemExpanding"
das kannste abfangen, und schon bis du an der stelle wo du weisst das ein item aufgeklappt wurde
-
Du musst einen Nachrichtenhandler für TVN_ITEMEXPANDED einrichten. Dieser wird aufgerufen, wenn ein Knoten auf- oder eingeklappt wird.
-
Ich wollte das mit OnItemexpanding() versuchen, damit die Subitems vor dem aufklappen der Node hinzugefügt werden.
Allerdings weiß ich nicht was ich mit diesem NM_TREEVIEW Struct machen soll. Damit ich davon ausgehend erst den Dummy lösche und dann die Unterelemente hinzufüge.Vielen Dank für eure Hilfe.
-
In dieser Struktur steht doch um welchen Knoten es sich handelt.
BTW: Du musst nicht ein Dummy Item einbauen. Du kanst über cChildren und I_CHILDRENCALLBACK die Anzeige kontrollieren. Du fügst dan bei Bedarf die Items in TVN_ITEMEXPANDING hinzu.
Ansonsten kann Du in diesem Sample gut sehen was man so alles machen kann:
http://www.codeproject.com/KB/cpp/xmltreeview.aspx
-
Hallo zusammen,
hab mit eurer Hilfe es geschafft das die TreeCtrl so funktioniert wie gewünscht.
Vielen Dank für die Hilfe.Jetzt bin ich gerade dabei, noch Icons einzubauen. Hab dafür 32bit BMPs genommen und in eine CImageList geladen.
Wie in folgendem Beispiel beschrieben http://www.codeproject.com/KB/tree/TreeHighIcon.aspx.
Der Hintergrund der Icons ist aber nicht transparent sondern schwarz. Die Hintergrundfarbe wird nicht richtig ersetzt.
Ich entwickle unter Windows 2000, kann das irgendwie damit zusammenhängen? Wenn ich die CImageList auf 16 Farben stelle gehts.
mfg Oliver
-
Die Imageliste von Windows 2000 kann noch keine Bitmaps mit Alphakanal (ILC_COLOR32) verarbeiten. Du müsstest die Bitmaps zusätzlich als 24-bit bereitstellen und dann je nach Bedarf eine Imageliste mit und ohne Alphakanal verwenden.
-
Ahh alles klar ich werds mal versuchen umzusetzen.
Vielen Dank für den Tip.