Probleme mit CListCtrl

jokey2

Erfahrenes Mitglied
Hallo Gemeinde!

Ich bin dabei, ein ListControl (Report) zu erstellen, das in den Zellen Controls enthalten kann. Das klappt sogar halbwegs, bin ja auch noch nicht fertig. Das Problem, das ich habe ist, daß plötzlich die Linien in der ListControl nicht mehr sichtbar sind. Und das nur, nachdem ich das Projekt aus dem Arbeitsbereich gezogen habe und ihm einen eigenen gegeben habe.
Kann mir evtl. jemand sagen, was da los ist? Gibt es da einen besonderen Stil, der die Linien zeichnet? Wie gesagt, erst waren sie noch da, dann habe ich das Projekt in einen eigenen Arbeitsbereich geschoben, dann waren sie weg, die Linien. Ich bin nicht nur Linien- sondern auch ratlos! Und froh über jeden Hinweis zur Ergreifung des Schuldigen.

P.S.: Vielleicht kennt ja auch jemand ein fertiges Control dieser Art. Meines habe ich auf der Basis eines CodeGuru-Projektes gemacht. Das hat menen Anforderungen aber nicht genügt, daher mache ich mir gerade die Arbeit. Das hat aber noch einige Stolperstricke.
 
Für die Linien ist der Style LVS_EX_GRIDLINES zuständig. Du musst das Control dann mit CreateEx() erzeugen, weil es ein Extended-Style ist.
Falls du mit dem Dialog-Designer gearbeitet hast, sollte sich der Style in den Eigenschaften einstellen lassen.
 
Meines Wissens nach sind beim CListControl die LVS_EX-Styles keine "normalen" extended Styles sondern müssen nachträglich über SetExtendedStyle (bzw. LVM_SETEXTENDEDLISTVIEWSTYLE ) gesetzt werden.
 
Ja, da hast du recht Endurion. Man müsste das also z.B. so machen:
Code:
m_ListCtrl.SetExtendedStyle(
    m_ListCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES );
 
Nachdem Eure Tips leider nichts bewirkt haben, habe ich das Problem jetzt so gelöst, daß ich das Projekt neu aufgesetzt, die Klasse neu erzeugt und den Code von der alten Datei in die neue kokpiert habe. Jetzt sind die Linien wieder da. Nur die Message-Funkrionen (OnXYZ(...)) habe ich weggelassen. Da lag es dann wohl irgendwo drin.
Trotzdem vielen Dank für Eure Mühe!

Ich habe allerdings noch mehr Probleme mit meinem Control, aber erst mal etwas Erklärung:
Das Control funktioniert folgendermaßen:
Die originalen InserColumn(..) - Funktionen habe ich protected gemacht und neue InsertColumn - Funktionen geschrieben, denen als erster Parameter noch der Typ des darzustellenden Controls übergeben wird (EDITBOX, COMBOBOX, LISTBOX, CHECKBOX, BUTTON, NONE). Diese ruft natürlich die ursprüngliche InserColumn - Funktion auf und speichert den Controltyp für diese Spalte in einer Liste.
Die InsertItem - Funktionen habe ich überschrieben. Beim Aufruf wird jetzt die InsertItem - Funktion der Basisklasse aufgerufen und dann anhand der Typliste der Spalten eine Liste mit Controldeskriptoren erzeugt. Jeder Controldeskriptor hat einen CWnd-Pointer, das zugehörige Fenster wird erzeugt und dem Pointer zugewiesen. Weiterhin hat der Deskriptor noch die Information über den Typ sowie den SubItem - Index. Jetzt habe ich also eine Liste mit erzeugten Control-Fenstern pro ListCtrl-Item.
So weit, so gut, es wird auch (in etwa ;-)) so angezeigt, wie ich mir das vorstelle: Jede Item-Zeile hat in den SubItems die entsprechenden Controls.
Meine erste Frage ist nun: Wann soll ich die Controls neuzeichnen. Gibt es da eine Nachricht, auf die ich reagieren kann? Ich habe es mit DrawItem probiert, das ist aber leider nicht das, was ich brauche, da das z.B. beim Scrollen nur für die neu hinzugekommenen Item aufgerufen wird und nicht für alle. Ich muß aber alle Controls updaten, und das möglichst ohne Flackern.
 
Zurück