ScrollBar!!
-
SDI mit CFormView
-
Und wie kann ich der Scrollbar einen eventhandler zufügen?
Wie heisst dieses ScrollbarObjekt? Ich habe es ja nicht selber erstellt.
-
Afaik bekommt nicht der Scrollbar diesen Event, sondern das übergeordnete Fenster (also dein View-Objekt).
-
Also immer wenn ich scrolle soll CFormView::GetScrollBarInfo aufgerufen werden.
Also dachte ich, ich muss der Scrollbar ein eventhandler zufügen, oder wie soll das sonst funktionieren??
-
Ich habe nun folgendes hinzugefügt, doch leider fehlt mir ein Parameter:
void CParView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { CFormView::GetScrollInfo(SB_VERT, ??????, SIF_ALL); CFormView::OnVScroll(nSBCode, nPos, pScrollBar); } typedef struct tagSCROLLINFO { UINT cbSize; UINT fMask; int nMin; int nMax; UINT nPage; int nPos; int nTrackPos; } SCROLLINFO, *LPSCROLLINFO; typedef SCROLLINFO CONST *LPCSCROLLINFO;Wie funktioniert das mit dem Pointer auf LPSCROLLINFO??
-
Erstmal brauchst du die Struktur nicht von Hand zu definieren - die steht schon so in den WinAPI-Headern.
Und zweitens mußt du dir stattdessen eine Variable von dem Typ anlegen:
void CParView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { SCROLLINFO si; CFormView::GetScrollInfo(SB_VERT, &si, SIF_ALL); TRACE("Scroll to Position %d\n",si.nPos); ... CFormView::OnVScroll(nSBCode, nPos, pScrollBar); }
-
maRKus23 schrieb:
SDI mit CFormView
Nochmal grundsätzlich: Was ist Dein Problem? SDI mit CFormView macht alles automatisch. Was baruchst Du?
-
Ich brauchte eine Methode die mir die Anzahl der gerollten Pixel liefert.
Ich habe das dann so gemacht:void CParView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { SCROLLINFO scrollinfo; CFormView::GetScrollInfo(SB_VERT,&scrollinfo, SIF_ALL); CFormView::OnVScroll(nSBCode, nPos, pScrollBar); }wenn ich nähmlich scrolle und dann die Fenster neuzeichnen lasse, befinden sie sich nicht mehr an der Stelle an der sie sein solten, da die Client-area verschoben wurde.
Also mach ich das so:
for(j=0; j<5; j++)pointWindowPos[0][j].SetPoint(0, iYPos[0][j] - scrollinfo.nTrackPos);
-
Das neuzeichnenklappt also ncith? Wie machst Du das?
IMHO sorgt auch hier CScrollView für die korrekte Behandlung und Einstellung des DCs mit OnPrepareDC.
Du musst in Deinem WM_PAINT Handler hier entsprechend reagieren. Nicht wenn gerollt wird.
-
So wie ich es gemacht habe klappt jetzt alles

-
Was heißt IMHO?
-
http://de.wikipedia.org/wiki/Liste_der_Abkürzungen_(Netzjargon)
IMHO =
Meistens: „In My Humble Opinion“ - „Meiner unmaßgeblichen/bescheidenen Meinung nach“,
Seltener: „In My Honest Opinion“ - „Meiner aufrichtigen Überzeugung nach“