[EXPLORER] -If rshell is present and CBandSiteMenu_CreateInstance or CBandSite_Create...
[reactos.git] / reactos / base / shell / explorer / precomp.h
index 5045ac9..00c923e 100644 (file)
@@ -2,6 +2,12 @@
 #define _EXPLORER_PRECOMP__H_
 
 #define WIN7_COMPAT_MODE 0
+#define WIN7_DEBUG_MODE 0
+
+#if WIN7_DEBUG_MODE && !WIN7_COMPAT_MODE
+#undef WIN7_COMPAT_MODE
+#define WIN7_COMPAT_MODE 1
+#endif
 
 #include <stdio.h>
 #include <tchar.h>
@@ -28,6 +34,7 @@
 #include <strsafe.h>
 
 #include <undocuser.h>
+#include <shlwapi_undoc.h>
 #include <shlobj_undoc.h>
 #include <shlguid_undoc.h>
 #include <undocshell.h>
 
 WINE_DEFAULT_DEBUG_CHANNEL(explorernew);
 
-/* dynamic imports due to lack of support in msvc linker libs */
-typedef INT(APIENTRY *REGSHELLHOOK)(HWND, DWORD);
-#ifdef UNICODE
-#define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempW"
-typedef BOOL(APIENTRY *DRAWCAPTEMP)(HWND, HDC, const RECT*, HFONT, HICON, LPCWSTR, UINT);
-#else
-#define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempA"
-typedef BOOL (APIENTRY *DRAWCAPTEMP)(HWND, HDC, const RECT*, HFONT, HICON, LPCSTR, UINT);
-#endif
-typedef HRESULT(APIENTRY *SHINVDEFCMD)(HWND, IShellFolder*, LPCITEMIDLIST);
-typedef void (APIENTRY *RUNFILEDLG)(HWND, HICON, LPCWSTR, LPCWSTR, LPCWSTR, UINT);
-typedef void (APIENTRY *EXITWINDLG)(HWND);
-typedef HRESULT(APIENTRY *SHWINHELP)(HWND, LPWSTR, UINT, DWORD);
-
-/* Constants for RunFileDlg */
-#define RFF_CALCDIRECTORY   0x04    /* Calculates the working directory from the file name. */
-
 #define ASSERT(cond) \
     do if (!(cond)) { \
         Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
         } while (0)
 
 extern HINSTANCE hExplorerInstance;
-extern HMODULE hUser32;
 extern HANDLE hProcessHeap;
 extern HKEY hkExplorer;
-extern DRAWCAPTEMP DrawCapTemp;
-
-/*
- * dragdrop.c
- */
-
-typedef struct _DROPTARGET_CALLBACKS
-{
-    HRESULT(*OnDragEnter)(IN IDropTarget *pDropTarget,
-                          IN PVOID Context,
-                          IN const FORMATETC *Format,
-                          IN DWORD grfKeyState,
-                          IN POINTL pt,
-                          IN OUT DWORD *pdwEffect);
-    HRESULT(*OnDragOver)(IN IDropTarget *pDropTarget,
-                         IN PVOID Context,
-                         IN DWORD grfKeyState,
-                         IN POINTL pt,
-                         IN OUT DWORD *pdwEffect);
-    HRESULT(*OnDragLeave)(IN IDropTarget *pDropTarget,
-                          IN PVOID Context);
-    HRESULT(*OnDrop)(IN IDropTarget *pDropTarget,
-                     IN PVOID Context,
-                     IN const FORMATETC *Format,
-                     IN DWORD grfKeyState,
-                     IN POINTL pt,
-                     IN OUT DWORD *pdwEffect);
-} DROPTARGET_CALLBACKS, *PDROPTARGET_CALLBACKS;
-
-IDropTarget *
-CreateDropTarget(IN HWND hwndTarget,
-IN DWORD nSupportedFormats,
-IN const FORMATETC *Formats  OPTIONAL,
-IN PVOID Context  OPTIONAL,
-IN const DROPTARGET_CALLBACKS *Callbacks  OPTIONAL);
 
 /*
  * explorer.c
  */
 
