- Implement URL_ESCAPE_SEGEMENT_ONLY, URL_ESCAPE_PERCENT,
[wine] / dlls / comctl32 / flatsb.c
1 /*
2  * Flat Scrollbar control
3  *
4  * Copyright 1998, 1999 Eric Kohl
5  * Copyright 1998 Alex Priem
6  *
7  * NOTES
8  *   This is just a dummy control. An author is needed! Any volunteers?
9  *   I will only improve this control once in a while.
10  *     Eric <ekohl@abo.rhein-zeitung.de>
11  *
12  * TODO:
13  *   - All messages.
14  *   - All notifications.
15  *
16  */
17
18 #include <string.h>
19 #include "winbase.h"
20 #include "winerror.h"
21 #include "commctrl.h"
22 #include "debugtools.h"
23
24 DEFAULT_DEBUG_CHANNEL(commctrl);
25
26 typedef struct
27 {
28     DWORD dwDummy;  /* just to keep the compiler happy ;-) */
29 } FLATSB_INFO, *LPFLATSB_INFO;
30
31 #define FlatSB_GetInfoPtr(hwnd) ((FLATSB_INFO*)GetWindowLongA (hwnd, 0))
32
33
34 /***********************************************************************
35  *              InitializeFlatSB (COMCTL32.86)
36  *
37  *      returns nonzero if successful, zero otherwise
38  *
39  */
40 BOOL WINAPI InitializeFlatSB(HWND hwnd)
41 {
42     TRACE("[%04x]\n", hwnd);
43     FIXME("stub\n");
44     return FALSE;
45 }
46
47 /***********************************************************************
48  *              UninitializeFlatSB (COMCTL32.90)
49  *
50  *      returns:
51  *      E_FAIL          if one of the scroll bars is currently in use
52  *      S_FALSE         if InitializeFlatSB was never called on this hwnd
53  *      S_OK            otherwise
54  *
55  */
56 HRESULT WINAPI UninitializeFlatSB(HWND hwnd)
57 {
58     TRACE("[%04x]\n", hwnd);
59     FIXME("stub\n");
60     return S_FALSE;
61 }
62
63 /***********************************************************************
64  *              FlatSB_GetScrollProp (COMCTL32.32)
65  *
66  *      Returns nonzero if successful, or zero otherwise. If index is WSB_PROP_HSTYLE,
67  *      the return is nonzero if InitializeFlatSB has been called for this window, or
68  *      zero otherwise. 
69  *
70  */
71 BOOL WINAPI 
72 FlatSB_GetScrollProp(HWND hwnd, INT propIndex, LPINT prop)
73 {
74     TRACE("[%04x] propIndex=%d\n", hwnd, propIndex);
75     FIXME("stub\n");
76     return FALSE;
77 }
78
79 /***********************************************************************
80  *              FlatSB_SetScrollProp (COMCTL32.36)
81  */
82 BOOL WINAPI 
83 FlatSB_SetScrollProp(HWND hwnd, UINT index, INT newValue, BOOL flag)
84 {
85     TRACE("[%04x] index=%u newValue=%d flag=%d\n", hwnd, index, newValue, flag);
86     FIXME("stub\n");
87     return FALSE;
88 }
89
90 /***********************************************************************
91  *      From the Microsoft docs:
92  *      "If flat scroll bars haven't been initialized for the
93  *      window, the flat scroll bar APIs will defer to the corresponding
94  *      standard APIs.  This allows the developer to turn flat scroll
95  *      bars on and off without having to write conditional code."
96  *
97  *      So, if we just call the standard functions until we implement
98  *      the flat scroll bar functions, flat scroll bars will show up and 
99  *      behave properly, as though they had simply not been setup to
100  *      have flat properties.
101  *
102  *      Susan <sfarley@codeweavers.com>
103  *
104  */
105
106 /***********************************************************************
107  *              FlatSB_EnableScrollBar (COMCTL32.29)
108  */
109 BOOL WINAPI 
110 FlatSB_EnableScrollBar(HWND hwnd, int nBar, UINT flags)
111 {
112     return EnableScrollBar(hwnd, nBar, flags);
113 }
114
115 /***********************************************************************
116  *              FlatSB_ShowScrollBar (COMCTL32.38)
117  */
118 BOOL WINAPI 
119 FlatSB_ShowScrollBar(HWND hwnd, int nBar, BOOL fShow)
120 {
121     return ShowScrollBar(hwnd, nBar, fShow);
122 }
123
124 /***********************************************************************
125  *              FlatSB_GetScrollRange (COMCTL32.33)
126  */
127 BOOL WINAPI 
128 FlatSB_GetScrollRange(HWND hwnd, int nBar, LPINT min, LPINT max)
129 {
130     return GetScrollRange(hwnd, nBar, min, max);
131 }
132
133 /***********************************************************************
134  *              FlatSB_GetScrollInfo (COMCTL32.30)
135  */
136 BOOL WINAPI 
137 FlatSB_GetScrollInfo(HWND hwnd, int nBar, LPSCROLLINFO info)
138 {
139     return GetScrollInfo(hwnd, nBar, info);
140 }
141
142 /***********************************************************************
143  *              FlatSB_GetScrollPos (COMCTL32.31)
144  */
145 INT WINAPI 
146 FlatSB_GetScrollPos(HWND hwnd, int nBar)
147 {
148     return GetScrollPos(hwnd, nBar);
149 }
150
151 /***********************************************************************
152  *              FlatSB_SetScrollPos (COMCTL32.35)
153  */
154 INT WINAPI 
155 FlatSB_SetScrollPos(HWND hwnd, int nBar, INT pos, BOOL bRedraw)
156 {
157     return SetScrollPos(hwnd, nBar, pos, bRedraw);
158 }
159
160 /***********************************************************************
161  *              FlatSB_SetScrollInfo (COMCTL32.34)
162  */
163 INT WINAPI 
164 FlatSB_SetScrollInfo(HWND hwnd, int nBar, LPSCROLLINFO info, BOOL bRedraw)
165 {
166     return SetScrollInfo(hwnd, nBar, info, bRedraw);
167 }
168
169 /***********************************************************************
170  *              FlatSB_SetScrollRange (COMCTL32.37)
171  */
172 INT WINAPI 
173 FlatSB_SetScrollRange(HWND hwnd, int nBar, INT min, INT max, BOOL bRedraw)
174 {
175     return SetScrollRange(hwnd, nBar, min, max, bRedraw);
176 }
177
178
179 static LRESULT
180 FlatSB_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
181 {
182     TRACE("[%04x] wParam=%04x lParam=%08lx\n", hwnd, wParam, lParam);
183     return 0;
184 }
185
186
187 static LRESULT
188 FlatSB_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
189 {
190     TRACE("[%04x] wParam=%04x lParam=%08lx\n", hwnd, wParam, lParam);
191     return 0;
192 }
193
194
195 static LRESULT WINAPI
196 FlatSB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
197 {
198     if (!FlatSB_GetInfoPtr(hwnd) && (uMsg != WM_CREATE))
199         return DefWindowProcA( hwnd, uMsg, wParam, lParam );
200     
201     switch (uMsg)
202     {
203         case WM_CREATE:
204             return FlatSB_Create (hwnd, wParam, lParam);
205
206         case WM_DESTROY:
207             return FlatSB_Destroy (hwnd, wParam, lParam);
208
209         default:
210             if (uMsg >= WM_USER)
211                 ERR("unknown msg %04x wp=%08x lp=%08lx\n",
212                     uMsg, wParam, lParam);
213             return DefWindowProcA (hwnd, uMsg, wParam, lParam);
214     }
215     return 0;
216 }
217
218
219 VOID
220 FLATSB_Register (void)
221 {
222     WNDCLASSA wndClass;
223
224     ZeroMemory (&wndClass, sizeof(WNDCLASSA));
225     wndClass.style         = CS_GLOBALCLASS;
226     wndClass.lpfnWndProc   = (WNDPROC)FlatSB_WindowProc;
227     wndClass.cbClsExtra    = 0;
228     wndClass.cbWndExtra    = sizeof(FLATSB_INFO *);
229     wndClass.hCursor       = LoadCursorA (0, IDC_ARROWA);
230     wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
231     wndClass.lpszClassName = FLATSB_CLASSA;
232  
233     RegisterClassA (&wndClass);
234 }
235
236
237 VOID
238 FLATSB_Unregister (void)
239 {
240     UnregisterClassA (FLATSB_CLASSA, (HINSTANCE)NULL);
241 }
242