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