Code: Select all
InitSprite()
Procedure WndProc(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_HSCROLL
Select wParam & $FFFF
Case #SB_LINELEFT
Result = GetScrollPos_(hwnd, #SB_HORZ)
If Result >= 1
SetScrollPos_(hwnd, #SB_HORZ,Result-1,1)
ScrollWindowEx_(hwnd,1,0,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
Case #SB_LINERIGHT
Result = GetScrollPos_(hwnd, #SB_HORZ)
If Result <= 999
SetScrollPos_(hwnd, #SB_HORZ,Result+1,1)
ScrollWindowEx_(hwnd,-1,0,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
Case #SB_THUMBTRACK
Result2 =GetScrollPos_(hwnd, #SB_HORZ)
Result = (wParam >> 16 & $FFFF)
If Result >= 0
SetScrollPos_(hwnd, #SB_HORZ,Result,1)
ScrollWindowEx_(hwnd,Result2-Result,0,0,0,0,0,#SW_ERASE|#SW_INVALIDATE| #SW_SCROLLCHILDREN)
ElseIf Result <= 1000
SetScrollPos_(hwnd, #SB_HORZ,Result,1)
ScrollWindowEx_(hwnd,Result-Result2,0,0,0,0,0,#SW_ERASE|#SW_INVALIDATE| #SW_SCROLLCHILDREN)
EndIf
EndSelect
Case #WM_VSCROLL,#WM_MOUSEWHEEL
Select wParam & $FFFF
Case #SB_LINEUP
Result = GetScrollPos_(hwnd, #SB_VERT)
If wParam >> 16 & $FFFF <= 120 And Result >= 1
SetScrollPos_(hwnd, #SB_VERT,Result-1,1)
ScrollWindowEx_(hwnd,0,1,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
ElseIf wParam >> 16 & $FFFF > 120 And Result <= 999
SetScrollPos_(hwnd, #SB_VERT,Result+1,1)
ScrollWindowEx_(hwnd,0,-1,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
;
Case #SB_LINEDOWN
Result = GetScrollPos_(hwnd, #SB_VERT)
If Result <= 999
SetScrollPos_(hwnd, #SB_VERT,Result+1,1)
ScrollWindowEx_(hwnd,0,-1,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
Case #SB_THUMBTRACK
Result2 =GetScrollPos_(hwnd, #SB_VERT)
Result = (wParam >> 16 & $FFFF)
If Result >= 0
SetScrollPos_(hwnd, #SB_VERT,Result,1)
ScrollWindowEx_(hwnd,0,Result2-Result,0,0,0,0,#SW_ERASE|#SW_INVALIDATE| #SW_SCROLLCHILDREN)
ElseIf Result <= 1000
SetScrollPos_(hwnd, #SB_VERT,Result,1)
ScrollWindowEx_(hwnd,0,Result-Result2,0,0,0,0,#SW_ERASE|#SW_INVALIDATE| #SW_SCROLLCHILDREN)
EndIf
EndSelect
Case #WM_KEYDOWN ,#WM_MENUSELECT
Select wParam
Case #VK_LEFT
Result = GetScrollPos_(hwnd, #SB_HORZ)
If Result >= 1
SetScrollPos_(hwnd, #SB_HORZ,Result-1,1)
ScrollWindowEx_(hwnd,1,0,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
Case #VK_RIGHT
Result = GetScrollPos_(hwnd, #SB_HORZ)
If Result <= 999
SetScrollPos_(hwnd, #SB_HORZ,Result+1,1)
ScrollWindowEx_(hwnd,-1,0,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
Case #VK_UP
Result = GetScrollPos_(hwnd, #SB_VERT)
If Result >= 1
SetScrollPos_(hwnd, #SB_VERT,Result-1,1)
ScrollWindowEx_(hwnd,0,1,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
Case #VK_DOWN
Result = GetScrollPos_(hwnd, #SB_VERT)
If Result <= 999
SetScrollPos_(hwnd, #SB_VERT,Result+1,1)
ScrollWindowEx_(hwnd,0,-1,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
Case #VK_PRIOR
Result = GetScrollPos_(hwnd, #SB_VERT)
If Result >= 1
SetScrollPos_(hwnd, #SB_VERT,Result-50,1)
ScrollWindowEx_(hwnd,0,50,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
Case #VK_NEXT
Result = GetScrollPos_(hwnd, #SB_VERT)
If Result <= 999
SetScrollPos_(hwnd, #SB_VERT,Result+50,1)
ScrollWindowEx_(hwnd,0,-50,0,0,0,0,#SW_ERASE| #SW_INVALIDATE|#SW_SCROLLCHILDREN)
EndIf
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
Min = 0
Max = 2000
OpenWindow(0,0,0,800,600,"Scroll Window Client Area",#PB_Window_SystemMenu| #WS_HSCROLL| #WS_VSCROLL| #PB_Window_ScreenCentered| #PB_Window_MaximizeGadget| #PB_Window_SizeGadget)
SetWindowColor(0,$000000)
SetScrollRange_(WindowID(0),#SB_VERT,Min,Max,1)
SetScrollRange_(WindowID(0),#SB_HORZ,Min,Max,1)
OpenWindowedScreen(WindowID(0),0,0,2000,2000)
CreateSprite(0, 20, 20)
If StartDrawing(SpriteOutput(0))
Box(0, 0, 20, 20, RGB(255, 0, 155))
Box(5, 5, 10, 10, RGB(155, 0, 255))
StopDrawing()
EndIf
SetWindowCallback(@WndProc())
direction = 2
Repeat
; It's very important to process all the events remaining in the queue at each frame
;
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
If EventGadget() = 0
End
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
Until Event = 0
FlipBuffers()
ClearScreen(RGB(0, 0, 0))
DisplaySprite(0, x, x)
x + direction
If x > 140 : direction = -2 : EndIf
If x < 0 : direction = 2 : EndIf
Delay(1)
ForEver