TreeControl in ListControl vereinen



  • Heiho,
    Ich habe z.Zt. ein bestimmtes Ziel vor Augen,
    und zwar,
    ein ListCtrl mit einer verschiedenen Anzahl von Headern,
    in letzten Header soll ein TreeCtrl angezeigt werden, mit demselben verhalten wie ein Tree, nur das es „in“ der ListCtrl ist, d.h. auch Linien sowie Hintergrundfarben des ListCtrl.
    Das Tree soll auch Linien und Checkboxen haben, die Liste nicht.

    Mein Bisheriger Ansatz war:
    - Erstellung eines ListCtrl welches nur als Header dient,
    - Ein ListCtrl im ReportStyle aber ohne Header links drunter so breit wie die Columns bis auf das letzte,
    - Im letzten ein Tree anzeigen,
    - Höhe der Items im Tree setzen nach Zeilenhöhe der Liste,
    - Beim bewegen der Columns werden die Positionen und Größen untereinander angepasst,
    - Das ListCtrl wird selber gezeichnet um den Hintergrund zu ändern
    Probleme dabei:
    - Ich kann den Hintergrund der Tree nicht zeilenweise zeichnen ohne das ich das Zeichnen der Checkboxen, sowie Linien auch mit übernehmen müsste (Wobei ich da nicht wüsste wie),
    - Unter Windows XP ist das ListCtrl für den Header nicht sichtbar {Ich weiß noch nicht warum, unter Vista geht’s}

    -----------
    Meine nächste Idee währe
    - Ein ListCtrl erstellen
    - In der letzten Spalte ein Tree selber zeichnen
    Problem dabei:
    - Wie kann ich die Funktionen des Tree‘s simulieren

    -----------
    Oder:
    - Ein komplett eigenes Control erstellen
    Problem dabei:
    - Habe ich zuvor noch nie gemacht
    - Wie kann ich ein verhalten wie in einer ListCtrl und TreeCtrl simulieren

    Währe nett wenn ich ein paar Ideen, Ratschläge oder Hinweise bekomme wie doof ich mich doch anstelle #gg

    Gruß
    Da Evil



  • Hallo Mr Evil,

    das einfachste wird sein du nimmst ein fertiges Control von Codeproject.com



  • Das hatte ich auch schon in Erwägung gezogen.
    Das Problem war, ich habe kein Control bei mir zum laufen bekommen, und selbst wenn war bei allen der Baum immer in der Ersten spalte, ich möchte es aber in der Letzten.

    Zudem hat mich dahin gehend der Ehrgeiz gepackt so etwas selber zu machen, mir fehlen nur die ersten Ansätze wie ich das Problem am besten angehe.


  • Mod

    In der letzten Spalte? Das macht doch aus UI Sicht gar keinen Sinn.
    Was bezweckst Du damit?

    Ich verwende mit viel Erfolg dieses Control (etwas umgeschrieben):
    http://www.codeproject.com/KB/combobox/supergrid.aspx



  • Doch es macht schon Sinn, lass es mich kurz erläutern:

    Es werden voraussichtlich bis zu 30 verschiedenen Informationen angezeigt, je nachdem was man sehen möchte,
    Die Informationen kann man von „Unwichtig“ bis „Wichtig“ einteilen,
    Die „Wichtigen“ Informationen sollen weiter vorn stehen, und je nach Grad weiter hinten.

    In der letzten Spalte soll das Tree, da dort das „Unwichtigste“ rein gehört, welches man aber nie ausblendet.

    Ich habe mir gerade mal das Control angeschaut, sieht schon vielversprechend aus.
    Ich habe es bei mir noch nicht zum Laufen bekommen, da wollte ich fragen
    - Gibt’s da eine mglichkeit wie du mir Helfen kannst?
    - Kann man in diesem Control das Tree auch in einer anderen Spalte als die Erste anzeigen lassen? Wenn nicht brauch ich es gar nicht weiter anschauen…

    Danke für die Mühe
    Da Evil



  • So wie ich das sehe wird in dem Control alles Mögliche selber neu gezeichnet, auch die Checkboxen und Linien.
    Das ist eventuell ein Ansatz den ich verfolgen kann, dass ich ein ListCtrl nehme und dort ebenfalls alles selber zeichne…


  • Mod

    Was soll ich das helfen? Das Ding funktioniert doch out of the box?
    Ich habe das Ding auf NM_CUSTOMDRAW umgestrickt. Der Rest ist ziemlich selbsterkärend.

    Selbst, wenn das unwichtige hinten steht, wurde ich dieses Unwichtige in den Baum packen und bei Bedarf natürlich vorne entfalten lassen!

    Die Unwichtigen daten können sicherlich hinten stehen, aber das entfalten würde ich immer über die erste Spalte regeln.



  • Das ist Ansichtssache, Ich habe schon ein Tool gesehen wo das auch so war, kann mich nur nicht
    mehr daran erinnern was das war.
    Ich fand das überaus praktisch, und für meine Zwecke ist es auch genau richtig.

    Das es selbst erklärend ist kann ich nicht bestätigen.

    Das habe ich versucht:
    - Neues MFC Projekt erstellt mit Doc/View
    - Das „supergridctrl.h“ und „supergridctrl.cpp“ kopiert
    - In der View eine Variable von „CSuperGridCtrl“ erstellt
    - „Create“ wie in der Demo aufgerufen und dieses „Init“
    - Festgestellt das das „Init“ unbekannt ist und in diesem „MySuperGrid“ Deklariert und Definiert wurde
    - „MySuperGrid.h“ und „MySuperGrid.cpp“ kopiert
    - Variable von „CSuperGridCtrl“ auf „CMySuperGrid“ geändert
    - Gebaut und Tausende von Fehlern erhalten welche ich nicht alle lösen kann.

    Mir ist bewusst dass ich „MySuperGrid“ eventuell gar nicht brauche, nur dann weiß ich nicht wie ich
    das Grid zu erstellen habe, des Weiteren habe ich keine Möglichkeit gesehen das Tree in einer
    bestimmten Spalte anzeigen zu lassen.

    Was ich noch erwähnen wollte, das dass Tree am Ende landen soll hat auch den guten Vorteil das es dann
    meistens in der Mitte des Monitors steht, das ist auch beabsichtigt.

    // Edit because of doofe Schreibweise


Anmelden zum Antworten