1 #ifndef _EXPLORER_PRECOMP__H_
2 #define _EXPLORER_PRECOMP__H_
9 #include <shlobj_undoc.h>
13 #include <shlguid_undoc.h>
27 /* dynamic imports due to lack of support in msvc linker libs */
28 typedef INT (APIENTRY
*REGSHELLHOOK
)(HWND
, DWORD
);
30 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempW"
31 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCWSTR
, UINT
);
33 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempA"
34 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCSTR
, UINT
);
36 typedef HRESULT (APIENTRY
*SHINVDEFCMD
)(HWND
, IShellFolder
*, LPCITEMIDLIST
);
37 typedef void (APIENTRY
*RUNFILEDLG
)(HWND
, HICON
, LPCWSTR
, LPCWSTR
, LPCWSTR
, UINT
);
38 typedef void (APIENTRY
*EXITWINDLG
)(HWND
);
39 typedef HRESULT (APIENTRY
*SHWINHELP
)(HWND
, LPWSTR
, UINT
, DWORD
);
41 /* Constants for RunFileDlg */
42 #define RFF_CALCDIRECTORY 0x04 /* Calculates the working directory from the file name. */
45 Win32DbgPrint(const char *filename
, int line
, const char *lpFormat
, ...)
53 fname
= strrchr(filename
, '\\');
56 fname
= strrchr(filename
, '/');
66 szMsgStart
= szMsg
+ sprintf(szMsg
, "%s:%d: ", fname
, line
);
68 va_start(vl
, lpFormat
);
69 uRet
= (ULONG
)vsprintf(szMsgStart
, lpFormat
, vl
);
72 OutputDebugStringA(szMsg
);
77 #define ASSERT(cond) \
79 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
82 #define DbgPrint(fmt, ...) \
83 Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__);
85 extern HINSTANCE hExplorerInstance
;
86 extern HMODULE hUser32
;
87 extern HANDLE hProcessHeap
;
88 extern HKEY hkExplorer
;
89 extern DRAWCAPTEMP DrawCapTemp
;
95 typedef struct _DROPTARGET_CALLBACKS
97 HRESULT (*OnDragEnter
)(IN IDropTarget
*pDropTarget
,
99 IN
const FORMATETC
*Format
,
100 IN DWORD grfKeyState
,
102 IN OUT DWORD
*pdwEffect
);
103 HRESULT (*OnDragOver
)(IN IDropTarget
*pDropTarget
,
105 IN DWORD grfKeyState
,
107 IN OUT DWORD
*pdwEffect
);
108 HRESULT (*OnDragLeave
)(IN IDropTarget
*pDropTarget
,
110 HRESULT (*OnDrop
)(IN IDropTarget
*pDropTarget
,
112 IN
const FORMATETC
*Format
,
113 IN DWORD grfKeyState
,
115 IN OUT DWORD
*pdwEffect
);
116 } DROPTARGET_CALLBACKS
, *PDROPTARGET_CALLBACKS
;
119 CreateDropTarget(IN HWND hwndTarget
,
120 IN DWORD nSupportedFormats
,
121 IN
const FORMATETC
*Formats OPTIONAL
,
122 IN PVOID Context OPTIONAL
,
123 IN
const DROPTARGET_CALLBACKS
*Callbacks OPTIONAL
);
130 SetWindowStyle(IN HWND hWnd
,
135 SetWindowExStyle(IN HWND hWnd
,
140 LoadPopupMenu(IN HINSTANCE hInstance
,
141 IN LPCTSTR lpMenuName
);
144 FindSubMenu(IN HMENU hMenu
,
146 IN BOOL fByPosition
);
149 GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer
,
150 IN DWORD dwBufferSize
);
153 FormatMenuString(IN HMENU hMenu
,
159 GetExplorerRegValueSet(IN HKEY hKey
,
167 typedef HMENU (*PCREATECTXMENU
)(IN HWND hWndOwner
,
168 IN PVOID
*ppcmContext
,
169 IN PVOID Context OPTIONAL
);
170 typedef VOID (*PCTXMENUCOMMAND
)(IN HWND hWndOwner
,
172 IN PVOID pcmContext OPTIONAL
,
173 IN PVOID Context OPTIONAL
);
175 typedef struct _TRAYWINDOW_CTXMENU
177 PCREATECTXMENU CreateCtxMenu
;
178 PCTXMENUCOMMAND CtxMenuCommand
;
179 } TRAYWINDOW_CTXMENU
, *PTRAYWINDOW_CTXMENU
;
181 extern const GUID IID_IShellDesktopTray
;
183 #define INTERFACE ITrayWindow
184 DECLARE_INTERFACE_(ITrayWindow
,IUnknown
)
186 /*** IUnknown methods ***/
187 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
188 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
189 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
190 /*** ITrayWindow methods ***/
191 STDMETHOD_(HRESULT
,Open
) (THIS
) PURE
;
192 STDMETHOD_(HRESULT
,Close
) (THIS
) PURE
;
193 STDMETHOD_(HWND
,GetHWND
) (THIS
) PURE
;
194 STDMETHOD_(BOOL
,IsSpecialHWND
) (THIS_ HWND hWnd
) PURE
;
195 STDMETHOD_(BOOL
,IsHorizontal
) (THIS
) PURE
;
196 STDMETHOD_(HFONT
,GetCaptionFonts
) (THIS_ HFONT
*phBoldCaption
) PURE
;
197 STDMETHOD_(HWND
,DisplayProperties
) (THIS
) PURE
;
198 STDMETHOD_(BOOL
,ExecContextMenuCmd
) (THIS_ UINT uiCmd
) PURE
;
199 STDMETHOD_(BOOL
,Lock
) (THIS_ BOOL bLock
) PURE
;
203 #if defined(COBJMACROS)
204 /*** IUnknown methods ***/
205 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
206 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
207 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
208 /*** ITrayWindow methods ***/
209 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
210 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
211 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
212 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
213 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
214 #define ITrayWindow_GetCaptionFonts(p,a) (p)->lpVtbl->GetCaptionFonts(p,a)
215 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
216 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
217 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
221 RegisterTrayWindowClass(VOID
);
224 UnregisterTrayWindowClass(VOID
);
227 CreateTrayWindow(VOID
);
230 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
233 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
240 DisplayTrayProperties(ITrayWindow
*Tray
);
246 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
249 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
255 /* Internal Task Band CLSID */
256 extern const GUID CLSID_ITaskBand
;
258 #define INTERFACE ITaskBand
259 DECLARE_INTERFACE_(ITaskBand
,IUnknown
)
261 /*** IUnknown methods ***/
262 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
263 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
264 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
265 /*** ITaskBand methods ***/
266 STDMETHOD_(HRESULT
,GetRebarBandID
)(THIS_ DWORD
*pdwBandID
) PURE
;
270 #if defined(COBJMACROS)
271 /*** IUnknown methods ***/
272 #define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
273 #define ITaskBand_AddRef(p) (p)->lpVtbl->AddRef(p)
274 #define ITaskBand_Release(p) (p)->lpVtbl->Release(p)
275 /*** ITaskBand methods ***/
276 #define ITaskBand_GetRebarBandID(p,a) (p)->lpVtbl->GetRebarBandID(p,a)
280 CreateTaskBand(IN OUT ITrayWindow
*Tray
);
286 #define INTERFACE ITrayBandSite
287 DECLARE_INTERFACE_(ITrayBandSite
,IUnknown
)
289 /*** IUnknown methods ***/
290 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
291 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
292 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
293 /*** IBandSiteStreamCallback ***/
294 STDMETHOD_(HRESULT
,OnLoad
)(THIS_ IStream
*pStm
, REFIID riid
, PVOID
*pvObj
) PURE
;
295 STDMETHOD_(HRESULT
,OnSave
)(THIS_ IUnknown
*pUnk
, IStream
*pStm
) PURE
;
296 /*** ITrayBandSite methods ***/
297 STDMETHOD_(HRESULT
,IsTaskBand
) (THIS_ IUnknown
*punk
) PURE
;
298 STDMETHOD_(HRESULT
,ProcessMessage
) (THIS_ HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
) PURE
;
299 STDMETHOD_(HRESULT
,AddContextMenus
) (THIS_ HMENU hmenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
, IContextMenu
**ppcm
) PURE
;
300 STDMETHOD_(HRESULT
,Lock
) (THIS_ BOOL bLock
) PURE
;
304 #if defined(COBJMACROS)
305 /*** IUnknown methods ***/
306 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
307 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
308 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
309 /*** IBandSiteStreamCallback methods ***/
310 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
311 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
312 /*** ITrayBandSite methods ***/
313 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
314 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
315 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
316 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
320 CreateTrayBandSite(IN OUT ITrayWindow
*Tray
,
321 OUT HWND
*phWndRebar
,
322 OUT HWND
*phWndTaskSwitch
);
328 extern const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu
;
330 #define INTERFACE IStartMenuSite
331 DECLARE_INTERFACE_(IStartMenuSite
,IUnknown
)
333 /*** IUnknown methods ***/
334 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
335 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
336 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
337 /*** IStartMenuSite ***/
341 #if defined(COBJMACROS)
342 /*** IUnknown methods ***/
343 #define IStartMenuSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
344 #define IStartMenuSite_AddRef(p) (p)->lpVtbl->AddRef(p)
345 #define IStartMenuSite_Release(p) (p)->lpVtbl->Release(p)
346 /*** IStartMenuSite methods ***/
350 CreateStartMenu(IN ITrayWindow
*Tray
,
351 OUT IMenuBand
**ppMenuBand
,
352 IN HBITMAP hbmBanner OPTIONAL
,
353 IN BOOL bSmallIcons
);
356 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
357 IN HBITMAP hbmBanner OPTIONAL
,
358 IN BOOL bSmallIcons
);
365 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
366 #define TCWM_UPDATETIME (WM_USER + 0x101)
369 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
370 #define TNWM_UPDATETIME (WM_USER + 0x101)
371 #define TNWM_SHOWCLOCK (WM_USER + 0x102)
372 #define TNWM_SHOWTRAY (WM_USER + 0x103)
373 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
375 #define NTNWM_REALIGN (0x1)
378 RegisterTrayNotifyWndClass(VOID
);
381 UnregisterTrayNotifyWndClass(VOID
);
384 CreateTrayNotifyWnd(IN OUT ITrayWindow
*TrayWindow
,
391 #define TSWM_ENABLEGROUPING (WM_USER + 1)
392 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
395 RegisterTaskSwitchWndClass(VOID
);
398 UnregisterTaskSwitchWndClass(VOID
);
401 CreateTaskSwitchWnd(IN HWND hWndParent
,
402 IN OUT ITrayWindow
*Tray
);
404 #endif /* _EXPLORER_PRECOMP__H_ */