1 #ifndef _EXPLORER_PRECOMP__H_
2 #define _EXPLORER_PRECOMP__H_
4 #define WIN7_COMPAT_MODE 0
9 #define WIN32_NO_STATUS
11 #define COM_NO_WINDOWS_H
30 #include <undocuser.h>
31 #include <shlwapi_undoc.h>
32 #include <shlobj_undoc.h>
33 #include <shlguid_undoc.h>
34 #include <undocshell.h>
37 #include <shellutils.h>
42 #include <wine/debug.h>
44 WINE_DEFAULT_DEBUG_CHANNEL(explorernew
);
46 #define ASSERT(cond) \
48 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
51 extern HINSTANCE hExplorerInstance
;
52 extern HANDLE hProcessHeap
;
53 extern HKEY hkExplorer
;
61 SetWindowStyle(IN HWND hWnd
,
65 return SHSetWindowBits(hWnd
, GWL_STYLE
, dwStyleMask
, dwStyle
);
70 SetWindowExStyle(IN HWND hWnd
,
74 return SHSetWindowBits(hWnd
, GWL_EXSTYLE
, dwStyleMask
, dwStyle
);
78 LoadPopupMenu(IN HINSTANCE hInstance
,
79 IN LPCTSTR lpMenuName
);
82 FindSubMenu(IN HMENU hMenu
,
87 GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer
,
88 IN DWORD dwBufferSize
);
91 FormatMenuString(IN HMENU hMenu
,
97 GetExplorerRegValueSet(IN HKEY hKey
,
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
);
115 #define TWM_OPENSTARTMENU (WM_USER + 260)
117 extern const GUID IID_IShellDesktopTray
;
119 #define INTERFACE ITrayWindow
120 DECLARE_INTERFACE_(ITrayWindow
, IUnknown
)
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
;
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)
157 RegisterTrayWindowClass(VOID
);
160 UnregisterTrayWindowClass(VOID
);
162 HRESULT
CreateTrayWindow(ITrayWindow
** ppTray
);
165 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
168 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
174 /* Structure to hold non-default options*/
175 typedef struct _ADVANCED_SETTINGS
178 } ADVANCED_SETTINGS
, *PADVANCED_SETTINGS
;
180 extern ADVANCED_SETTINGS AdvancedSettings
;
181 extern const TCHAR szAdvancedSettingsKey
[];
184 LoadAdvancedSettings(VOID
);
187 SaveSettingDword(IN PCTSTR pszKeyName
,
188 IN PCTSTR pszValueName
,
194 HRESULT
InitShellServices(HDPA
* phdpa
);
195 HRESULT
ShutdownShellServices(HDPA hdpa
);
202 ProcessStartupItems(VOID
);
209 DisplayTrayProperties(IN HWND hwndOwner
);
215 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
218 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
224 /* Internal Task Band CLSID */
225 extern const GUID CLSID_ITaskBand
;
227 #define INTERFACE ITaskBand
228 DECLARE_INTERFACE_(ITaskBand
, IUnknown
)
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
;
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)
249 CreateTaskBand(IN OUT ITrayWindow
*Tray
);
255 #define INTERFACE ITrayBandSite
256 DECLARE_INTERFACE_(ITrayBandSite
, IUnknown
)
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
;
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)
289 CreateTrayBandSite(IN OUT ITrayWindow
*Tray
,
290 OUT HWND
*phWndRebar
,
291 OUT HWND
*phWndTaskSwitch
);
297 HRESULT
StartMenuBtnCtxMenuCreator(ITrayWindow
* TrayWnd
, IN HWND hWndOwner
, IContextMenu
** ppCtxMenu
);
299 #define INTERFACE IStartMenuSite
300 DECLARE_INTERFACE_(IStartMenuSite
, IUnknown
)
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 ***/
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 ***/
319 CreateStartMenu(IN ITrayWindow
*Tray
,
320 OUT IMenuBand
**ppMenuBand
,
321 IN HBITMAP hbmBanner OPTIONAL
,
322 IN BOOL bSmallIcons
);
325 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
326 IN HBITMAP hbmBanner OPTIONAL
,
327 IN BOOL bSmallIcons
);
334 CreateStartMenuSite(IN OUT ITrayWindow
*Tray
, const IID
& riid
, PVOID
* ppv
);
341 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
342 #define TCWM_UPDATETIME (WM_USER + 0x101)
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)
351 #define NTNWM_REALIGN (0x1)
354 RegisterTrayNotifyWndClass(VOID
);
357 UnregisterTrayNotifyWndClass(VOID
);
360 CreateTrayNotifyWnd(IN OUT ITrayWindow
*TrayWindow
,
364 TrayNotify_NotifyMsg(IN WPARAM wParam
,
368 TrayNotify_GetClockRect(OUT PRECT rcClock
);
374 #define TSWM_ENABLEGROUPING (WM_USER + 1)
375 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
378 RegisterTaskSwitchWndClass(VOID
);
381 UnregisterTaskSwitchWndClass(VOID
);
384 CreateTaskSwitchWnd(IN HWND hWndParent
,
385 IN OUT ITrayWindow
*Tray
);
388 Tray_OnStartMenuDismissed();
391 IsSameObject(IN IUnknown
*punk1
, IN IUnknown
*punk2
);
393 #endif /* _EXPLORER_PRECOMP__H_ */