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
-
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)); }