Partial merge of condrv_restructure branch r65657.
[reactos.git] / reactos / base / shell / explorer / precomp.h
1 #ifndef _EXPLORER_PRECOMP__H_
2 #define _EXPLORER_PRECOMP__H_
3
4 #define WIN7_COMPAT_MODE 0
5
6 #include <stdio.h>
7 #include <tchar.h>
8
9 #define WIN32_NO_STATUS
10 #define _INC_WINDOWS
11 #define COM_NO_WINDOWS_H
12
13 #define COBJMACROS
14
15 #include <windef.h>
16 #include <winbase.h>
17 #include <winreg.h>
18 #include <wingdi.h>
19 #include <winnls.h>
20 #include <wincon.h>
21 #include <atlbase.h>
22 #include <atlcom.h>
23 #include <atlwin.h>
24 #include <shellapi.h>
25 #include <shlobj.h>
26 #include <shlwapi.h>
27 #include <uxtheme.h>
28 #include <strsafe.h>
29
30 #include <undocuser.h>
31 #include <shlwapi_undoc.h>
32 #include <shlobj_undoc.h>
33 #include <shlguid_undoc.h>
34 #include <undocshell.h>
35
36 #include <rosctrls.h>
37 #include <shellutils.h>
38
39 #include "tmschema.h"
40 #include "resource.h"
41
42 #include <wine/debug.h>
43
44 WINE_DEFAULT_DEBUG_CHANNEL(explorernew);
45
46 #define ASSERT(cond) \
47 do if (!(cond)) { \
48 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
49 } while (0)
50
51 extern HINSTANCE hExplorerInstance;
52 extern HANDLE hProcessHeap;
53 extern HKEY hkExplorer;
54
55 /*
56 * explorer.c
57 */
58
59 static inline
60 LONG
61 SetWindowStyle(IN HWND hWnd,
62 IN LONG dwStyleMask,
63 IN LONG dwStyle)
64 {
65 return SHSetWindowBits(hWnd, GWL_STYLE, dwStyleMask, dwStyle);
66 }
67
68 static inline
69 LONG
70 SetWindowExStyle(IN HWND hWnd,
71 IN LONG dwStyleMask,
72 IN LONG dwStyle)
73 {
74 return SHSetWindowBits(hWnd, GWL_EXSTYLE, dwStyleMask, dwStyle);
75 }
76
77 HMENU
78 LoadPopupMenu(IN HINSTANCE hInstance,
79 IN LPCTSTR lpMenuName);
80
81 HMENU
82 FindSubMenu(IN HMENU hMenu,
83 IN UINT uItem,
84 IN BOOL fByPosition);
85
86 BOOL
87 GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer,
88 IN DWORD dwBufferSize);
89
90 BOOL
91 FormatMenuString(IN HMENU hMenu,
92 IN UINT uPosition,
93 IN UINT uFlags,
94 ...);
95
96 BOOL
97 GetExplorerRegValueSet(IN HKEY hKey,
98 IN LPCTSTR lpSubKey,
99 IN LPCTSTR lpValue);
100
101 /*
102 * rshell.c
103 */
104
105 HRESULT WINAPI _CStartMenu_Constructor(REFIID riid, void **ppv);
106 HANDLE WINAPI _SHCreateDesktop(IShellDesktopTray *ShellDesk);
107 BOOL WINAPI _SHDesktopMessageLoop(HANDLE hDesktop);
108 DWORD WINAPI _WinList_Init(void);
109 void WINAPI _ShellDDEInit(BOOL bInit);
110
111 /*
112 * traywnd.c
113 */
114
115 #define TWM_OPENSTARTMENU (WM_USER + 260)
116
117 extern const GUID IID_IShellDesktopTray;
118
119 #define INTERFACE ITrayWindow
120 DECLARE_INTERFACE_(ITrayWindow, IUnknown)
121 {
122 /*** IUnknown methods ***/
123 STDMETHOD_(HRESULT, QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
124 STDMETHOD_(ULONG, AddRef) (THIS) PURE;
125 STDMETHOD_(ULONG, Release) (THIS) PURE;
126 /*** ITrayWindow methods ***/
127 STDMETHOD_(HRESULT, Open) (THIS) PURE;
128 STDMETHOD_(HRESULT, Close) (THIS) PURE;
129 STDMETHOD_(HWND, GetHWND) (THIS) PURE;
130 STDMETHOD_(BOOL, IsSpecialHWND) (THIS_ HWND hWnd) PURE;
131 STDMETHOD_(BOOL, IsHorizontal) (THIS) PURE;
132 STDMETHOD_(HFONT, GetCaptionFonts) (THIS_ HFONT *phBoldCaption) PURE;
133 STDMETHOD_(HWND, DisplayProperties) (THIS) PURE;
134 STDMETHOD_(BOOL, ExecContextMenuCmd) (THIS_ UINT uiCmd) PURE;
135 STDMETHOD_(BOOL, Lock) (THIS_ BOOL bLock) PURE;
136 };
137 #undef INTERFACE
138
139 #if defined(COBJMACROS)
140 /*** IUnknown methods ***/
141 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
142 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
143 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
144 /*** ITrayWindow methods ***/
145 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
146 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
147 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
148 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
149 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
150 #define ITrayWindow_GetCaptionFonts(p,a) (p)->lpVtbl->GetCaptionFonts(p,a)
151 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
152 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
153 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
154 #endif
155
156 BOOL
157 RegisterTrayWindowClass(VOID);
158
159 VOID
160 UnregisterTrayWindowClass(VOID);
161
162 HRESULT CreateTrayWindow(ITrayWindow ** ppTray);
163
164 VOID
165 TrayProcessMessages(IN OUT ITrayWindow *Tray);
166
167 VOID
168 TrayMessageLoop(IN OUT ITrayWindow *Tray);
169
170 /*
171 * settings.c
172 */
173
174 /* Structure to hold non-default options*/
175 typedef struct _ADVANCED_SETTINGS
176 {
177 BOOL bShowSeconds;
178 } ADVANCED_SETTINGS, *PADVANCED_SETTINGS;
179
180 extern ADVANCED_SETTINGS AdvancedSettings;
181 extern const TCHAR szAdvancedSettingsKey [];
182
183 VOID
184 LoadAdvancedSettings(VOID);
185
186 BOOL
187 SaveSettingDword(IN PCTSTR pszKeyName,
188 IN PCTSTR pszValueName,
189 IN DWORD dwValue);
190
191 /*
192 * shellservice.cpp
193 */
194 HRESULT InitShellServices(HDPA * phdpa);
195 HRESULT ShutdownShellServices(HDPA hdpa);
196
197 /*
198 * startup.cpp
199 */
200
201 int
202 ProcessStartupItems(VOID);
203
204 /*
205 * trayprop.h
206 */
207
208 VOID
209 DisplayTrayProperties(IN HWND hwndOwner);
210
211 /*
212 * desktop.cpp
213 */
214 HANDLE
215 DesktopCreateWindow(IN OUT ITrayWindow *Tray);
216
217 VOID
218 DesktopDestroyShellWindow(IN HANDLE hDesktop);
219
220 /*
221 * taskband.cpp
222 */
223
224 /* Internal Task Band CLSID */
225 extern const GUID CLSID_ITaskBand;
226
227 #define INTERFACE ITaskBand
228 DECLARE_INTERFACE_(ITaskBand, IUnknown)
229 {
230 /*** IUnknown methods ***/
231 STDMETHOD_(HRESULT, QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
232 STDMETHOD_(ULONG, AddRef) (THIS) PURE;
233 STDMETHOD_(ULONG, Release) (THIS) PURE;
234 /*** ITaskBand methods ***/
235 STDMETHOD_(HRESULT, GetRebarBandID)(THIS_ DWORD *pdwBandID) PURE;
236 };
237 #undef INTERFACE
238
239 #if defined(COBJMACROS)
240 /*** IUnknown methods ***/
241 #define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
242 #define ITaskBand_AddRef(p) (p)->lpVtbl->AddRef(p)
243 #define ITaskBand_Release(p) (p)->lpVtbl->Release(p)
244 /*** ITaskBand methods ***/
245 #define ITaskBand_GetRebarBandID(p,a) (p)->lpVtbl->GetRebarBandID(p,a)
246 #endif
247
248 ITaskBand *
249 CreateTaskBand(IN OUT ITrayWindow *Tray);
250
251 /*
252 * tbsite.cpp
253 */
254
255 #define INTERFACE ITrayBandSite
256 DECLARE_INTERFACE_(ITrayBandSite, IUnknown)
257 {
258 /*** IUnknown methods ***/
259 STDMETHOD_(HRESULT, QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
260 STDMETHOD_(ULONG, AddRef) (THIS) PURE;
261 STDMETHOD_(ULONG, Release) (THIS) PURE;
262 /*** IBandSiteStreamCallback ***/
263 STDMETHOD_(HRESULT, OnLoad)(THIS_ IStream *pStm, REFIID riid, PVOID *pvObj) PURE;
264 STDMETHOD_(HRESULT, OnSave)(THIS_ IUnknown *pUnk, IStream *pStm) PURE;
265 /*** ITrayBandSite methods ***/
266 STDMETHOD_(HRESULT, IsTaskBand) (THIS_ IUnknown *punk) PURE;
267 STDMETHOD_(HRESULT, ProcessMessage) (THIS_ HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plResult) PURE;
268 STDMETHOD_(HRESULT, AddContextMenus) (THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags, IContextMenu **ppcm) PURE;
269 STDMETHOD_(HRESULT, Lock) (THIS_ BOOL bLock) PURE;
270 };
271 #undef INTERFACE
272
273 #if defined(COBJMACROS)
274 /*** IUnknown methods ***/
275 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
276 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
277 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
278 /*** IBandSiteStreamCallback methods ***/
279 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
280 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
281 /*** ITrayBandSite methods ***/
282 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
283 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
284 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
285 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
286 #endif
287
288 ITrayBandSite *
289 CreateTrayBandSite(IN OUT ITrayWindow *Tray,
290 OUT HWND *phWndRebar,
291 OUT HWND *phWndTaskSwitch);
292
293 /*
294 * startmnu.cpp
295 */
296
297 HRESULT StartMenuBtnCtxMenuCreator(ITrayWindow * TrayWnd, IN HWND hWndOwner, IContextMenu ** ppCtxMenu);
298
299 #define INTERFACE IStartMenuSite
300 DECLARE_INTERFACE_(IStartMenuSite, IUnknown)
301 {
302 /*** IUnknown methods ***/
303 STDMETHOD_(HRESULT, QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
304 STDMETHOD_(ULONG, AddRef) (THIS) PURE;
305 STDMETHOD_(ULONG, Release) (THIS) PURE;
306 /*** IStartMenuSite ***/
307 };
308 #undef INTERFACE
309
310 #if defined(COBJMACROS)
311 /*** IUnknown methods ***/
312 #define IStartMenuSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
313 #define IStartMenuSite_AddRef(p) (p)->lpVtbl->AddRef(p)
314 #define IStartMenuSite_Release(p) (p)->lpVtbl->Release(p)
315 /*** IStartMenuSite methods ***/
316 #endif
317
318 IMenuPopup*
319 CreateStartMenu(IN ITrayWindow *Tray,
320 OUT IMenuBand **ppMenuBand,
321 IN HBITMAP hbmBanner OPTIONAL,
322 IN BOOL bSmallIcons);
323
324 HRESULT
325 UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup,
326 IN HBITMAP hbmBanner OPTIONAL,
327 IN BOOL bSmallIcons);
328
329 /*
330 * startmnusite.cpp
331 */
332
333 HRESULT
334 CreateStartMenuSite(IN OUT ITrayWindow *Tray, const IID & riid, PVOID * ppv);
335
336 /*
337 * trayntfy.c
338 */
339
340 /* TrayClockWnd */
341 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
342 #define TCWM_UPDATETIME (WM_USER + 0x101)
343
344 /* TrayNotifyWnd */
345 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
346 #define TNWM_UPDATETIME (WM_USER + 0x101)
347 #define TNWM_SHOWCLOCK (WM_USER + 0x102)
348 #define TNWM_SHOWTRAY (WM_USER + 0x103)
349 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
350
351 #define NTNWM_REALIGN (0x1)
352
353 BOOL
354 RegisterTrayNotifyWndClass(VOID);
355
356 VOID
357 UnregisterTrayNotifyWndClass(VOID);
358
359 HWND
360 CreateTrayNotifyWnd(IN OUT ITrayWindow *TrayWindow,
361 IN BOOL bHideClock);
362
363 VOID
364 TrayNotify_NotifyMsg(IN WPARAM wParam,
365 IN LPARAM lParam);
366
367 BOOL
368 TrayNotify_GetClockRect(OUT PRECT rcClock);
369
370 /*
371 * taskswnd.c
372 */
373
374 #define TSWM_ENABLEGROUPING (WM_USER + 1)
375 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
376
377 BOOL
378 RegisterTaskSwitchWndClass(VOID);
379
380 VOID
381 UnregisterTaskSwitchWndClass(VOID);
382
383 HWND
384 CreateTaskSwitchWnd(IN HWND hWndParent,
385 IN OUT ITrayWindow *Tray);
386
387 HRESULT
388 Tray_OnStartMenuDismissed();
389
390 HRESULT
391 IsSameObject(IN IUnknown *punk1, IN IUnknown *punk2);
392
393 #endif /* _EXPLORER_PRECOMP__H_ */