Listview im Report-Style, Zeilen mit Umbruch darstellen
-
Hallo Leute,
in meinem Reportstyle Listview möchte ich bei einigen Zeilen bei denen die Items einen zu langen Text aufweisen, mit Zeilenumbrüchen arbeiten. Und ich möchte das Ganze mit einem Listview realisieren und keine Listbox benutzen.
Ich weiss, dass ich hierfür NM_CUSTOMDRAW behandeln muss. Das hab ich soweit hinbekommen. Ich behandele CDDS_PREPAINT, CDDS_ITEMPREPAINT und (CDDS_ITEMPREPAINT | CDDS_SUBITEM) und habe die Darstellung erstmal so ausgegeben, dass es aussieht als würde das Programm die Items selber zeichnen.
Wenn ich den Text nun mit DrawText und DT_WORDBREAK ausgebe, sehe ich zwar das obere Stück Teil des umgebrochenen Textes, aber die Zeilenhöhe ist noch die gleiche geblieben. Was muss ich tun damit's passt?
-
Du mußt auf die Nachricht WM_MEASUREITEM reagieren.
-
Ja ich habe mittlerweile auch gemerkt, dass ich mit Customdraw irgendwie nicht weiterkomme.
Hab's jetzt mit Ownerdraw probiert, da wird auch WM_MEASUREITEM und WM_DRAWITEM geschickt und von mir behandelt. Dummerweise ist es beim Listview mit Ownerdraw wohl so, dass WM_MEASUREITEM nur für den ersten Listview Item aufgerufen wird. Da kann mann dann die Höhe der Zeile setzen, die ist dann aber für alle anderen Zeilen auch gleich gesetzt.
Also ich bin mir sicher, dass ich schon Listviews mit unterschiedlicher Zeilenhöhe gesehen habe.
Hat jemand einen Idee?
-
Unterschiedliche Zeilenhöhen bekommst Du nicht mit einem Listview Control.
Eine ListBox kann dass. Dann musst du auch für Ownerdraw sorgen.
Es gibt auch eigenstänige bereits fertige MFC Contzrols. Mit denen kann man auch ohne viel Aufwand reine Windows API Controls ableiten.
Siehe Codeproject.
-
Danke Martin für den Hinweis. Ich werd mal schauen wie ich jetzt weiter vorgehe. Die Bedienung eines Listviews mit Spaltenheader ist für mich eigentlich das entscheidende Kriterium für einen Listview. Das könnte ich theortisch auch mit eine Listview erreichen, dessen Spaltenkopf ich über eine Ownerdraw Listbox setzte.
Ich bin noch unschlüssig, z.Z messe ich die Zeile nach dem größten Eintrag aus und setzt eben alle Zeilenhöhen auf die große Größe. Nicht schick aber funktional.