1 #ifndef _EXPLORER_PRECOMP__H_
2 #define _EXPLORER_PRECOMP__H_
4 #define WIN7_COMPAT_MODE 0
5 #define WIN7_DEBUG_MODE 0
7 #if WIN7_DEBUG_MODE && !WIN7_COMPAT_MODE
8 #undef WIN7_COMPAT_MODE
9 #define WIN7_COMPAT_MODE 1
15 #define WIN32_NO_STATUS
17 #define COM_NO_WINDOWS_H
33 #include <atlsimpcoll.h>
41 #include <undocuser.h>
42 #include <shlwapi_undoc.h>
43 #include <shlobj_undoc.h>
44 #include <shlguid_undoc.h>
45 #include <undocshell.h>
47 #include <ui/rosctrls.h>
48 #include <ui/rosdlgs.h>
49 #include <shellutils.h>
54 #include <wine/debug.h>
56 WINE_DEFAULT_DEBUG_CHANNEL(explorernew
);
58 #define ASSERT(cond) \
60 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
63 extern HINSTANCE hExplorerInstance
;
64 extern HANDLE hProcessHeap
;
65 extern HKEY hkExplorer
;
66 extern BOOL bExplorerIsShell
;
74 SetWindowStyle(IN HWND hWnd
,
78 return SHSetWindowBits(hWnd
, GWL_STYLE
, dwStyleMask
, dwStyle
);
83 SetWindowExStyle(IN HWND hWnd
,
87 return SHSetWindowBits(hWnd
, GWL_EXSTYLE
, dwStyleMask
, dwStyle
);
91 LoadPopupMenu(IN HINSTANCE hInstance
,
92 IN LPCWSTR lpMenuName
);
95 FindSubMenu(IN HMENU hMenu
,
100 GetCurrentLoggedOnUserName(OUT LPWSTR szBuffer
,
101 IN DWORD dwBufferSize
);
104 FormatMenuString(IN HMENU hMenu
,
109 BOOL
GetRegValue(IN LPCWSTR pszSubKey
, IN LPCWSTR pszValueName
, IN BOOL bDefaultValue
);
110 BOOL
SetRegDword(IN LPCWSTR pszSubKey
, IN LPCWSTR pszValueName
, IN DWORD dwValue
);
111 BOOL
GetAdvancedBool(IN LPCWSTR pszValueName
, IN BOOL bDefaultValue
);
112 BOOL
SetAdvancedDword(IN LPCWSTR pszValueName
, IN DWORD dwValue
);
118 VOID
InitRSHELL(VOID
);
119 HRESULT WINAPI
_CStartMenu_CreateInstance(REFIID riid
, void **ppv
);
120 HANDLE WINAPI
_SHCreateDesktop(IShellDesktopTray
*ShellDesk
);
121 BOOL WINAPI
_SHDesktopMessageLoop(HANDLE hDesktop
);
122 DWORD WINAPI
_WinList_Init(void);
123 void WINAPI
_ShellDDEInit(BOOL bInit
);
124 HRESULT WINAPI
_CBandSiteMenu_CreateInstance(REFIID riid
, void **ppv
);
125 HRESULT WINAPI
_CBandSite_CreateInstance(LPUNKNOWN pUnkOuter
, REFIID riid
, void **ppv
);
131 #define TWM_GETTASKSWITCH (WM_USER + 236)
132 #define TWM_OPENSTARTMENU (WM_USER + 260)
133 #define TWM_SETTINGSCHANGED (WM_USER + 300)
134 #define TWM_PULSE (WM_USER + 400)
136 extern const GUID IID_IShellDesktopTray
;
138 #define INTERFACE ITrayWindow
139 DECLARE_INTERFACE_(ITrayWindow
, IUnknown
)
141 /*** IUnknown methods ***/
142 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
143 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
144 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
145 /*** ITrayWindow methods ***/
146 STDMETHOD_(HRESULT
, Open
) (THIS
) PURE
;
147 STDMETHOD_(HRESULT
, Close
) (THIS
) PURE
;
148 STDMETHOD_(HWND
, GetHWND
) (THIS
) PURE
;
149 STDMETHOD_(BOOL
, IsSpecialHWND
) (THIS_ HWND hWnd
) PURE
;
150 STDMETHOD_(BOOL
, IsHorizontal
) (THIS
) PURE
;
151 STDMETHOD_(HWND
, DisplayProperties
) (THIS
) PURE
;
152 STDMETHOD_(BOOL
, ExecContextMenuCmd
) (THIS_ UINT uiCmd
) PURE
;
153 STDMETHOD_(BOOL
, Lock
) (THIS_ BOOL bLock
) PURE
;
154 STDMETHOD_(BOOL
, IsTaskWnd
) (THIS_ HWND hWnd
) PURE
;
158 #if defined(COBJMACROS)
159 /*** IUnknown methods ***/
160 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
161 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
162 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
163 /*** ITrayWindow methods ***/
164 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
165 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
166 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
167 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
168 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
169 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
170 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
171 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
172 #define ITrayWindow_IsTaskWnd(p,a) (p)->lpVtbl->IsTaskWnd(p,a)
175 HRESULT
CreateTrayWindow(ITrayWindow
** ppTray
);
178 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
181 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
192 TIM_Max
= TIM_AlwaysCompact
195 typedef struct _TW_STUCKRECTS2
205 DWORD AlwaysOnTop
: 1;
206 DWORD SmSmallIcons
: 1; // Start menu Small Icons
213 } TW_STRUCKRECTS2
, *PTW_STUCKRECTS2
;
215 struct TaskbarSettings
221 BOOL bHideInactiveIcons
;
223 TrayIconsMode eCompactTrayIcons
;
224 BOOL bShowDesktopButton
;
229 inline BOOL
UseCompactTrayIcons()
231 switch (eCompactTrayIcons
)
233 case TIM_NeverCompact
:
235 case TIM_AlwaysCompact
:
243 extern TaskbarSettings g_TaskbarSettings
;
248 HRESULT
InitShellServices(HDPA
* phdpa
);
249 HRESULT
ShutdownShellServices(HDPA hdpa
);
255 BOOL
DoStartStartupItems(ITrayWindow
*Tray
);
256 INT
ProcessStartupItems(VOID
);
257 BOOL
DoFinishStartupItems(VOID
);
264 DisplayTrayProperties(IN HWND hwndOwner
, IN HWND hwndTaskbar
);
270 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
273 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
277 * notifyiconscust.cpp
280 ShowCustomizeNotifyIcons(HINSTANCE
, HWND
);
286 extern const GUID CLSID_ITaskBand
; /* Internal Task Band CLSID */
287 HRESULT
CTaskBand_CreateInstance(IN ITrayWindow
*Tray
, HWND hWndStartButton
, REFIID riid
, void **ppv
);
293 #define INTERFACE ITrayBandSite
294 DECLARE_INTERFACE_(ITrayBandSite
, IUnknown
)
296 /*** IUnknown methods ***/
297 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
298 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
299 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
300 /*** IBandSiteStreamCallback ***/
301 STDMETHOD_(HRESULT
, OnLoad
)(THIS_ IStream
*pStm
, REFIID riid
, PVOID
*pvObj
) PURE
;
302 STDMETHOD_(HRESULT
, OnSave
)(THIS_ IUnknown
*pUnk
, IStream
*pStm
) PURE
;
303 /*** ITrayBandSite methods ***/
304 STDMETHOD_(HRESULT
, IsTaskBand
) (THIS_ IUnknown
*punk
) PURE
;
305 STDMETHOD_(HRESULT
, ProcessMessage
) (THIS_ HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
) PURE
;
306 STDMETHOD_(HRESULT
, AddContextMenus
) (THIS_ HMENU hmenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
, IContextMenu
**ppcm
) PURE
;
307 STDMETHOD_(HRESULT
, Lock
) (THIS_ BOOL bLock
) PURE
;
311 #if defined(COBJMACROS)
312 /*** IUnknown methods ***/
313 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
314 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
315 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
316 /*** IBandSiteStreamCallback methods ***/
317 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
318 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
319 /*** ITrayBandSite methods ***/
320 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
321 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
322 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
323 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
326 HRESULT
CTrayBandSite_CreateInstance(IN ITrayWindow
*tray
, IN IDeskBand
* pTaskBand
, OUT ITrayBandSite
** pBandSite
);
331 HRESULT
CStartMenuBtnCtxMenu_CreateInstance(ITrayWindow
* TrayWnd
, IN HWND hWndOwner
, IContextMenu
** ppCtxMenu
);
337 CreateStartMenu(IN ITrayWindow
*Tray
,
338 OUT IMenuBand
**ppMenuBand
,
339 IN HBITMAP hbmBanner OPTIONAL
,
340 IN BOOL bSmallIcons
);
342 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
343 IN HBITMAP hbmBanner OPTIONAL
,
351 ShowCustomizeClassic(HINSTANCE
, HWND
);
357 CStartMenuSite_CreateInstance(IN OUT ITrayWindow
*Tray
, const IID
& riid
, PVOID
* ppv
);
364 HRESULT
CTrayClockWnd_CreateInstance(HWND hwndParent
, REFIID riid
, void **ppv
);
367 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
368 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
370 #define NTNWM_REALIGN (0x1)
372 HRESULT
CTrayNotifyWnd_CreateInstance(HWND hwndParent
, REFIID riid
, void **ppv
);
375 HRESULT
CSysPagerWnd_CreateInstance(HWND hwndParent
, REFIID riid
, void **ppv
);
381 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
383 HRESULT
CTaskSwitchWnd_CreateInstance(IN HWND hWndParent
, IN OUT ITrayWindow
*Tray
, REFIID riid
, void **ppv
);
386 Tray_OnStartMenuDismissed(ITrayWindow
* Tray
);
389 IsSameObject(IN IUnknown
*punk1
, IN IUnknown
*punk2
);
391 #endif /* _EXPLORER_PRECOMP__H_ */