CListCtrl - Nachrichten

Daniel Toplak

Erfahrenes Mitglied
Hallo, kann mir mal jemand erklären, wie ich die Nachricht in einem ListCtrl (Ansicht: Report, VC++ 6.0) abfangen kann, die ausgelöst wird, wenn man die Breite einer Spalte ändert. Also zwischen zwei Spalten klickt und die linke Maustaste hält und dann die Breite verschiebt. Das Problem ist, daß ich in meinem Listcontrol in einem Subitem eine Farbe darstellen will, der Style der Liste ist mit "Gridlines" also so in der Art wie eine Excel-Tabelle. Und dort möchte ich bestimmte Farben in einer "Zelle" darstellen. Im Moment mache ich das über einen Device-Context und dort zeichen ich dann ein Rechteck an gewünschter Stelle mit der entsprechenden Farbe. Aber das Problem dabei ist, daß wenn der Benutzer die Spaltenbreite ändert, auch das Listcontrol neu gezeichnet wird und mein tolles, buntes Rechteck weg ist, bzw. hinter der Liste.
Also wenn jemand weiss, wie ich diese Nachricht rausbringe, oder eine Andere Idee hat, wie ich einzelne Subitems "einfärben" kann der soll mir bitte Helfen.

Dankem Gruss Homer
 
Danke für die zahlreichen Antworten *g*
Mach nix, hab das ganze jetzt etwas anders gelöst. Und zwar mit einem Timer, der alle 500 ms OnPaint() aufruft. Ich weiß ist zwar nicht so toll gemacht, aber ich habe keine andere Möglichkeit gefunden. Sollte doch noch jemand eine Idee zur Lösung haben, dann werde ich das sofort ändern und testen.

Gruss Homer
 
Am einfachsten (und besten) ist da wohl eine owner-drawn List-Box... wenn du was Excel-ähnliches machen willst wirst du über kurz oder lang eh nicht darum herumkommen :)
 
Danke, aber ich dachte das wäre irgendwie einfacher zu lösen. Naja jedenfalls funktioniert es mit dem Timer wunderbar.
Was Excel-ähnliches möchte ich nicht machen. In die Liste sollen einfach nur Style-Sheets aufgenommen werden. Der inhalt der Liste wird dann umgesetzt und in eine .css Datei umgewandelt. Die Auswahl der Schriftattribute erfolgt über einen CFontDialog und als Feature will ich eben die Schriftfare nicht als langweiliges Wort in die Liste übernehemen, sondern als gezeichnetes Rechteck in der jeweiligen Farbe. Gezeichnet wird auf einen Device Context der auf dem Listcontrol basiert.
Das ganze Projekt ist ein eBook-Generator, der anhand von eingelesenen .txt Dateien, die mit selbstdefienierten Formatierungs-Tags formatiert sind, dann das Ganze umwandelt in .htm Dateien und das Frameset und die Menüsteuerung über Javascript dazu erstellt.

Gruss Homer
 
Owner-Drawn List-Boxes wären aber genau das was du suchst :).
Und schwieriger ist es vermutlich das ganze mit deinem OnPaint() hinzukriegen, da du rausfinden musst wo die Zelle genau ist, ob sie vielleicht nur tw. sichtbar ist usw.
 
Also wie schon gesagt, das mit dem Timer funktioniert. Das herausbekommen wo die Zellen sind ist kein Porblem, denn mit der Funktion GetSubItemRect() bekommt man das CRect zu der angegebenen Zelle.

Gruss Homer
 

Neue Beiträge

Zurück