Repaint beim Scrollen eines CTreeCtrl geht nicht
-
Ich möchte mit eigenen Buttons durch einen CTreeCtrl scrollen.
BOOL FooTreeCtrl::ScrollRight() { int pos = this->GetScrollPos(SB_HORZ); int limit = this->GetScrollLimit(SB_HORZ); if (pos < (limit - 5)) { this->ScrollWindow(-5,0); this->UpdateWindow(); this->SetScrollPos(SB_HORZ,pos + 5, TRUE); } return TRUE; }oder so:
BOOL FooTreeCtrl::ScrollRight() { RECT treeRect; this->GetWindowRect(&treeRect); treeRect.right += 100; int pos = this->GetScrollPos(SB_HORZ); int limit = this->GetScrollLimit(SB_HORZ); if (pos < (limit - 5)) { this->ScrollWindowEx(-5,0,(CONST RECT *) NULL,(CONST RECT *) NULL, NULL,(LPRECT) NULL,SW_INVALIDATE); this->UpdateWindow(); this->SetScrollPos(SB_HORZ,pos + 5, TRUE); } return TRUE; }Ergebnis: Es funktioniert fast wie gewünscht, nur der Inhalt des CTreeCtrl der zu Beginn nicht in das Fenster passt (damit meine ich den Bereich rechts, der durch scrollen errreicht werden soll), wird nicht gezeichnet. Ich habe auch schon in ScrollWindow den Clipping Bereich vergrößert(+100).
Wenn ich nach links scrolle, funktioniert dies wie ein Radiergummi -> was aus dem Fenster hinaus gescrollt, wird weg radiert.Den Weg über WM_HSCROLL & WM_VSCROLL, kann ich nicht gehen, da die ScrollBars vom CTreeCtrl deaktiviert sein sollen und nur zur Anzeige verwendet werden.
WM_HSCROLL & WM_VSCROLL fange ich als RoundAbout wegen Inkompatibilität zwischen MFC & WinCE ab.
Ich würde mich sehr über weitere Anregungen freuen

Gruß
ThomasE
-
Wenn Du UpdateWindow zuerst ausführst, weiß Dein ListControl nichts von den neuen Positionen. Es wird praktisch gemäß der alten Position ein Update auf dem Fenster durchgeführt.
Führe erst SetScrollPos aus.
-
Hallo Martin,
freut mich wieder von Dir zu hören.
Leider hatte ich damit keinen Erfolg.
Hab auch noch bisl rum probiert, aber keine neuen Erkenntnisse.Trotzdem Danke
Gruß
ThomasE
-
Was ist, wenn Du das Scroll ausführst und anschließend SetScrollPosition ausführst und nichts weiter.
Wird denn nun überhaupt wieder korrekt angezeigt?
Das Du Dich in grenzwertigem Bereich befindest ist klar. Du verschiebst Fensterinhalt ohne, dass dies das Control weiß!
Bist Du Dir sicher, dass im horizontalen Scrollbat in Pixeln gerechnet wird?