-#define IDHK_RUN 1 /* Win+R */
-
+static inline 
 LONG
 SetWindowStyle(IN HWND hWnd,
-IN LONG dwStyleMask,
-IN LONG dwStyle);
+               IN LONG dwStyleMask,
+               IN LONG dwStyle)
+{
+    return SHSetWindowBits(hWnd, GWL_STYLE, dwStyleMask, dwStyle);
+}
 
+static inline
 LONG
 SetWindowExStyle(IN HWND hWnd,
-IN LONG dwStyleMask,
-IN LONG dwStyle);
+                 IN LONG dwStyleMask,
+                 IN LONG dwStyle)
+{
+    return SHSetWindowBits(hWnd, GWL_EXSTYLE, dwStyleMask, dwStyle);
+}
 
 HMENU
 LoadPopupMenu(IN HINSTANCE hInstance,
-IN LPCTSTR lpMenuName);
+              IN LPCWSTR lpMenuName);
 
 HMENU
 FindSubMenu(IN HMENU hMenu,
-IN UINT uItem,
-IN BOOL fByPosition);
+            IN UINT uItem,
+            IN BOOL fByPosition);
 
 BOOL
-GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer,
-IN DWORD dwBufferSize);
+GetCurrentLoggedOnUserName(OUT LPWSTR szBuffer,
+                           IN DWORD dwBufferSize);
 
 BOOL
 FormatMenuString(IN HMENU hMenu,
-IN UINT uPosition,
-IN UINT uFlags,
-...);
+                 IN UINT uPosition,
+                 IN UINT uFlags,
+                 ...);
 
 BOOL
 GetExplorerRegValueSet(IN HKEY hKey,
-IN LPCTSTR lpSubKey,
-IN LPCTSTR lpValue);
+                       IN LPCWSTR lpSubKey,
+                       IN LPCWSTR lpValue);
 
 /*
  *  rshell.c
  */
 
-HRESULT WINAPI
-_CStartMenu_Constructor(REFIID riid, void **ppv);
+VOID InitRSHELL(VOID);
+HRESULT WINAPI _CStartMenu_Constructor(REFIID riid, void **ppv);
+HANDLE WINAPI _SHCreateDesktop(IShellDesktopTray *ShellDesk);
+BOOL WINAPI _SHDesktopMessageLoop(HANDLE hDesktop);
+DWORD WINAPI _WinList_Init(void);
+void WINAPI _ShellDDEInit(BOOL bInit);
+HRESULT WINAPI _CBandSiteMenu_CreateInstance(REFIID riid, void **ppv);
+HRESULT WINAPI _CBandSite_CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, void **ppv);
 
 /*
  * traywnd.c
@@ -172,7 +138,6 @@ DECLARE_INTERFACE_(ITrayWindow, IUnknown)
     STDMETHOD_(HWND, GetHWND) (THIS) PURE;
     STDMETHOD_(BOOL, IsSpecialHWND) (THIS_ HWND hWnd) PURE;
     STDMETHOD_(BOOL, IsHorizontal) (THIS) PURE;
-    STDMETHOD_(HFONT, GetCaptionFonts) (THIS_ HFONT *phBoldCaption) PURE;
     STDMETHOD_(HWND, DisplayProperties) (THIS) PURE;
     STDMETHOD_(BOOL, ExecContextMenuCmd) (THIS_ UINT uiCmd) PURE;
     STDMETHOD_(BOOL, Lock) (THIS_ BOOL bLock) PURE;
@@ -190,7 +155,6 @@ DECLARE_INTERFACE_(ITrayWindow, IUnknown)
 #define ITrayWindow_GetHWND(p)              (p)->lpVtbl->GetHWND(p)
 #define ITrayWindow_IsSpecialHWND(p,a)      (p)->lpVtbl->IsSpecialHWND(p,a)
 #define ITrayWindow_IsHorizontal(p)         (p)->lpVtbl->IsHorizontal(p)
-#define ITrayWindow_GetCaptionFonts(p,a)    (p)->lpVtbl->GetCaptionFonts(p,a)
 #define ITrayWindow_DisplayProperties(p)    (p)->lpVtbl->DisplayProperties(p)
 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
 #define ITrayWindow_Lock(p,a)               (p)->lpVtbl->Lock(p,a)
@@ -215,21 +179,36 @@ TrayMessageLoop(IN OUT ITrayWindow *Tray);
  */
 
 /* Structure to hold non-default options*/
