4 * Copyright 1998 Eric Kohl
7 * This is just a dummy control. An author is needed! Any volunteers?
8 * I will only improve this control once in a while.
9 * Eric <ekohl@abo.rhein-zeitung.de>
13 * - All notifications.
24 #define PAGER_GetInfoPtr(wndPtr) ((PAGER_INFO *)wndPtr->wExtra[0])
27 static __inline__ LRESULT
28 PAGER_ForwardMouse (WND
*wndPtr
, WPARAM32 wParam
)
30 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
32 infoPtr
->bForward
= (BOOL32
)wParam
;
38 static __inline__ LRESULT
39 PAGER_GetBkColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
41 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
43 return (LRESULT
)infoPtr
->clrBk
;
47 static __inline__ LRESULT
48 PAGER_GetBorder (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
50 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
52 return (LRESULT
)infoPtr
->iBorder
;
56 static __inline__ LRESULT
57 PAGER_GetButtonSize (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
59 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
61 return (LRESULT
)infoPtr
->iButtonSize
;
65 // << PAGER_GetButtonState >>
66 // << PAGER_GetDropTarget >>
69 static __inline__ LRESULT
70 PAGER_GetPos (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
72 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
79 PAGER_RecalcSize (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
81 // PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
83 FIXME (pager
, "empty stub!\n");
89 static __inline__ LRESULT
90 PAGER_SetBkColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
92 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
93 COLORREF clrTemp
= infoPtr
->clrBk
;
95 infoPtr
->clrBk
= (COLORREF
)lParam
;
99 return (LRESULT
)clrTemp
;
103 static __inline__ LRESULT
104 PAGER_SetBorder (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
106 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
107 INT32 nTemp
= infoPtr
->iBorder
;
109 infoPtr
->iBorder
= (INT32
)lParam
;
113 return (LRESULT
)nTemp
;
117 static __inline__ LRESULT
118 PAGER_SetButtonSize (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
120 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
121 INT32 nTemp
= infoPtr
->iButtonSize
;
123 infoPtr
->iButtonSize
= (INT32
)lParam
;
127 return (LRESULT
)nTemp
;
131 static __inline__ LRESULT
132 PAGER_SetChild (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
134 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
136 infoPtr
->hwndChild
= (HWND32
)lParam
;
144 static __inline__ LRESULT
145 PAGER_SetPos (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
147 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
149 infoPtr
->iPos
= (INT32
)lParam
;
158 PAGER_Create (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
162 /* allocate memory for info structure */
163 infoPtr
= (PAGER_INFO
*)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY
,
165 wndPtr
->wExtra
[0] = (DWORD
)infoPtr
;
167 if (infoPtr
== NULL
) {
168 ERR (pager
, "could not allocate info memory!\n");
172 if ((PAGER_INFO
*)wndPtr
->wExtra
[0] != infoPtr
) {
173 ERR (pager
, "pointer assignment error!\n");
177 /* set default settings */
178 infoPtr
->hwndChild
= 0;
179 infoPtr
->clrBk
= GetSysColor32 (COLOR_BTNFACE
);
180 infoPtr
->iBorder
= 0;
181 infoPtr
->iButtonSize
= 0;
190 PAGER_Destroy (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
192 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
197 /* free pager info data */
198 HeapFree (GetProcessHeap (), 0, infoPtr
);
205 PAGER_EraseBackground (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
207 PAGER_INFO
*infoPtr
= PAGER_GetInfoPtr(wndPtr
);
208 HBRUSH32 hBrush
= CreateSolidBrush32 (infoPtr
->clrBk
);
211 GetClientRect32 (wndPtr
->hwndSelf
, &rect
);
212 FillRect32 ((HDC32
)wParam
, &rect
, hBrush
);
213 DeleteObject32 (hBrush
);
218 // << PAGER_MouseMove >>
223 PAGER_WindowProc (HWND32 hwnd
, UINT32 uMsg
, WPARAM32 wParam
, LPARAM lParam
)
225 WND
*wndPtr
= WIN_FindWndPtr(hwnd
);
229 case PGM_FORWARDMOUSE
:
230 return PAGER_ForwardMouse (wndPtr
, wParam
);
233 return PAGER_GetBkColor (wndPtr
, wParam
, lParam
);
236 return PAGER_GetBorder (wndPtr
, wParam
, lParam
);
238 case PGM_GETBUTTONSIZE
:
239 return PAGER_GetButtonSize (wndPtr
, wParam
, lParam
);
241 // case PGM_GETBUTTONSTATE:
242 // case PGM_GETDROPTARGET:
245 return PAGER_SetPos (wndPtr
, wParam
, lParam
);
248 return PAGER_RecalcSize (wndPtr
, wParam
, lParam
);
251 return PAGER_SetBkColor (wndPtr
, wParam
, lParam
);
254 return PAGER_SetBorder (wndPtr
, wParam
, lParam
);
256 case PGM_SETBUTTONSIZE
:
257 return PAGER_SetButtonSize (wndPtr
, wParam
, lParam
);
260 return PAGER_SetChild (wndPtr
, wParam
, lParam
);
263 return PAGER_SetPos (wndPtr
, wParam
, lParam
);
266 return PAGER_Create (wndPtr
, wParam
, lParam
);
269 return PAGER_Destroy (wndPtr
, wParam
, lParam
);
272 return PAGER_EraseBackground (wndPtr
, wParam
, lParam
);
274 // case WM_MOUSEMOVE:
275 // return PAGER_MouseMove (wndPtr, wParam, lParam);
278 // return PAGER_Paint (wndPtr, wParam);
283 ERR (pager
, "unknown msg %04x wp=%08x lp=%08lx\n",
284 uMsg
, wParam
, lParam
);
285 return DefWindowProc32A (hwnd
, uMsg
, wParam
, lParam
);
292 PAGER_Register (void)
294 WNDCLASS32A wndClass
;
296 if (GlobalFindAtom32A (WC_PAGESCROLLER32A
)) return;
298 ZeroMemory (&wndClass
, sizeof(WNDCLASS32A
));
299 wndClass
.style
= CS_GLOBALCLASS
| CS_DBLCLKS
| CS_SAVEBITS
;
300 wndClass
.lpfnWndProc
= (WNDPROC32
)PAGER_WindowProc
;
301 wndClass
.cbClsExtra
= 0;
302 wndClass
.cbWndExtra
= sizeof(PAGER_INFO
*);
303 wndClass
.hCursor
= LoadCursor32A (0, IDC_ARROW32A
);
304 wndClass
.hbrBackground
= 0;
305 wndClass
.lpszClassName
= WC_PAGESCROLLER32A
;
307 RegisterClass32A (&wndClass
);