1 #ifndef _EXPLORER_PRECOMP__H_
2 #define _EXPLORER_PRECOMP__H_
9 #include <shlobj_undoc.h>
13 #include <shlguid_undoc.h>
29 /* Structure to hold non-default options*/
30 typedef struct _ADVANCED_SETTINGS
{
32 } ADVANCED_SETTINGS
, *PADVANCED_SETTINGS
;
34 extern ADVANCED_SETTINGS AdvancedSettings
;
36 /* dynamic imports due to lack of support in msvc linker libs */
37 typedef INT (APIENTRY
*REGSHELLHOOK
)(HWND
, DWORD
);
39 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempW"
40 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCWSTR
, UINT
);
42 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempA"
43 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCSTR
, UINT
);
45 typedef HRESULT (APIENTRY
*SHINVDEFCMD
)(HWND
, IShellFolder
*, LPCITEMIDLIST
);
46 typedef void (APIENTRY
*RUNFILEDLG
)(HWND
, HICON
, LPCWSTR
, LPCWSTR
, LPCWSTR
, UINT
);
47 typedef void (APIENTRY
*EXITWINDLG
)(HWND
);
48 typedef HRESULT (APIENTRY
*SHWINHELP
)(HWND
, LPWSTR
, UINT
, DWORD
);
50 /* Constants for RunFileDlg */
51 #define RFF_CALCDIRECTORY 0x04 /* Calculates the working directory from the file name. */
54 Win32DbgPrint(const char *filename
, int line
, const char *lpFormat
, ...)
62 fname
= strrchr(filename
, '\\');
65 fname
= strrchr(filename
, '/');
75 szMsgStart
= szMsg
+ sprintf(szMsg
, "%s:%d: ", fname
, line
);
77 va_start(vl
, lpFormat
);
78 uRet
= (ULONG
)vsprintf(szMsgStart
, lpFormat
, vl
);
81 OutputDebugStringA(szMsg
);
86 #define ASSERT(cond) \
88 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
91 #define DbgPrint(fmt, ...) \
92 Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__);
94 extern HINSTANCE hExplorerInstance
;
95 extern HMODULE hUser32
;
96 extern HANDLE hProcessHeap
;
97 extern HKEY hkExplorer
;
98 extern DRAWCAPTEMP DrawCapTemp
;
104 typedef struct _DROPTARGET_CALLBACKS
106 HRESULT (*OnDragEnter
)(IN IDropTarget
*pDropTarget
,
108 IN
const FORMATETC
*Format
,
109 IN DWORD grfKeyState
,
111 IN OUT DWORD
*pdwEffect
);
112 HRESULT (*OnDragOver
)(IN IDropTarget
*pDropTarget
,
114 IN DWORD grfKeyState
,
116 IN OUT DWORD
*pdwEffect
);
117 HRESULT (*OnDragLeave
)(IN IDropTarget
*pDropTarget
,
119 HRESULT (*OnDrop
)(IN IDropTarget
*pDropTarget
,
121 IN
const FORMATETC
*Format
,
122 IN DWORD grfKeyState
,
124 IN OUT DWORD
*pdwEffect
);
125 } DROPTARGET_CALLBACKS
, *PDROPTARGET_CALLBACKS
;
128 CreateDropTarget(IN HWND hwndTarget
,
129 IN DWORD nSupportedFormats
,
130 IN
const FORMATETC
*Formats OPTIONAL
,
131 IN PVOID Context OPTIONAL
,
132 IN
const DROPTARGET_CALLBACKS
*Callbacks OPTIONAL
);
139 SetWindowStyle(IN HWND hWnd
,
144 SetWindowExStyle(IN HWND hWnd
,
149 LoadPopupMenu(IN HINSTANCE hInstance
,
150 IN LPCTSTR lpMenuName
);
153 FindSubMenu(IN HMENU hMenu
,
155 IN BOOL fByPosition
);
158 GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer
,
159 IN DWORD dwBufferSize
);
162 FormatMenuString(IN HMENU hMenu
,
168 GetExplorerRegValueSet(IN HKEY hKey
,
176 typedef HMENU (*PCREATECTXMENU
)(IN HWND hWndOwner
,
177 IN PVOID
*ppcmContext
,
178 IN PVOID Context OPTIONAL
);
179 typedef VOID (*PCTXMENUCOMMAND
)(IN HWND hWndOwner
,
181 IN PVOID pcmContext OPTIONAL
,
182 IN PVOID Context OPTIONAL
);
184 typedef struct _TRAYWINDOW_CTXMENU
186 PCREATECTXMENU CreateCtxMenu
;
187 PCTXMENUCOMMAND CtxMenuCommand
;
188 } TRAYWINDOW_CTXMENU
, *PTRAYWINDOW_CTXMENU
;
190 extern const GUID IID_IShellDesktopTray
;
192 #define INTERFACE ITrayWindow
193 DECLARE_INTERFACE_(ITrayWindow
,IUnknown
)
195 /*** IUnknown methods ***/
196 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
197 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
198 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
199 /*** ITrayWindow methods ***/
200 STDMETHOD_(HRESULT
,Open
) (THIS
) PURE
;
201 STDMETHOD_(HRESULT
,Close
) (THIS
) PURE
;
202 STDMETHOD_(HWND
,GetHWND
) (THIS
) PURE
;
203 STDMETHOD_(BOOL
,IsSpecialHWND
) (THIS_ HWND hWnd
) PURE
;
204 STDMETHOD_(BOOL
,IsHorizontal
) (THIS
) PURE
;
205 STDMETHOD_(HFONT
,GetCaptionFonts
) (THIS_ HFONT
*phBoldCaption
) PURE
;
206 STDMETHOD_(HWND
,DisplayProperties
) (THIS
) PURE
;
207 STDMETHOD_(BOOL
,ExecContextMenuCmd
) (THIS_ UINT uiCmd
) PURE
;
208 STDMETHOD_(BOOL
,Lock
) (THIS_ BOOL bLock
) PURE
;
212 #if defined(COBJMACROS)
213 /*** IUnknown methods ***/
214 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
215 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
216 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
217 /*** ITrayWindow methods ***/
218 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
219 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
220 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
221 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
222 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
223 #define ITrayWindow_GetCaptionFonts(p,a) (p)->lpVtbl->GetCaptionFonts(p,a)
224 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
225 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
226 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
230 RegisterTrayWindowClass(VOID
);
233 UnregisterTrayWindowClass(VOID
);
236 CreateTrayWindow(VOID
);
239 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
242 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
249 DisplayTrayProperties(ITrayWindow
*Tray
);
255 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
258 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
264 /* Internal Task Band CLSID */
265 extern const GUID CLSID_ITaskBand
;
267 #define INTERFACE ITaskBand
268 DECLARE_INTERFACE_(ITaskBand
,IUnknown
)
270 /*** IUnknown methods ***/
271 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
272 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
273 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
274 /*** ITaskBand methods ***/
275 STDMETHOD_(HRESULT
,GetRebarBandID
)(THIS_ DWORD
*pdwBandID
) PURE
;
279 #if defined(COBJMACROS)
280 /*** IUnknown methods ***/
281 #define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
282 #define ITaskBand_AddRef(p) (p)->lpVtbl->AddRef(p)
283 #define ITaskBand_Release(p) (p)->lpVtbl->Release(p)
284 /*** ITaskBand methods ***/
285 #define ITaskBand_GetRebarBandID(p,a) (p)->lpVtbl->GetRebarBandID(p,a)
289 CreateTaskBand(IN OUT ITrayWindow
*Tray
);
295 #define INTERFACE ITrayBandSite
296 DECLARE_INTERFACE_(ITrayBandSite
,IUnknown
)
298 /*** IUnknown methods ***/
299 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
300 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
301 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
302 /*** IBandSiteStreamCallback ***/
303 STDMETHOD_(HRESULT
,OnLoad
)(THIS_ IStream
*pStm
, REFIID riid
, PVOID
*pvObj
) PURE
;
304 STDMETHOD_(HRESULT
,OnSave
)(THIS_ IUnknown
*pUnk
, IStream
*pStm
) PURE
;
305 /*** ITrayBandSite methods ***/
306 STDMETHOD_(HRESULT
,IsTaskBand
) (THIS_ IUnknown
*punk
) PURE
;
307 STDMETHOD_(HRESULT
,ProcessMessage
) (THIS_ HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
) PURE
;
308 STDMETHOD_(HRESULT
,AddContextMenus
) (THIS_ HMENU hmenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
, IContextMenu
**ppcm
) PURE
;
309 STDMETHOD_(HRESULT
,Lock
) (THIS_ BOOL bLock
) PURE
;
313 #if defined(COBJMACROS)
314 /*** IUnknown methods ***/
315 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
316 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
317 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
318 /*** IBandSiteStreamCallback methods ***/
319 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
320 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
321 /*** ITrayBandSite methods ***/
322 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
323 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
324 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
325 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
329 CreateTrayBandSite(IN OUT ITrayWindow
*Tray
,
330 OUT HWND
*phWndRebar
,
331 OUT HWND
*phWndTaskSwitch
);
337 extern const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu
;
339 #define INTERFACE IStartMenuSite
340 DECLARE_INTERFACE_(IStartMenuSite
,IUnknown
)
342 /*** IUnknown methods ***/
343 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
344 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
345 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
346 /*** IStartMenuSite ***/
350 #if defined(COBJMACROS)
351 /*** IUnknown methods ***/
352 #define IStartMenuSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
353 #define IStartMenuSite_AddRef(p) (p)->lpVtbl->AddRef(p)
354 #define IStartMenuSite_Release(p) (p)->lpVtbl->Release(p)
355 /*** IStartMenuSite methods ***/
359 CreateStartMenu(IN ITrayWindow
*Tray
,
360 OUT IMenuBand
**ppMenuBand
,
361 IN HBITMAP hbmBanner OPTIONAL
,
362 IN BOOL bSmallIcons
);
365 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
366 IN HBITMAP hbmBanner OPTIONAL
,
367 IN BOOL bSmallIcons
);
374 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
375 #define TCWM_UPDATETIME (WM_USER + 0x101)
378 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
379 #define TNWM_UPDATETIME (WM_USER + 0x101)
380 #define TNWM_SHOWCLOCK (WM_USER + 0x102)
381 #define TNWM_SHOWTRAY (WM_USER + 0x103)
382 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
384 #define NTNWM_REALIGN (0x1)
387 RegisterTrayNotifyWndClass(VOID
);
390 UnregisterTrayNotifyWndClass(VOID
);
393 CreateTrayNotifyWnd(IN OUT ITrayWindow
*TrayWindow
,
397 TrayNotify_NotifyMsg(IN HWND hwnd
,
405 #define TSWM_ENABLEGROUPING (WM_USER + 1)
406 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
409 RegisterTaskSwitchWndClass(VOID
);
412 UnregisterTaskSwitchWndClass(VOID
);
415 CreateTaskSwitchWnd(IN HWND hWndParent
,
416 IN OUT ITrayWindow
*Tray
);
418 #endif /* _EXPLORER_PRECOMP__H_ */