OnItemDraw und LPDRAWITEMSTRUCT
-
Hallo,
MFC macht sich bei mir wieder selbständig und entwickelt ein äußerst sonderbares Verhalten...;)
Also, ich will von einer Klasse, die ich von CListCtrl abgeleitet hab und die Methode OnItemDraw() überschreibt, eben diese Methode OnItemDraw() aufrufen.
Bisher habe ich das immer so aufgerufen:
myListCtrl.SendMessage(WM_DRAWITEM, 0, 0);In OnItemDraw() hab ich dann einfach bruteforce-mäßig alle Items neu gezeichnet, indem ich über alle Items iteriert habe...
Meine Idee war nun, OnItemDraw nur noch ein bestimmtes Item neu zu zeichnen - dafür wollte dann die Struktur LPDRAWITEMSTRUCT verwenden:
LPDRAWITEMSTRUCT details;
details->itemID = 3; //zeichne das 3.Item neu
myListCtrl.SendMessage(WM_DRAWITEM, 0, (LPARAM) details);Leider kommt es dann immer zu Abstürzen, obwohl laut Debugger die Struktur richtig übergeben wurde. Außerdem rufe ich in meiner überschriebenen OnDrawItem()-Methode nicht die Methode der Vaterklasse auf.
Es kommt noch besser - allein der Umstand, dass ich die Struktur LPDRAWITEMSTRUCT definiere und auf sie zugreife, bringt schon einen Absturz...z.b. bringt der folgende Code bei mir einen Absturz:
LPDRAWITEMSTRUCT details;
details->itemID = 3; //zeichne das 3.Item neu
myListCtrl.SendMessage(WM_DRAWITEM, 0, 0); //Absturz, obwohl details
nicht benutzt************************************************************************
Weiß jemand, wieso ich da solche Abstürze bekomme??...bzw.....weiß jemand, wie man diese Methode richtig verwendet???....
-
Warum verwendest Du nicht "InvalidateRect" !?
-
Jochen Kalmbach schrieb:
Warum verwendest Du nicht "InvalidateRect" !?
Hi Jochen,
weiss nicht - ich kenn mich noch nicht soo gut aus mit MFC...ich brauche eigentlich nur ne Möglichkeit, dass das Programm in die OnItemDraw von meiner ListCtrl springt, weil ich dort u.a. die Items z.b. in etwas größerer Schrift und so zeichnen muß.....(das is bestimmt der nächste Forumeintrag hier..;)...)...
..und es ist wichtig, dass er nicht alle Items neu zeichnet, sondern nur dasjenige, welches sich verändert hat....würde das mit InvalidateRect() alles gehen???...Rufe ich die Methode dann auf der ListCtrl oder auf dem betreffendem Item auf???...
Bis dann...