Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi zusammen!

Ich poste hier jetzt einfach mal rein, in der Hoffnung das hier auch ein paar VC++ PhreakZ dabei sind :)

Main Problem:

Ich versuch ein Bild zu scrollen, aber das gelingt mir nicht wirklich so wie ich das gern hätte.Wenn ich zB nach unten scrolle, wir automatisch mit nach rechts gescrollt, umgekehrt genauso. Scrolle ich nach oben, wird automatisch nach links gescrollt. :eek:

So hab ich das ganze implementiert:

void CPCCView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(SB_HORZ, &si, si.fMask);

hscroll = si.nPos;

switch(nSBCode)
{
case SB_PAGERIGHT:
si.nPos += si.nPage;
break;
case SB_LINERIGHT:
si.nPos += 2;
break;
case SB_PAGELEFT:
si.nPos -= si.nPage;
break;
case SB_LINELEFT:
si.nPos -= 2;
break;
case SB_THUMBPOSITION:
si.nPos = si.nTrackPos;
break;
}

si.fMask = SIF_POS;
SetScrollInfo(SB_HORZ, &si, TRUE);
GetScrollInfo(SB_HORZ, &si);

//Bei Positionsänderung: Fenster horizontal rollen
if(si.nPos != hscroll)
{
ScrollWindow(m_Image->m_Height * (hscroll - si.nPos), 0, NULL, NULL);
}

CView::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CPCCView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(SB_VERT, &si, si.fMask);

vscroll = si.nPos;

switch(nSBCode)
{
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
case SB_LINEDOWN:
si.nPos += 2;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_LINEUP:
si.nPos -= 2;
break;
case SB_TOP:
si.nPos = si.nMin;
break;
case SB_BOTTOM:
si.nPos = si.nMax;
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
}

si.fMask = SIF_POS;
SetScrollInfo(SB_VERT, &si, TRUE);
GetScrollInfo(SB_VERT, &si);

//Bei Positionsänderung: Fenster vertikal rollen und aktualisieren
if(si.nPos != vscroll)
{
ScrollWindow(0, m_Image->m_Width * (vscroll - si.nPos) , NULL, NULL);
UpdateWindow();
}


CView::OnVScroll(nSBCode, nPos, pScrollBar);
} [/php]

Vielleicht seht ihr ja meinen Fehler :confused:

Geschrieben

Wenn ich ScrollWindow() auskommentiere gehts (allerdings wird das Bild nicht gescrollt)

Hier die MessageMap

BEGIN_MESSAGE_MAP(CPCCView, CView)
//{{AFX_MSG_MAP(CPCCView)
ON_WM_LBUTTONDOWN()
ON_WM_HSCROLL()
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
// Standard-Druckbefehle
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
[/PHP]

Geschrieben

Ich hoffe ich hab dich jetzt richtig verstanden

Also bei beiden Paramtern von pScrollBar sagt mir der Debugger folgendes:

pScrollBar = 0x00000000 {CScrollBar hWnd = ????}

CWnd = CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden.

Geschrieben

Ich habs hinbekommen! :D

Es lag an der OnDraw Methode. In dieser hab ich die Scrollleisten ständig neuzeichnen lassen, daher hat das Prog wohl auch immer beide Scrollbars bewegt...

Habs jetzt einfach über ein Flag gelöst. Wenn das erste mal gezeichnet wird, wird nach dem zeichnen der Scrollbars das Flag auf "true" gesetzt und danach, werden die Scrollbars nicht weiter neugezeichnet :)

void CPCCView::OnDraw(CDC* pDC)
{
CPCCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

if(!m_first)
{
m_Image->Load(pDoc->GetPathName());

//Vertikale Scrollbar anpassen, positionieren und neuzeichnen
si.nMax = m_Image->m_Height;
si.nPage = m_Image->m_Height/2;
this->SetScrollInfo(SB_VERT, &si, TRUE);

//Horizontale Scrollbar anpassen, positionieren und neuzeichnen
si.nMax = m_Image->m_Width;
si.nPage = m_Image->m_Width/2;
this->SetScrollInfo(SB_HORZ, &si, TRUE);

m_first = true;
}

//Bild zeichnen
m_Image->UpdateSizeOnDC(pDC);
//m_Image->Show(pDC, CPoint(0,0), CPoint(m_Image->m_Width, m_Image->m_Height), 0,0);
m_Image->Show(pDC, CRect(0, 0, m_Image->m_Width, m_Image->m_Height));

}[/php]

Danke nochmal für die Hilfe (=

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...