2 * PROJECT: PAINT for ReactOS
5 * PURPOSE: Functionality surrounding the scroll box window class
6 * PROGRAMMERS: Benedikt Freisen
9 /* INCLUDES *********************************************************/
12 #include "scrollbox.h"
14 /* FUNCTIONS ********************************************************/
17 RegisterWclScrollbox()
20 /* initializing and registering the window class used for the scroll box */
21 wclScroll
.hInstance
= hProgInstance
;
22 wclScroll
.lpszClassName
= _T("Scrollbox");
23 wclScroll
.lpfnWndProc
= ScrollboxWinProc
;
25 wclScroll
.cbSize
= sizeof(WNDCLASSEX
);
26 wclScroll
.hIcon
= NULL
;
27 wclScroll
.hIconSm
= NULL
;
28 wclScroll
.hCursor
= LoadCursor(NULL
, IDC_ARROW
);
29 wclScroll
.lpszMenuName
= NULL
;
30 wclScroll
.cbClsExtra
= 0;
31 wclScroll
.cbWndExtra
= 0;
32 wclScroll
.hbrBackground
= GetSysColorBrush(COLOR_APPWORKSPACE
);
33 RegisterClassEx (&wclScroll
);
39 RECT clientRectScrollbox
;
40 RECT clientRectImageArea
;
42 GetClientRect(hScrollbox
, &clientRectScrollbox
);
43 GetClientRect(hImageArea
, &clientRectImageArea
);
44 si
.cbSize
= sizeof(SCROLLINFO
);
45 si
.fMask
= SIF_PAGE
| SIF_RANGE
;
46 si
.nMax
= clientRectImageArea
.right
+ 6 - 1;
48 si
.nPage
= clientRectScrollbox
.right
;
49 SetScrollInfo(hScrollbox
, SB_HORZ
, &si
, TRUE
);
50 GetClientRect(hScrollbox
, &clientRectScrollbox
);
51 si
.nMax
= clientRectImageArea
.bottom
+ 6 - 1;
52 si
.nPage
= clientRectScrollbox
.bottom
;
53 SetScrollInfo(hScrollbox
, SB_VERT
, &si
, TRUE
);
54 MoveWindow(hScrlClient
,
55 -GetScrollPos(hScrollbox
, SB_HORZ
), -GetScrollPos(hScrollbox
, SB_VERT
),
56 max(clientRectImageArea
.right
+ 6, clientRectScrollbox
.right
),
57 max(clientRectImageArea
.bottom
+ 6, clientRectScrollbox
.bottom
), TRUE
);
61 ScrollboxWinProc(HWND hwnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
66 if (hwnd
== hScrollbox
)
72 if (hwnd
== hScrollbox
)
75 si
.cbSize
= sizeof(SCROLLINFO
);
77 GetScrollInfo(hScrollbox
, SB_HORZ
, &si
);
78 switch (LOWORD(wParam
))
81 case SB_THUMBPOSITION
:
82 si
.nPos
= HIWORD(wParam
);
97 SetScrollInfo(hScrollbox
, SB_HORZ
, &si
, TRUE
);
98 MoveWindow(hScrlClient
, -GetScrollPos(hScrollbox
, SB_HORZ
),
99 -GetScrollPos(hScrollbox
, SB_VERT
), imgXRes
* zoom
/ 1000 + 6,
100 imgYRes
* zoom
/ 1000 + 6, TRUE
);
105 if (hwnd
== hScrollbox
)
108 si
.cbSize
= sizeof(SCROLLINFO
);
110 GetScrollInfo(hScrollbox
, SB_VERT
, &si
);
111 switch (LOWORD(wParam
))
114 case SB_THUMBPOSITION
:
115 si
.nPos
= HIWORD(wParam
);
130 SetScrollInfo(hScrollbox
, SB_VERT
, &si
, TRUE
);
131 MoveWindow(hScrlClient
, -GetScrollPos(hScrollbox
, SB_HORZ
),
132 -GetScrollPos(hScrollbox
, SB_VERT
), imgXRes
* zoom
/ 1000 + 6,
133 imgYRes
* zoom
/ 1000 + 6, TRUE
);
138 return DefWindowProc(hwnd
, message
, wParam
, lParam
);