Bildlaufleisten nachträglich implementieren
-
Kukukk an alle,
Die Szenario : Ich habe eine SDI Anwendung in dessen Client-Bereich
Koordinatensysteme gezeichnet werden.
Diese ist für eine bestimmte Auflösung optimiert (1024*768).
Die Größe des Client-Bereiches soll konstant bleiben.Wenn man also die Auflösung runterschraubt, so brauche ich Bildlaufleisten um alles sehen zu können !!
Ich habe anhand des MFC-Buches von Prosise die Scrollbars nachträglich implementiert, also überall wo CView steht mit CScrollView ersetzt. Natürlich habe ich auch in OnInitialUpdate() SetScrollSizes(MM_TEXT,CSize(1020,674)) gesetzt.
Laut des Buches soll nun alles automatisch funktionieren. Ja, die Leisten funktionieren, der Ansicht wird verschoben,
ABER die NEUZEICHNUNG der Bereiche klappt nicht richtig !! Er zeichnet einfach immer NUR die letzte Zeile neu.Er redet dann noch von OnPrepareDC() den man außerhalb von OnDraw aufrufen soll. ABER WO ??
Muß ich für die "NEUZEICHNUNG der ins Bild rutschende Bereiche" selber den Code schreiben ???
Irgendwie reichen mir die Infos aus dem Buch nicht.
Danke für eueren Hilfe !!
BOLI

-
Da bin ich nochmal...
Ich habe schonmal zumindest festgestellt, daß die vom MFC AppWizard automatisch erzeugte Bildlaufleisten so lange KORREKT arbeiten, bis man den Koordinatenursprung mit SetViewportOrg() selber verschiebt.
Also macht man sich die KORREKTE Ursprungsverschiebung mit dem Befehl SetViewportOrg() KAPUTT.
Es liegt auf jeden fall an der eigenen Ursprungsverschiebung !!
LÖsung habe ich aber noch keine

-
-
Jou da bin ich wieder!
Die Lösung habe ich seit dem gefunden.
MFC sorgt tatsächlich dafür, daß die Rollbalken automatisch funktionieren.
Die Verschiebung des Ursprunges zu der richtigen Stelle nimmt MFC automatisch vor.
Das heißt, solange man den Viewport Ursprung NICHT selber in seinen eigenen Code Verschiebt, so funktioniert alles bestens.Jaaa, und wenn man den Ursprung verschiebt ??
So muß man halt die Position der Rollbalken ermitteln und diesen Wert vom Ursprungsverschiebung subtrahieren.
Dann funktioniert alles wieder bestens.Hier die entsprechende Abschnitte:
CPoint m_EigeneVerschiebung(10,90); //Beispiel
SCROLLINFO m_HScrollInfo;
SCROLLINFO m_VScrollInfo;// Position des Bildlaufbalkens ermitteln
GetScrollInfo(SB_HORZ,&m_HScrollInfo,SIF_ALL);
GetScrollInfo(SB_VERT,&m_VScrollInfo,SIF_ALL);// nTrackPos beinhaltet die Position des Balkens
dc->SetViewportOrg(m_EigeneVerschiebung.x-m_HScrollInfo.nTrackPos,
m_EigeneVerschiebung.y-m_VScrollInfo.nTrackPos);
bolilein 
[ Dieser Beitrag wurde am 23.06.2003 um 12:19 Uhr von bolilein editiert. ]