[ListView] vertikalen Scrollbalken erzwingen



  • N'Abend alle zusammen.
    Gibt es eine Möglichkeit einen vertikalen Scrollbalken in einem ListView zu erzwingen? In Edit-Controls geht das, aber ich habe es noch nicht geschafft es auch in ListViews hinzubekommen. Mit WS_VSCROLL geht es nicht das habe ich bereits versucht, aber vllt. hat ja jemand noch eine Idee oder weiß es gar. Das ist auch relativ wichtig, weil ich mein ListView zeilenmäßig eingefärbt habe, also ansonsten immer ein hässlicher Rand an der Stelle des Scrollbalken besteht. Ich würde die Columns ja größer machen, aber wenn dann mehr Einträge im ListView wären als von der Größe her anzeigbar, dann würde unten auch immernoch ein hässlicher, horizontaler Balken enstehen und das will ich nicht. So, viel Gerede um wenig Kontext.

    DIV Ominion


  • Mod

    Nein! und Ja...

    Das wegblenden und ausblenden von Rollbalken in List Views ist eine Sache für sich.

    Es geht durch den Aufruf von

    pWnd->ShowScrollBar (SB_VERT, TRUE);
    pWnd->ModifyStyle (WS_VSCROLL, WS_VSCROLL, SWP_DRAWFRAME);

    Alerdings kommt das Listview bei Änderungen gerne auf die Idee den Rollbalken wieder zu verstekcen. Das führt u.U. zu extermer Flackerei, je nachdem wie Deine Anwendung aussieht.

    Ich würde das dringend vermeiden!

    Das Einfärben des Hintergrundes dieser Bereiche kannst Du in WM_ERASEBKGND erledigen. Ist IMHO besser.



  • Das Einfärben des gesamten Bereiches schon, aber ich habe die Farben im Wechsel vergeben, also 1,3,5,... usw. eine Farbe und 2,4,6... usw. eine andere Farbe. Ich werde das andere mal ausprobieren und dann entscheiden ob ichs verwende. Danke für die Antwort.

    Mfg Ominion

    EDIT: hat leider nicht funktioniert, was wahrscheinlich daran liegt, dass dein Beispiel aus der MFC stammt (?). ShowSrollBar gibt es auch in reiner WinAPI, aber ModifyStyle nicht.



  • Ich denke ModifyStyle kannst du dir leicht nachbauen mit GetWindowLong ( die alten Styles holen) und SetWindowLong ( den neuen Style zu den alten hinzu setzen)!

    schirrmie



  • Das schon, allerdings brauche ich das ja eigentlich gar nicht, wenn ich schon beim Erstellen des Fensters WS_VSCROLL mit angegeben habe, oder? Zumindest habe ich das gemacht, und es hat nichts geholfen (WS_VSCROLL wegzulassen hat aber auch nicht geholfen)

    Mfg Ominion



  • Naja, nachdem keiner scheinbar mehr eine Idee hat: Ist es vllt. möglich, den horizontalen scrollbalken komplett auszublenden? ShowScrollBar geht leider auch nicht...

    ShowScrollBar (hClientListView, SB_HORZ, false);
    dwStyle = GetWindowLong (hClientListView, GWL_STYLE);
    SetWindowLong (hClientListView, GWL_STYLE, dwStyle | ~WS_HSCROLL);
    

    allerdings hat er mir dan aus meinem Listview, etwas ganz komisches gemacht: ListView (?)

    Mfg Ominion


  • Mod

    Ominion schrieb:

    ShowScrollBar (hClientListView, SB_HORZ, false);
    dwStyle = GetWindowLong (hClientListView, GWL_STYLE);
    SetWindowLong (hClientListView, GWL_STYLE, dwStyle | ~WS_HSCROLL);
    

    allerdings hat er mir dan aus meinem Listview, etwas ganz komisches gemacht: ListView (?)

    Wundert mich gar nicht. Das setzt ja alle Bits bis auf WS_HSCROLL!
    Muss sein:

    SetWindowLong (hClientListView, GWL_STYLE, dwStyle & ~WS_HSCROLL);
    


  • ups...^^ ok wieder was gelernt...funktioniert aber trotzdem nicht...mir drängt sich natürlich die frage auf, ob das überhaupt irgendwie geht...

    Mfg Ominion


  • Mod

    Wann machst Du das?
    Nachdem alle Items eingesetzt wurden oder vorher?

    Das Problem ist, dass das List View immer wieder auf die Idee kommt den Scrollbar einzublenden.

    Und ja: Es geht. Mit horizontalen Rollbalken mache ich das immer wieder...



  • ich mache das bevor ich die Items einblende, und habe es gerad auch mal danach probiert, hat aber auch nicht geklappt...

    ich löse die geschichte jetzt aber anders, in dem ich einfach über EnableScrollBar die Pfeile der horizontalen Scrollbar ausblende...

    Falls jemand doch noch eine Idee haben sollte, bin ich nicht abgeneigt meine Lösung gegen eine andere zu tauschen 🙂

    Mfg Ominion


  • Mod

    Ominion schrieb:

    ich löse die geschichte jetzt aber anders, in dem ich einfach über EnableScrollBar die Pfeile der horizontalen Scrollbar ausblende...

    Verstehe ich nicht. ch habe doch geschrieben DU musst beide Methoden verwenden. Es gibt Fällt wo das Ändern des Stiles nicht reicht und umgekehrt.



  • ?? wie beide methoden? ShowScrollBar und das selbstgebastelte ModifyStyle (o.ä)?

    Mfg Ominion

    EDIT:

    ShowScrollBar (hClientListView, SB_VERT, true);
    dwStyle = GetWindowLong (hClientListView, GWL_STYLE);
    SetWindowLong (hClientListView, GWL_STYLE, dwStyle & ~WS_VSCROLL);
    

    so zeigt er mir anstatt des balkens einen streifen an. sobald genug items zum scrollen drin sind, ist der balken aber da...


  • Mod

    Der Bereich wird nicht neu gezeichnet...
    Ist der Streifen auch da, wenn Du mit einem Invalidate das neuzeichnen erzwingst?

    Ich habe schon geschrieben, dass der Balken automatisch wieder eingeblendet wird, wenn das List View neue Items bekommt. Das ist eben sein Verhalten...



  • also mit dem erscheinen war anders gemeint, ist aber auch irrelevant. mit dem InavlidateRect probiere ich gleich mal, aber uss erst neu booten, da die Sortierfunktion mir gerade alles zerschoßen hat...

    Mfg Ominion



  • habe das jetzt probiert, hat aber auch nichts gebracht...dieser Streifen ist immernoch da. Also der Streifen ist von der Größe des Scrollbalkens, sieht bloß eben aus wie ein Static feld, was da rein gepappt wurde...so eine Art Platzhalter würde ich behaupten

    Mfg Ominion


Anmelden zum Antworten