Horizontale scroll position beibehalten



  • Heiho,

    es geht darum, ich habe eine CListCtrl welche viele spalten hat und man standardmaessig bereits nach rechts scrollen kann
    wenn ich aber nun nach rechts scrolle, und den content der liste in irgendeiner weise aender, springt es wieder ganz nach links
    wenn es vertikal waere, wuerde ich mit SetTopIndex die position wiederherstellen
    aber horizontal ?

    jemand ne loesung fuer mich?



  • CScrollBar -> GetScrollPos & SetScrollPos.

    Ist auch ein Beispiel in der MSDN( mit CWnd )

    grüssle 🙂



  • aaaaaaaah, genau, stimmt, macht sinn, danke {=



  • oh, ich merk grad, funktioniert zwar, die scrollbar des listctrl wird entsprechend verschoben, aber nicht der inhalt, sobald ich einmal kurz auf die bar klicke, springt diese wieder zum anfang



  • keiner eine idee warum SetScrollPos nicht das macht was es soll ?

    void func()
    {
        CListCtrl *list = static_cast<CListCtrl *>(this->GetDlgItem(IDC_LIST));
        int iHoriz = list->GetScrollPos(SB_HORZ);
        int iVerti = list->GetScrollPos(SB_VERT);
        /* - do something with the content (also clearing the list and refill) - */
        list->SetScrollPos(SB_HORZ, iHoriz);
        list->SetScrollPos(SB_VERT, iVerti);
    }
    

    man scrollt, dann wird diese funktion aufgerufen, und die liste ist selber wieder am anfang, nur die scrollbar wird auf die alte position gesetzt, aber sobald man diese anklickt, springt sie ebenfalls zum anfang /=

    // Edit

    ich glaube ich hab etwas

    http://www.codeguru.com/forum/showthread.php?t=193963

    SetScroll und GetScroll wird von CListCtrl gar nicht unterstuetzt - ma schaun wie Scroll() funzt


  • Mod

    Wenn Du die Rollbalken veränderst bekommt doch das Control davon gar nichts mit!
    Es wird doch gar keine Nachricht erzeugt.

    Sende mal WM_VSCROLL/WM_HSCROOL mit SB_THUMBPOSITION und dem Wert dirket an das CListCtrl!

    Aber Achtung SetScrollPos ist nur 32bit!



  • brauch ich nicht, habs so hinbekommen:

    void func()
    {
        CListCtrl *list = static_cast<CListCtrl *>(this->GetDlgItem(IDC_LIST));
        int iHoriz = list->GetScrollPos(SB_HORZ);
        int iVerti = list->GetScrollPos(SB_VERT);
        /* - do something with the content (also clearing the list and refill) - */
        list->Scroll(CSize(iHoriz, iVerti));
    }
    

Anmelden zum Antworten