CListCtrl mit Owner Data -> Absturz

EriFo

Erfahrenes Mitglied
Ich hab ein List Ctrl das in zukunft relativ viele einträge bekommen soll (200~3000)
und da ich mir eh alle Infos zu den Items in einer Liste speicher, hatte ich vor, das List-Ctrl
mit dem Flag LVI_OWNERDATA oder so zu erstellen - hab mir ein MS Tutorial irgendwo aus der MSDN dazu geholt und angefangen. ^^°

Und jetzt stürtzt das ständig ab - unter XP sofort beim Anzeigen und unter Win2000 erst wenn man etwas drinne rumgeklickt hat - aber auch nach einer sehr unterschiedlichen Zeit.

Hat das jemand schonmal gemacht oder kennt einer da noch ein paar Fiesigkeiten die man beachten sollte? ^^°

M.f.G. Erik
 
Kannst du etwas konkreter bezeichnen, was du gemacht hast? Im Zusammenhang mit CListControl (ist das die Klasse, mit der du arbeitest?) fällt mir nur der Style "LVS_OWNERDRAWFIXED" ein, der aber nichts mit der Speicherung von Daten, sondern nur was mi der Darstellung zu tun hat.
 
Kein Problem :-)° mach ich gern.
Also CListCtrl ist die ganz normale Windows Common Controls 32 Klasse für ein Listen Steuerelement.
Und der Stil heist ganz genau "LVS_OWNERDATA". Der bewirkt, dass das Ctrl jedesmal ne nachicht schickt und bestimmte Informationen über das Item haben will: nen Image Index oder den Zeiger zu nem String.

Erstellen tue ich das dann so:

list->CreateEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_NOPARENTNOTIFY | LVS_EX_FULLROWSELECT | WS_EX_CLIENTEDGE | LVS_EX_INFOTIP /* | LVS_EX_HEADERDRAGDROP | LVS_EX_FLATSB*/ ,
WS_CHILDWINDOW | WS_VISIBLE |/* WS_BORDER |*/ LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_ALIGNLEFT | LVS_OWNERDATA, CRect(0,0,100,100), parent, CTRL_ID_FIRST + tab->GetItemCount());

list->ModifyStyleEx( WS_EX_TRANSPARENT, 0, 0 ); //--- remove this window style ---
list->SetExtendedStyle( LVS_EX_FULLROWSELECT ); //--- add this control style ---
 
Hmm, gearbeitet habe ich mit LVS_OWNERDATA noch nicht, daher kann ich auch nichts zu irgendwelchen Hinterhältigkeiten sagen.

Hast du schon mal herausbekommen (Debugger) an welcher Stelle das Programm genau crasht? Evt. kannst du auch versuchen, einen ganz einfachen Handler für die LVN_GETDISPINFO Message verwenden, also z.B. kein Image und nur einen festen Text setzen bzw. (falls du sowas verwendest) Callback-Geschichten für die Item States erst mal außen vor lassen. Vielleicht kannst du dich damit dann etwas näher an das Problem herantasten.
 
Das mit dem festen Text hab ich scon gemacht - das stürtzt in ner DLL ab ComCtr.dll oder so ^^° und da kann ich mir das nciht anschaun - und die Funktionen vorher im Callstack sagen mir nicht viel - kann ich nicht zuordnen wieso des abstürtzt - vielleicht kennst ja auch ein paar gute Tutorials ^^°

M.f.G. Erik
 
Ok - das mit dem Absturz hab ich gefunden - und mir ist nochwas aufgefallen - selbst wenn ein ListCtrl nicht den Style "LVS_OWNERDATA" hah, fragt es jedas mal den Text eines Items nach sobald es keinen hat - also wenn man ihm beim belegen keinen gegeben hat.

Aber komischerweise, ist immer der lParam in der Funktion NULL wenn er mit "OnLvnGetdispinfo(...)" den String nachfragt - das ist aber unschön, da dort ein Zeiger drinne sein sollte, den ich bräuchte ^^°

M.f.G. Erik
 
Zurück