-typedef struct _ADVANCED_SETTINGS
+typedef struct _TASKBAR_SETTINGS
 {
+    BOOL bLock;
+    BOOL bAutoHide;
+    BOOL bAlwaysOnTop;
+    BOOL bGroupButtons;
+    BOOL bShowQuickLaunch;
+    BOOL bShowClock;
     BOOL bShowSeconds;
-} ADVANCED_SETTINGS, *PADVANCED_SETTINGS;
+    BOOL bHideInactiveIcons;
+} TASKBAR_SETTINGS, *PTASKBAR_SETTINGS;
 
-extern ADVANCED_SETTINGS AdvancedSettings;
-extern const TCHAR szAdvancedSettingsKey [];
+extern TASKBAR_SETTINGS TaskBarSettings;
 
 VOID
-LoadAdvancedSettings(VOID);
+LoadTaskBarSettings(VOID);
+
+VOID
+SaveTaskBarSettings(VOID);
 
 BOOL
-SaveSettingDword(IN PCTSTR pszKeyName,
-IN PCTSTR pszValueName,
-IN DWORD dwValue);
+SaveSettingDword(IN LPCWSTR pszKeyName,
+                 IN LPCWSTR pszValueName,
+                 IN DWORD dwValue);
+
+/*
+ * shellservice.cpp
+ */
+HRESULT InitShellServices(HDPA * phdpa);
+HRESULT ShutdownShellServices(HDPA hdpa);
 
 /*
  * startup.cpp
@@ -254,36 +233,19 @@ DesktopCreateWindow(IN OUT ITrayWindow *Tray);
 VOID
 DesktopDestroyShellWindow(IN HANDLE hDesktop);
 
+
 /*
- * taskband.cpp
+ * notifyiconscust.cpp
  */
+VOID
+ShowCustomizeNotifyIcons(HINSTANCE, HWND);
 
-/* Internal Task Band CLSID */
-extern const GUID CLSID_ITaskBand;
-
-#define INTERFACE ITaskBand
-DECLARE_INTERFACE_(ITaskBand, IUnknown)
-{
-    /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT, QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
-    STDMETHOD_(ULONG, Release) (THIS) PURE;
-    /*** ITaskBand methods ***/
-    STDMETHOD_(HRESULT, GetRebarBandID)(THIS_ DWORD *pdwBandID) PURE;
-};
-#undef INTERFACE
-
-#if defined(COBJMACROS)
-/*** IUnknown methods ***/
-#define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define ITaskBand_AddRef(p)             (p)->lpVtbl->AddRef(p)
-#define ITaskBand_Release(p)            (p)->lpVtbl->Release(p)
-/*** ITaskBand methods ***/
-#define ITaskBand_GetRebarBandID(p,a)   (p)->lpVtbl->GetRebarBandID(p,a)
-#endif
+/*
+ * taskband.cpp
+ */
 
