ListBox scrollt nicht horizontal

jokey2

Erfahrenes Mitglied
Hallo Leute!
Ich habe eine ListBox, in der ich Ausgaben von Programmen anzeigen will. Diese Ausgaben füge ich zeilenweise mit AddString(...) zur ListBox hinzu. Allerdings sind manche Zeilen länger als die ListBox. Obwohl ich im ResourceEditor bei den Listenfeld-Eigenschaften 'Horiz. Bildlauf' aktiviert habe, erscheint in diesem Fall trotzdem kein Scrollbalken. Wenn ich das Häkchen bei 'kein Bildlauf deaktivieren' setze, ist der Scrollbalken zwar da, aber immer inaktiv. Scheinbar erkennt die ListBox nicht, wenn die angezeigte Zeile länger ist. Ist das ein Bug im VS oder habe ich was falsch eingestellt und was muß ich tun, damit ich horizontal scrollen kann? Beim vertikalen Scrollen klappt alles.

Grüße, jokey2
 
Das ist ein fieser Trick: Die ListBox kann nur horizontal scrollen, wenn sie weiss, wie breit ein Item ist. Das kannst du mit SetColumnWidth (MFC) oder mit LB_SETCOLUMNWIDTH (Win32) machen.
 
Na, das ist ja wirklich fies! Heißt das, ich muß die Breite immer auf die Länge der längsten Zeile setzen?
 
Hab's ausprobiert, klappt aber leider nicht. SetColumnWidth erfordert eine mehrspaltige ListBox, ich will aber nur eine haben. Ich habe sie mal zum Testen auf mehrspaltig gesetzt und eine Spaltenbreite gesetzt, dann hatte ich einen horizontalen Scrollbalken, der allerdings seitenweise vertikal scrollte und der vertikale Scrollbalken war verschwunden. Klingt komisch, ist aber so.
Ich will doch nur zeilenweise Text ausgeben, und zwar so, daß der Anwender auch den kompletten Text lesen kann. Das muß doch möglich sein, oder muß ich da auf CListCtrl umsteigen?
 
Hallo zusammen! Ich habe das selbe Problem gehabt! Habe es ohne die Klassen von Codeguru gelöst! Die List Box ist nicht zu doof dafür!

Man muss ersten diese Eigenschaften bei dem Listenfeld einstellen:

Rand, Sortieren, Benachrichten, Horizontaler und Vertikaler Bildlauf

Im Code muss man nun noch folgendes machen:

Es muss sich einfach die maximale Länge des Stringes gemerkt werden der in die Listbox geschrieben wird.

Wenn alle einträge gemacht wurden einfach folgende Nachricht senden:

Code:
SendMessage( HandleOf( hwnd, DID_LISTE ), LB_SETHORIZONTALEXTENT, (UINT)(iMaxLength*textBreite*1.5), 0 );
 

Neue Beiträge

Zurück