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>
38 #include <wine/debug.h>
40 WINE_DEFAULT_DEBUG_CHANNEL(explorernew
);
42 /* dynamic imports due to lack of support in msvc linker libs */
43 typedef INT(APIENTRY
*REGSHELLHOOK
)(HWND
, DWORD
);
45 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempW"
46 typedef BOOL(APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCWSTR
, UINT
);
48 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempA"
49 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCSTR
, UINT
);
51 typedef HRESULT(APIENTRY
*SHINVDEFCMD
)(HWND
, IShellFolder
*, LPCITEMIDLIST
);
52 typedef void (APIENTRY
*RUNFILEDLG
)(HWND
, HICON
, LPCWSTR
, LPCWSTR
, LPCWSTR
, UINT
);
53 typedef void (APIENTRY
*EXITWINDLG
)(HWND
);
54 typedef HRESULT(APIENTRY
*SHWINHELP
)(HWND
, LPWSTR
, UINT
, DWORD
);
56 /* Constants for RunFileDlg */
57 #define RFF_CALCDIRECTORY 0x04 /* Calculates the working directory from the file name. */
59 #define ASSERT(cond) \
61 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
64 extern HINSTANCE hExplorerInstance
;
65 extern HMODULE hUser32
;
66 extern HANDLE hProcessHeap
;
67 extern HKEY hkExplorer
;
68 extern DRAWCAPTEMP DrawCapTemp
;
74 typedef struct _DROPTARGET_CALLBACKS
76 HRESULT(*OnDragEnter
)(IN IDropTarget
*pDropTarget
,
78 IN
const FORMATETC
*Format
,
81 IN OUT DWORD
*pdwEffect
);
82 HRESULT(*OnDragOver
)(IN IDropTarget
*pDropTarget
,
86 IN OUT DWORD
*pdwEffect
);
87 HRESULT(*OnDragLeave
)(IN IDropTarget
*pDropTarget
,
89 HRESULT(*OnDrop
)(IN IDropTarget
*pDropTarget
,
91 IN
const FORMATETC
*Format
,
94 IN OUT DWORD
*pdwEffect
);
95 } DROPTARGET_CALLBACKS
, *PDROPTARGET_CALLBACKS
;
98 CreateDropTarget(IN HWND hwndTarget
,
99 IN DWORD nSupportedFormats
,
100 IN
const FORMATETC
*Formats OPTIONAL
,
101 IN PVOID Context OPTIONAL
,
102 IN
const DROPTARGET_CALLBACKS
*Callbacks OPTIONAL
);
108 #define IDHK_RUN 1 /* Win+R */
111 SetWindowStyle(IN HWND hWnd
,
116 SetWindowExStyle(IN HWND hWnd
,
121 LoadPopupMenu(IN HINSTANCE hInstance
,
122 IN LPCTSTR lpMenuName
);
125 FindSubMenu(IN HMENU hMenu
,
127 IN BOOL fByPosition
);
130 GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer
,
131 IN DWORD dwBufferSize
);
134 FormatMenuString(IN HMENU hMenu
,
140 GetExplorerRegValueSet(IN HKEY hKey
,
149 _CStartMenu_Constructor(REFIID riid
, void **ppv
);
155 #define TWM_OPENSTARTMENU (WM_USER + 260)
157 typedef HMENU(*PCREATECTXMENU
)(IN HWND hWndOwner
,
158 IN PVOID
*ppcmContext
,
159 IN PVOID Context OPTIONAL
);
160 typedef VOID(*PCTXMENUCOMMAND
)(IN HWND hWndOwner
,
162 IN PVOID pcmContext OPTIONAL
,
163 IN PVOID Context OPTIONAL
);
165 typedef struct _TRAYWINDOW_CTXMENU
167 PCREATECTXMENU CreateCtxMenu
;
168 PCTXMENUCOMMAND CtxMenuCommand
;
169 } TRAYWINDOW_CTXMENU
, *PTRAYWINDOW_CTXMENU
;
171 extern const GUID IID_IShellDesktopTray
;
173 #define INTERFACE ITrayWindow
174 DECLARE_INTERFACE_(ITrayWindow
, IUnknown
)
176 /*** IUnknown methods ***/
177 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
178 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
179 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
180 /*** ITrayWindow methods ***/
181 STDMETHOD_(HRESULT
, Open
) (THIS
) PURE
;
182 STDMETHOD_(HRESULT
, Close
) (THIS
) PURE
;
183 STDMETHOD_(HWND
, GetHWND
) (THIS
) PURE
;
184 STDMETHOD_(BOOL
, IsSpecialHWND
) (THIS_ HWND hWnd
) PURE
;
185 STDMETHOD_(BOOL
, IsHorizontal
) (THIS
) PURE
;
186 STDMETHOD_(HFONT
, GetCaptionFonts
) (THIS_ HFONT
*phBoldCaption
) PURE
;
187 STDMETHOD_(HWND
, DisplayProperties
) (THIS
) PURE
;
188 STDMETHOD_(BOOL
, ExecContextMenuCmd
) (THIS_ UINT uiCmd
) PURE
;
189 STDMETHOD_(BOOL
, Lock
) (THIS_ BOOL bLock
) PURE
;
193 #if defined(COBJMACROS)
194 /*** IUnknown methods ***/
195 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
196 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
197 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
198 /*** ITrayWindow methods ***/
199 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
200 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
201 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
202 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
203 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
204 #define ITrayWindow_GetCaptionFonts(p,a) (p)->lpVtbl->GetCaptionFonts(p,a)
205 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
206 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
207 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
211 RegisterTrayWindowClass(VOID
);
214 UnregisterTrayWindowClass(VOID
);
216 HRESULT
CreateTrayWindow(ITrayWindow
** ppTray
);
219 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
222 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
228 /* Structure to hold non-default options*/
229 typedef struct _ADVANCED_SETTINGS
232 } ADVANCED_SETTINGS
, *PADVANCED_SETTINGS
;
234 extern ADVANCED_SETTINGS AdvancedSettings
;
235 extern const TCHAR szAdvancedSettingsKey
[];
238 LoadAdvancedSettings(VOID
);
241 SaveSettingDword(IN PCTSTR pszKeyName
,
242 IN PCTSTR pszValueName
,
250 ProcessStartupItems(VOID
);
257 DisplayTrayProperties(IN HWND hwndOwner
);
263 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
266 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
272 /* Internal Task Band CLSID */
273 extern const GUID CLSID_ITaskBand
;
275 #define INTERFACE ITaskBand
276 DECLARE_INTERFACE_(ITaskBand
, IUnknown
)
278 /*** IUnknown methods ***/
279 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
280 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
281 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
282 /*** ITaskBand methods ***/
283 STDMETHOD_(HRESULT
, GetRebarBandID
)(THIS_ DWORD
*pdwBandID
) PURE
;
287 #if defined(COBJMACROS)
288 /*** IUnknown methods ***/
289 #define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
290 #define ITaskBand_AddRef(p) (p)->lpVtbl->AddRef(p)
291 #define ITaskBand_Release(p) (p)->lpVtbl->Release(p)
292 /*** ITaskBand methods ***/
293 #define ITaskBand_GetRebarBandID(p,a) (p)->lpVtbl->GetRebarBandID(p,a)
297 CreateTaskBand(IN OUT ITrayWindow
*Tray
);
303 #define INTERFACE ITrayBandSite
304 DECLARE_INTERFACE_(ITrayBandSite
, IUnknown
)
306 /*** IUnknown methods ***/
307 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
308 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
309 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
310 /*** IBandSiteStreamCallback ***/
311 STDMETHOD_(HRESULT
, OnLoad
)(THIS_ IStream
*pStm
, REFIID riid
, PVOID
*pvObj
) PURE
;
312 STDMETHOD_(HRESULT
, OnSave
)(THIS_ IUnknown
*pUnk
, IStream
*pStm
) PURE
;
313 /*** ITrayBandSite methods ***/
314 STDMETHOD_(HRESULT
, IsTaskBand
) (THIS_ IUnknown
*punk
) PURE
;
315 STDMETHOD_(HRESULT
, ProcessMessage
) (THIS_ HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
) PURE
;
316 STDMETHOD_(HRESULT
, AddContextMenus
) (THIS_ HMENU hmenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
, IContextMenu
**ppcm
) PURE
;
317 STDMETHOD_(HRESULT
, Lock
) (THIS_ BOOL bLock
) PURE
;
321 #if defined(COBJMACROS)
322 /*** IUnknown methods ***/
323 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
324 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
325 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
326 /*** IBandSiteStreamCallback methods ***/
327 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
328 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
329 /*** ITrayBandSite methods ***/
330 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
331 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
332 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
333 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
337 CreateTrayBandSite(IN OUT ITrayWindow
*Tray
,
338 OUT HWND
*phWndRebar
,
339 OUT HWND
*phWndTaskSwitch
);
345 extern const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu
;
347 #define INTERFACE IStartMenuSite
348 DECLARE_INTERFACE_(IStartMenuSite
, IUnknown
)
350 /*** IUnknown methods ***/
351 STDMETHOD_(HRESULT
, QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
352 STDMETHOD_(ULONG
, AddRef
) (THIS
) PURE
;
353 STDMETHOD_(ULONG
, Release
) (THIS
) PURE
;
354 /*** IStartMenuSite ***/
358 #if defined(COBJMACROS)
359 /*** IUnknown methods ***/
360 #define IStartMenuSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
361 #define IStartMenuSite_AddRef(p) (p)->lpVtbl->AddRef(p)
362 #define IStartMenuSite_Release(p) (p)->lpVtbl->Release(p)
363 /*** IStartMenuSite methods ***/
367 CreateStartMenu(IN ITrayWindow
*Tray
,
368 OUT IMenuBand
**ppMenuBand
,
369 IN HBITMAP hbmBanner OPTIONAL
,
370 IN BOOL bSmallIcons
);
373 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
374 IN HBITMAP hbmBanner OPTIONAL
,
375 IN BOOL bSmallIcons
);
382 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
383 #define TCWM_UPDATETIME (WM_USER + 0x101)
386 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
387 #define TNWM_UPDATETIME (WM_USER + 0x101)
388 #define TNWM_SHOWCLOCK (WM_USER + 0x102)
389 #define TNWM_SHOWTRAY (WM_USER + 0x103)
390 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
392 #define NTNWM_REALIGN (0x1)
395 RegisterTrayNotifyWndClass(VOID
);
398 UnregisterTrayNotifyWndClass(VOID
);
401 CreateTrayNotifyWnd(IN OUT ITrayWindow
*TrayWindow
,
405 TrayNotify_NotifyMsg(IN WPARAM wParam
,
409 TrayNotify_GetClockRect(OUT PRECT rcClock
);
415 #define TSWM_ENABLEGROUPING (WM_USER + 1)
416 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
419 RegisterTaskSwitchWndClass(VOID
);
422 UnregisterTaskSwitchWndClass(VOID
);
425 CreateTaskSwitchWnd(IN HWND hWndParent
,
426 IN OUT ITrayWindow
*Tray
);
429 Tray_OnStartMenuDismissed();
432 IsSameObject(IN IUnknown
*punk1
, IN IUnknown
*punk2
);
434 #endif /* _EXPLORER_PRECOMP__H_ */