-ITaskBand *
-CreateTaskBand(IN OUT ITrayWindow *Tray);
+extern const GUID CLSID_ITaskBand;  /* Internal Task Band CLSID */
+HRESULT CTaskBand_CreateInstance(IN ITrayWindow *Tray, HWND hWndStartButton, REFIID riid, void **ppv);
 
 /*
  * tbsite.cpp
@@ -322,10 +284,7 @@ DECLARE_INTERFACE_(ITrayBandSite, IUnknown)
 #define ITrayBandSite_Lock(p,a)                         (p)->lpVtbl->Lock(p,a)
 #endif
 
-ITrayBandSite *
-CreateTrayBandSite(IN OUT ITrayWindow *Tray,
-OUT HWND *phWndRebar,
-OUT HWND *phWndTaskSwitch);
+HRESULT CTrayBandSite_CreateInstance(IN ITrayWindow *tray, IN IDeskBand* pTaskBand, OUT ITrayBandSite** pBandSite);
 
 /*
  * startmnu.cpp
@@ -333,35 +292,17 @@ OUT HWND *phWndTaskSwitch);
 
 HRESULT StartMenuBtnCtxMenuCreator(ITrayWindow * TrayWnd, IN HWND hWndOwner, IContextMenu ** ppCtxMenu);
 
-#define INTERFACE IStartMenuSite
-DECLARE_INTERFACE_(IStartMenuSite, IUnknown)
-{
-    /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT, QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
-    STDMETHOD_(ULONG, Release) (THIS) PURE;
-    /*** IStartMenuSite ***/
-};
-#undef INTERFACE
-
-#if defined(COBJMACROS)
-/*** IUnknown methods ***/
-#define IStartMenuSite_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)
-#define IStartMenuSite_AddRef(p)                         (p)->lpVtbl->AddRef(p)
-#define IStartMenuSite_Release(p)                        (p)->lpVtbl->Release(p)
-/*** IStartMenuSite methods ***/
-#endif
-
 IMenuPopup*
 CreateStartMenu(IN ITrayWindow *Tray,
-OUT IMenuBand **ppMenuBand,
-IN HBITMAP hbmBanner  OPTIONAL,
-IN BOOL bSmallIcons);
+                OUT IMenuBand **ppMenuBand,
+                IN HBITMAP hbmBanner OPTIONAL,
+                IN BOOL bSmallIcons);
 
-HRESULT
-UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup,
-IN HBITMAP hbmBanner  OPTIONAL,
-IN BOOL bSmallIcons);
+/*
+ * startmnucust.cpp
+ */
+VOID 
+ShowCustomizeClassic(HINSTANCE, HWND);
 
 /*
 * startmnusite.cpp
@@ -387,6 +328,8 @@ CreateStartMenuSite(IN OUT ITrayWindow *Tray, const IID & riid, PVOID * ppv);
 
 #define NTNWM_REALIGN   (0x1)
 
+class CTrayNotifyWnd;
+
 BOOL
 RegisterTrayNotifyWndClass(VOID);
 
@@ -394,15 +337,13 @@ VOID
 UnregisterTrayNotifyWndClass(VOID);
 
 HWND
-CreateTrayNotifyWnd(IN OUT ITrayWindow *TrayWindow,
-IN BOOL bHideClock);
+CreateTrayNotifyWnd(IN OUT ITrayWindow *TrayWindow, IN BOOL bHideClock, CTrayNotifyWnd** ppTrayNotify);
 
-VOID
-TrayNotify_NotifyMsg(IN WPARAM wParam,
-IN LPARAM lParam);
+BOOL
+TrayNotify_NotifyIconCmd(CTrayNotifyWnd* pTrayNotify, IN WPARAM wParam, IN LPARAM lParam);
 
 BOOL
-TrayNotify_GetClockRect(OUT PRECT rcClock);
+TrayNotify_GetClockRect(CTrayNotifyWnd* pTrayNotify, OUT PRECT rcClock);
 
 /*
  * taskswnd.c
@@ -422,7 +363,7 @@ CreateTaskSwitchWnd(IN HWND hWndParent,
 IN OUT ITrayWindow *Tray);
 
 HRESULT
-Tray_OnStartMenuDismissed();
+Tray_OnStartMenuDismissed(ITrayWindow* Tray);
 
 HRESULT
 IsSameObject(IN IUnknown *punk1, IN IUnknown *punk2);