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