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
26 #include <shlobj_undoc.h>
28 #include <shlguid_undoc.h>
31 #include <undocuser.h>
32 #include <undocshell.h>
39 #include <wine/debug.h>
41 WINE_DEFAULT_DEBUG_CHANNEL(explorernew
);
43 /* dynamic imports due to lack of support in msvc linker libs */
44 typedef INT(APIENTRY
*REGSHELLHOOK
)(HWND
, DWORD
);
46 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempW"
47 typedef BOOL(APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCWSTR
, UINT
);
49 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempA"
50 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCSTR
, UINT
);
52 typedef HRESULT(APIENTRY
*SHINVDEFCMD
)(HWND
, IShellFolder
*, LPCITEMIDLIST
);
53 typedef void (APIENTRY
*RUNFILEDLG
)(HWND
, HICON
, LPCWSTR
, LPCWSTR
, LPCWSTR
, UINT
);
54 typedef void (APIENTRY
*EXITWINDLG
)(HWND
);
55 typedef HRESULT(APIENTRY
*SHWINHELP
)(HWND
, LPWSTR
, UINT
, DWORD
);
57 /* Constants for RunFileDlg */
58 #define RFF_CALCDIRECTORY 0x04 /* Calculates the working directory from the file name. */
60 #define ASSERT(cond) \
62 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
65 extern HINSTANCE hExplorerInstance
;
66 extern HMODULE hUser32
;
67 extern HANDLE hProcessHeap
;
68 extern HKEY hkExplorer
;
69 extern DRAWCAPTEMP DrawCapTemp
;
75 typedef struct _DROPTARGET_CALLBACKS
77 HRESULT(*OnDragEnter
)(IN IDropTarget
*pDropTarget
,
79 IN
const FORMATETC
*Format
,
82 IN OUT DWORD
*pdwEffect
);
83 HRESULT(*OnDragOver
)(IN IDropTarget
*pDropTarget
,
87 IN OUT DWORD
*pdwEffect
);
88 HRESULT(*OnDragLeave
)(IN IDropTarget
*pDropTarget
,
90 HRESULT(*OnDrop
)(IN IDropTarget
*pDropTarget
,
92 IN
const FORMATETC
*Format
,
95 IN OUT DWORD
*pdwEffect
);
96 } DROPTARGET_CALLBACKS
, *PDROPTARGET_CALLBACKS
;
99 CreateDropTarget(IN HWND hwndTarget
,
100 IN DWORD nSupportedFormats
,
101 IN
const FORMATETC
*Formats OPTIONAL
,
102 IN PVOID Context OPTIONAL
,
103 IN
const DROPTARGET_CALLBACKS
*Callbacks OPTIONAL
);
109 #define IDHK_RUN 1 /* Win+R */
112 SetWindowStyle(IN HWND hWnd
,
117 SetWindowExStyle(IN HWND hWnd
,
122 LoadPopupMenu(IN HINSTANCE hInstance
,
123 IN LPCTSTR lpMenuName
);
126 FindSubMenu(IN HMENU hMenu
,
128 IN BOOL fByPosition
);
131 GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer
,
132 IN DWORD dwBufferSize
);
135 FormatMenuString(IN HMENU hMenu
,
141 GetExplorerRegValueSet(IN HKEY hKey
,
150 _CStartMenu_Constructor(REFIID riid
, void **ppv
);
156 #define TWM_OPENSTARTMENU (WM_USER + 260)
158 extern const GUID IID_IShellDesktopTray
;
160 #define INTERFACE ITrayWindow
161 DECLARE_INTERFACE_(ITrayWindow
, IUnknown
)
163 /*** IUnknown methods ***/
164 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
165 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
166 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
167 /*** ITrayWindow methods ***/
168 STDMETHOD_(HRESULT
, Open
) (THIS
) PURE
;
169 STDMETHOD_(HRESULT
, Close
) (THIS
) PURE
;
170 STDMETHOD_(HWND
, GetHWND
) (THIS
) PURE
;
171 STDMETHOD_(BOOL
, IsSpecialHWND
) (THIS_ HWND hWnd
) PURE
;
172 STDMETHOD_(BOOL
, IsHorizontal
) (THIS
) PURE
;
173 STDMETHOD_(HFONT
, GetCaptionFonts
) (THIS_ HFONT
*phBoldCaption
) PURE
;
174 STDMETHOD_(HWND
, DisplayProperties
) (THIS
) PURE
;
175 STDMETHOD_(BOOL
, ExecContextMenuCmd
) (THIS_ UINT uiCmd
) PURE
;
176 STDMETHOD_(BOOL
, Lock
) (THIS_ BOOL bLock
) PURE
;
180 #if defined(COBJMACROS)
181 /*** IUnknown methods ***/
182 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
183 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
184 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
185 /*** ITrayWindow methods ***/
186 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
187 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
188 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
189 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
190 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
191 #define ITrayWindow_GetCaptionFonts(p,a) (p)->lpVtbl->GetCaptionFonts(p,a)
192 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
193 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
194 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
198 RegisterTrayWindowClass(VOID
);
201 UnregisterTrayWindowClass(VOID
);
203 HRESULT
CreateTrayWindow(ITrayWindow
** ppTray
);
206 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
209 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
215 /* Structure to hold non-default options*/
216 typedef struct _ADVANCED_SETTINGS
219 } ADVANCED_SETTINGS
, *PADVANCED_SETTINGS
;
221 extern ADVANCED_SETTINGS AdvancedSettings
;
222 extern const TCHAR szAdvancedSettingsKey
[];
225 LoadAdvancedSettings(VOID
);
228 SaveSettingDword(IN PCTSTR pszKeyName
,
229 IN PCTSTR pszValueName
,
237 ProcessStartupItems(VOID
);
244 DisplayTrayProperties(IN HWND hwndOwner
);
250 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
253 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
259 /* Internal Task Band CLSID */
260 extern const GUID CLSID_ITaskBand
;
262 #define INTERFACE ITaskBand
263 DECLARE_INTERFACE_(ITaskBand
, IUnknown
)
265 /*** IUnknown methods ***/
266 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
267 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
268 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
269 /*** ITaskBand methods ***/
270 STDMETHOD_(HRESULT
, GetRebarBandID
)(THIS_ DWORD
*pdwBandID
) PURE
;
274 #if defined(COBJMACROS)
275 /*** IUnknown methods ***/
276 #define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
277 #define ITaskBand_AddRef(p) (p)->lpVtbl->AddRef(p)
278 #define ITaskBand_Release(p) (p)->lpVtbl->Release(p)
279 /*** ITaskBand methods ***/
280 #define ITaskBand_GetRebarBandID(p,a) (p)->lpVtbl->GetRebarBandID(p,a)
284 CreateTaskBand(IN OUT ITrayWindow
*Tray
);
290 #define INTERFACE ITrayBandSite
291 DECLARE_INTERFACE_(ITrayBandSite
, IUnknown
)
293 /*** IUnknown methods ***/
294 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
295 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
296 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
297 /*** IBandSiteStreamCallback ***/
298 STDMETHOD_(HRESULT
, OnLoad
)(THIS_ IStream
*pStm
, REFIID riid
, PVOID
*pvObj
) PURE
;
299 STDMETHOD_(HRESULT
, OnSave
)(THIS_ IUnknown
*pUnk
, IStream
*pStm
) PURE
;
300 /*** ITrayBandSite methods ***/
301 STDMETHOD_(HRESULT
, IsTaskBand
) (THIS_ IUnknown
*punk
) PURE
;
302 STDMETHOD_(HRESULT
, ProcessMessage
) (THIS_ HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
) PURE
;
303 STDMETHOD_(HRESULT
, AddContextMenus
) (THIS_ HMENU hmenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
, IContextMenu
**ppcm
) PURE
;
304 STDMETHOD_(HRESULT
, Lock
) (THIS_ BOOL bLock
) PURE
;
308 #if defined(COBJMACROS)
309 /*** IUnknown methods ***/
310 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
311 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
312 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
313 /*** IBandSiteStreamCallback methods ***/
314 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
315 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
316 /*** ITrayBandSite methods ***/
317 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
318 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
319 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
320 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
324 CreateTrayBandSite(IN OUT ITrayWindow
*Tray
,
325 OUT HWND
*phWndRebar
,
326 OUT HWND
*phWndTaskSwitch
);
332 HRESULT
StartMenuBtnCtxMenuCreator(ITrayWindow
* TrayWnd
, IN HWND hWndOwner
, IContextMenu
** ppCtxMenu
);
334 #define INTERFACE IStartMenuSite
335 DECLARE_INTERFACE_(IStartMenuSite
, IUnknown
)
337 /*** IUnknown methods ***/
338 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
339 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
340 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
341 /*** IStartMenuSite ***/
345 #if defined(COBJMACROS)
346 /*** IUnknown methods ***/
347 #define IStartMenuSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
348 #define IStartMenuSite_AddRef(p) (p)->lpVtbl->AddRef(p)
349 #define IStartMenuSite_Release(p) (p)->lpVtbl->Release(p)
350 /*** IStartMenuSite methods ***/
354 CreateStartMenu(IN ITrayWindow
*Tray
,
355 OUT IMenuBand
**ppMenuBand
,
356 IN HBITMAP hbmBanner OPTIONAL
,
357 IN BOOL bSmallIcons
);
360 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
361 IN HBITMAP hbmBanner OPTIONAL
,
362 IN BOOL bSmallIcons
);
369 CreateStartMenuSite(IN OUT ITrayWindow
*Tray
, const IID
& riid
, PVOID
* ppv
);
376 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
377 #define TCWM_UPDATETIME (WM_USER + 0x101)
380 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
381 #define TNWM_UPDATETIME (WM_USER + 0x101)
382 #define TNWM_SHOWCLOCK (WM_USER + 0x102)
383 #define TNWM_SHOWTRAY (WM_USER + 0x103)
384 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
386 #define NTNWM_REALIGN (0x1)
389 RegisterTrayNotifyWndClass(VOID
);
392 UnregisterTrayNotifyWndClass(VOID
);
395 CreateTrayNotifyWnd(IN OUT ITrayWindow
*TrayWindow
,
399 TrayNotify_NotifyMsg(IN WPARAM wParam
,
403 TrayNotify_GetClockRect(OUT PRECT rcClock
);
409 #define TSWM_ENABLEGROUPING (WM_USER + 1)
410 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
413 RegisterTaskSwitchWndClass(VOID
);
416 UnregisterTaskSwitchWndClass(VOID
);
419 CreateTaskSwitchWnd(IN HWND hWndParent
,
420 IN OUT ITrayWindow
*Tray
);
423 Tray_OnStartMenuDismissed();
426 IsSameObject(IN IUnknown
*punk1
, IN IUnknown
*punk2
);
428 #endif /* _EXPLORER_PRECOMP__H_ */