Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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:

das hilft leider auch nicht, immer noch der selbe effekt. Ich verstehs echt nicht... :confused:

Ja genau das passiert. Aber ich kann mir nicht erklären warum!?

P.S.

ups, korrigiert :D

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]

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.

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 (=

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.