'##########################
'XProfan
'##########################
'Andreas Miethe
'Juli 2003
'##########################
$H windows.ph
$H structs.ph
$H messages.ph
$H commctrl.ph
$H shellapi.ph
$I profalt.inc
settruecolor 1
PROC ScrollWinMainProc
PROC Max
Parámetros a&,b&
IF a& > b&
RETORNO a&
más
RETORNO b&
endif
ENDPROC
PROC Min
Parámetros a&,b&
IF a& > b&
RETORNO b&
más
RETORNO a&
endif
ENDPROC
Declarar MinMax#
DIM MinMax#,40
DEF HiWord(1) Div&(&(1),$10000)
DEF LoWord(1) And(&(1),$FFFF)
declarar srcDC&,trgDC&,Disp$,windc&
declarar ScrollInit&,HscrollPos&,HscrollMax&,VscrollPos&,VscrollMax&
declarar thumb&
STRUCT SWindowClass = ~WndClass
STRUCT SMsg = ~Msg
STRUCT Sbmp = ~BITMAP
Declarar bmp#
Declarar Msg#,WindowClass#,Appname$
Declarar ImageControl&,Image&,Imagen$
DIM bmp#,sbmp
AppName$ = "ScrollDemo"
set("FastMode",1)
PROC WindowCallback
parámetros Wnd&, uMsg&, WParam&, LParam&
IF uMsg& = ~WM_GETMINMAXINFO
'Fenstergrösse einschränken
MinMax# = lParam&
Largo MinMax#,24 = 320'Min-Breite
Largo MinMax#,28 = 240'Min-Höhe
Largo MinMax#,32 = 640'Max-Breite
Largo MinMax#,36 = 480'Max-Höhe
RETORNO 0
Endif
IF uMsg& = ~wm_create
'Ventana se creado
'Screenshot erzeugen y en el Temp-Mapa de bits blitten
Disp$ = "DISPLAY"
srcDC& = ~CreateDC(addr(disp$),0,0,0)
trgDC& = ~CreateCompatibleDC(srcdc&)
Image& = ~CreateCompatibleBitmap(srcdc&,%maxx,%maxy)
~selectObject(trgdc&,Image&)
~BitBlt(trgdc&, 0,0 , %maxx,%maxy,srcdc&,0,0,~SRCCOPY)
'Mapa de bits-Daten ermitteln
~GetObject(Image&,24,bmp#)
endif
IF uMsg& = ~wm_size
'se el Ventana vergrössert oder verkleinert ?
'ScrollInit& = 1
VscrollMax& = bmp#.bmHeight&-height(wnd&)
~SetScrollRange(Wnd&,~SB_VERT,0,VscrollMax&,0)
HscrollMax& = bmp#.bmWidth&-width(wnd&)
~SetScrollRange(Wnd&,~SB_HORZ,0,HscrollMax&,0)
~BitBlt(windc&,(hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
SendMessage(Wnd&,~wm_Vscroll,0,0)Actualización
SendMessage(Wnd&,~wm_Hscroll,0,0)Actualización
endif
IF uMsg& = ~wm_vscroll
'lo se vertikal gescrollt
IFNOT ScrollInit&
ScrollInit& = 1
VscrollMax& = bmp#.bmHeight&-height(wnd&)
~SetScrollRange(Wnd&,~SB_VERT,0,VscrollMax&,0)
~SetScrollPos(Wnd&,~SB_VERT,VscrollPos&,1)
HscrollMax& = bmp#.bmWidth&-width(wnd&)
~SetScrollRange(Wnd&,~SB_HORZ,0,HscrollMax&,0)
~SetScrollPos(Wnd&,~SB_HORZ,hscrollPos&,1)
endif
IF LOWORD(wParam&) = ~SB_LINEUP
VscrollPos& = VScrollPos& -4
IF VscrollPos&<0
VscrollPos& = 0
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
IF VscrollPos&>0
~ScrollWindowEx(Wnd&,0,4,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
endif
IF LOWORD(wParam&) = ~SB_LINEDOWN
VscrollPos& = VScrollPos& + 4
IF VscrollPos&>VscrollMax&
VscrollPos& = VscrollMax&
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
IF VscrollPos&<VscrollMax&
~ScrollWindowEx(Wnd&,0,-4,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&,(hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
endif
IF LOWORD(wParam&) = ~SB_PAGEUP
IF VscrollPos& < 16
VscrollPos& = 0
~ScrollWindowEx(Wnd&,0,VscrollPos&,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
más
VscrollPos& = VscrollPos&-16
~ScrollWindowEx(Wnd&,0,16,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1),(vscrollpos& * -1), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
endif
IF LOWORD(wParam&) = ~SB_PAGEDOWN
VscrollPos& = VScrollPos& +16
IF VscrollPos&>VscrollMax&
VscrollPos& = VscrollMax&
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
IF VscrollPos&<VscrollMax&
~ScrollWindowEx(Wnd&,0,-16,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
endif
IF LOWORD(wParam&) = ~SB_THUMBTRACK
Thumb& = HIWORD(wParam&)
IF Thumb&>VscrollPos&
~ScrollWindowEx(Wnd&,0,-(Thumb&),0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1),-(Thumb&), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
VscrollPos& = Thumb&
endif
IF Thumb&<VscrollPos&
~BitBlt(windc&, (hscrollpos& * -1),-(Thumb&), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
VscrollPos& = Thumb&
endif
endif
~UpdateWindow(wnd&)
VscrollPos& = Min(VscrollPos&,VscrollMax&)
VscrollPos& = Max(0,VscrollPos&)
~SetScrollPos(Wnd&,~SB_VERT,VscrollPos&,1)
RETORNO 0
endif
IF uMsg& = ~wm_hscroll
'lo se horizontal gescrollt
IFNOT ScrollInit&
ScrollInit& = 1
VscrollMax& = bmp#.bmHeight&-height(wnd&)
~SetScrollRange(Wnd&,~SB_VERT,0,VscrollMax&,0)
~SetScrollPos(Wnd&,~SB_VERT,VscrollPos&,1)
HscrollMax& = bmp#.bmWidth&-width(wnd&)
~SetScrollRange(Wnd&,~SB_HORZ,0,HscrollMax&,0)
~SetScrollPos(Wnd&,~SB_HORZ,hscrollPos&,1)
endif
IF LOWORD(wParam&) = ~SB_LINEUP
'hscrollPos& = hScrollPos& - 4
IF hscrollPos&<0
hscrollPos& = 0
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
IF hscrollPos&>0
~ScrollWindowEx(Wnd&,4,0,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
endif
IF LOWORD(wParam&) = ~SB_LINEDOWN
hscrollPos& = hScrollPos& +4
IF hscrollPos&>hscrollMax&
hscrollPos& = hscrollMax&
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
IF hscrollPos&<hscrollMax&
~ScrollWindowEx(Wnd&,-4,0,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
endif
IF LOWORD(wParam&) = ~SB_PAGEUP
IF hscrollPos& < 16
hscrollPos& = 0
~ScrollWindowEx(Wnd&,hscrollPos&,0,,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
más
hscrollPos& = hscrollPos&-16
~ScrollWindowEx(Wnd&,16,0,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
endif
IF LOWORD(wParam&) = ~SB_PAGEDOWN
hscrollPos& = hScrollPos& +16
IF hscrollPos&>hscrollMax&
hscrollPos& = hscrollMax&
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
IF hscrollPos&<hscrollMax&
~ScrollWindowEx(Wnd&,-16,0,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
endif
endif
IF LOWORD(wParam&) = ~SB_THUMBTRACK
Thumb& = HIWORD(wParam&)
IF Thumb&>hscrollPos&
~ScrollWindowEx(Wnd&,-(Thumb&-hscrollPos&),0,,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, -(Thumb&),(vscrollpos& * -1), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
hscrollPos& = Thumb&
endif
IF Thumb&<hscrollPos&
~ScrollWindowEx(Wnd&,-(Thumb&-hscrollPos&),0,,0,0,0,0,~SW_INVALIDATE)
~BitBlt(windc&, -(Thumb&),(vscrollpos& * -1), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
hscrollPos& = Thumb&
endif
endif
~UpdateWindow(wnd&)
hscrollPos& = Min(hscrollPos&,hscrollMax&)
hscrollPos& = Max(0,hscrollPos&)
~SetScrollPos(Wnd&,~SB_HORZ,hscrollPos&,1)
RETORNO 0
endif
IF uMsg& = ~wm_close
~UnRegisterClass(WindowClass#,%hInstance)
DISPOSE bmp#
DISPOSE msg#
DISPOSE WindowClass#
DISPOSE MinMax#
~DeleteDC(srcdc&)
~DeleteDC(trgdc&)
~DeleteObject(Image&)
~PostQuitMessage(0)
endif
RETORNO ~DefWindowProc(Wnd&, uMsg&, WParam&, LParam&)
ENDPROC
PROC ScrollWinMain
declarar Window&,Icon$,Message&
Icon$ = "A"
DIM WindowClass#,SWindowClass
DIM Msg#,SMsg
WITH WindowClass#
.style& = 0
.lpfnWndProc& = ProcAddr(WindowCallback,4)
.cbClsExtra& = 0
.cbWndExtra& = 0
.hInstance& = %HInstance
.hIcon& = ~LoadIcon(%hInstance,addr(icon$))
.hCursor& = ~LoadCursor(0, ~idc_Arrow)
.hbrBackground& = ~CreateSolidBrush(~GetSysColor(~COLOR_BTNFACE))
.lpszMenuName& = Addr(AppName$)
.lpszClassName& = Addr(AppName$)
endwith
IF ~RegisterClass(WindowClass#) = 0
Texto1$ = "Fehler"
Texto2$ = "Fenster podría no registriert voluntad!"
~MessageBox(0,Addr(Texto2$),Addr(Texto1$),0)
end
endif
Window& = ~CreateWindowEx($80,Addr(AppName$),Addr(AppName$),\
or(or(or(or(~ws_visible,~ws_vscroll),~ws_sysmenu),~ws_hscroll),~ws_sizebox),\
10,10,320,240,0,0,%HInstance,0)
windc& = ~GetDC(window&)
~BitBlt(windc&, 0,0 , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
~ShowWindow(Window&, ~sw_ShowNormal)
~UpdateWindow(Window&)
~setwindowpos(window&,~HWND_TOPMOST,0,0,0,0,or(~SWP_NOMOVE,~SWP_NOSIZE))
WHILE ~GetMessage(Msg#, 0, 0, 0) > 0
~TranslateMessage(Msg#)
~DispatchMessage(Msg#)
endwhile
end
ENDPROC
ScrollWinmain
ENDPROC
ScrollWinMainProc