4 * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 extern HRESULT
IUnknown_ShowDW(IUnknown
* punk
, BOOL fShow
);
29 #include "newatlinterfaces.h"
33 **Provide implementation of new and delete that use LocalAlloc
34 **Persist history for shell view isn't working correctly, possibly because of the mismatch between traveling and updating the travel log. The
35 view doesn't restore the selection correctly.
36 **Build explorer.exe, browseui.dll, comctl32.dll, shdocvw.dll, shell32.dll, shlwapi.dll into a directory and run them for testing...
37 **Add brand band bitmaps to shell32.dll
38 **If Go button on address bar is clicked, each time a new duplicate entry is added to travel log
39 ****The current entry is updated in travel log before doing the travel, which means when traveling back the update of the
40 current state overwrites the wrong entry's contents. This needs to be changed.
41 ****Fix close of browser window to release all objects
42 ****Given only a GUID in ShowBrowserBar, what is the correct way to determine if the bar is vertical or horizontal?
43 **When a new bar is added to base bar site, how is base bar told so it can resize?
44 **Does the base bar site have a classid?
45 **What should refresh command send to views to make them refresh?
46 **When new bar is created, what status notifications need to be fired?
47 **How does keyboard filtering dispatch?
48 **For deferred persist history load, how does the view connect up and get the state?
49 How does context menu send open, cut, rename commands to its site (the shell view)?
50 **Fix browser to implement IProfferService and hold onto brand band correctly - this will allow animations.
52 **Route View->Toolbars commands to internet toolbar
53 **Handle travel log items in View->Go
54 **Fix ShowBrowserBar to pass correct size on when bar is shown
55 ****Fix SetBorderSpaceDW to cascade resize to subsequent bars
56 ****Make ShowToolbar check if bar is already created before creating it again
57 ****Shell should fill in the list of explorer bars in the View submenus
58 **Add folder menu in the file menu
59 **Fix CShellBrowser::GetBorderDW to compute available size correctly
60 **When a new bar is shown, re-fire the navigate event. This makes the explorer band select the correct folder
61 **Implement support for refresh. Forward refresh to explorer bar (refresh on toolbar and in menu is dispatched different)
62 Make folders toolbar item update state appropriately
63 Read list of bands from registry on launch
64 Read list of bars from registry on launch
65 If the folders or search bars don't exist, disable the toolbar buttons
66 If the favorites or history bars don't exist, disable the toolbar butons
67 Fix Apply to all Folders in Folder Options
68 Implement close command
69 Add explorer band context menu to file menu
70 Add code to allow restore of internet toolbar from registry
71 Fix code that calls FireNavigateComplete to pass the correct new path
73 What are the other command ids for QueryStatus/FireCommandStateChange?
75 Add handler for cabinet settings change
76 Add handler for system metrics change (renegotiate border space?)
77 Add handler for theme change and forward to contained windows
79 When folders are shown, the status bar text should change
80 Add code to save/restore shell view settings
81 Implement tabbing between frames
82 Fix handling of focus everywhere
83 Most keyboard shortcuts don't work, such as F2 for rename, F5 for refresh (see list in "explorer keyboard shortcuts")
85 The status bar doesn't show help text for items owned by frame during menu tracking
86 Stub out frame command handlers
87 "Arrange icons by" group is not checked properly
89 When folders are hidden, icon is the same as the current shell object being displayed. When folders are shown,
90 the icon is always an open folder with magnifying glass
91 Fix bars to calculate height correctly
92 Hookup policies for everything...
93 Investigate toolbar message WM_USER+93
94 Investigate toolbar message WM_USER+100 (Adds extra padding between parts of buttons with BTNS_DROPDOWN | BTNS_SHOWTEXT style
96 Vertical Explorer Bar CATID_InfoBand
97 Horizontal Explorer Bar CATID_CommBand
98 Desk Band CATID_DeskBand
101 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021493-0000-0000-C000-000000000046}\Enum
102 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021494-0000-0000-C000-000000000046}\Enum
104 create key here with CLSID of bar to register tool band
105 HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Toolbar
110 #pragma comment(linker, \
111 "\"/manifestdependency:type='Win32' "\
112 "name='Microsoft.Windows.Common-Controls' "\
113 "version='6.0.0.0' "\
114 "processorArchitecture='*' "\
115 "publicKeyToken='6595b64144ccf1df' "\
119 static const unsigned int folderOptionsPageCountMax
= 20;
120 static const long BTP_DONT_UPDATE_HISTORY
= 0;
121 static const long BTP_UPDATE_CUR_HISTORY
= 1;
122 static const long BTP_UPDATE_NEXT_HISTORY
= 2;
124 BOOL createNewStuff
= false;
127 // this class is private to browseui.dll and is not registered externally?
128 //DEFINE_GUID(CLSID_ShellFldSetExt, 0x6D5313C0, 0x8C62, 0x11D1, 0xB2, 0xCD, 0x00, 0x60, 0x97, 0xDF, 0x8C, 0x11);
130 void DeleteMenuItems(HMENU theMenu
, unsigned int firstIDToDelete
, unsigned int lastIDToDelete
)
132 MENUITEMINFO menuItemInfo
;
136 menuItemCount
= GetMenuItemCount(theMenu
);
138 while (curIndex
< menuItemCount
)
140 menuItemInfo
.cbSize
= sizeof(menuItemInfo
);
141 menuItemInfo
.fMask
= MIIM_ID
;
142 if (GetMenuItemInfo(theMenu
, curIndex
, TRUE
, &menuItemInfo
) &&
143 menuItemInfo
.wID
>= firstIDToDelete
&& menuItemInfo
.wID
<= lastIDToDelete
)
145 DeleteMenu(theMenu
, curIndex
, MF_BYPOSITION
);
153 HRESULT WINAPI
SHBindToFolder(LPCITEMIDLIST path
, IShellFolder
**newFolder
)
155 CComPtr
<IShellFolder
> desktop
;
157 HRESULT hr
= ::SHGetDesktopFolder(&desktop
);
158 if (FAILED_UNEXPECTEDLY(hr
))
160 if (path
== NULL
|| path
->mkid
.cb
== 0)
162 *newFolder
= desktop
;
163 desktop
.p
->AddRef ();
166 return desktop
->BindToObject (path
, NULL
, IID_PPV_ARG(IShellFolder
, newFolder
));
169 static const TCHAR szCabinetWndClass
[] = TEXT("CabinetWClassX");
170 static const TCHAR szExploreWndClass
[] = TEXT("ExploreWClassX");
175 class CToolbarProxy
:
176 public CWindowImpl
<CToolbarProxy
, CWindow
, CControlWinTraits
>
179 CComPtr
<IExplorerToolbar
> fExplorerToolbar
;
181 void Initialize(HWND parent
, IUnknown
*explorerToolbar
);
186 LRESULT
OnAddBitmap(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
187 LRESULT
OnForwardMessage(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
189 BEGIN_MSG_MAP(CToolbarProxy
)
190 MESSAGE_HANDLER(TB_ADDBITMAP
, OnAddBitmap
)
191 MESSAGE_RANGE_HANDLER(WM_USER
, 0x7fff, OnForwardMessage
)
195 void CToolbarProxy::Initialize(HWND parent
, IUnknown
*explorerToolbar
)
200 myWindow
= SHCreateWorkerWindowW(0, parent
, 0, WS_CHILD
, NULL
, 0);
201 if (myWindow
!= NULL
)
203 SubclassWindow(myWindow
);
204 SetWindowPos(NULL
, -32000, -32000, 0, 0, SWP_NOOWNERZORDER
| SWP_NOZORDER
);
205 hResult
= explorerToolbar
->QueryInterface(
206 IID_PPV_ARG(IExplorerToolbar
, &fExplorerToolbar
));
210 LRESULT
CToolbarProxy::OnAddBitmap(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
)
216 if (fExplorerToolbar
.p
!= NULL
)
218 hResult
= fExplorerToolbar
->AddBitmap(&CGID_ShellBrowser
, 1, (long)wParam
,
219 reinterpret_cast<TBADDBITMAP
*>(lParam
), &result
, RGB(192, 192, 192));
220 hResult
= fExplorerToolbar
->AddBitmap(&CGID_ShellBrowser
, 2, (long)wParam
,
221 reinterpret_cast<TBADDBITMAP
*>(lParam
), &result
, RGB(192, 192, 192));
226 LRESULT
CToolbarProxy::OnForwardMessage(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
)
232 if (fExplorerToolbar
.p
!= NULL
)
233 hResult
= fExplorerToolbar
->SendToolbarMsg(&CGID_ShellBrowser
, uMsg
, wParam
, lParam
, &result
);
238 Switch to a new bar when it receives an Exec(CGID_IDeskBand, 1, 1, vaIn, NULL);
239 where vaIn will be a VT_UNKNOWN with the new bar. It also sends a RB_SHOWBAND to the
243 struct MenuBandInfo
{
248 class CShellBrowser
:
249 public CWindowImpl
<CShellBrowser
, CWindow
, CFrameWinTraits
>,
250 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
251 public IShellBrowser
,
253 public IServiceProvider
,
254 public IProfferServiceImpl
<CShellBrowser
>,
255 public IShellBrowserService
,
257 public ITravelLogClient
,
258 public IPersistHistory
,
259 public IDockingWindowSite
,
260 public IOleCommandTarget
,
261 public IBrowserService2
,
262 public IConnectionPointContainerImpl
<CShellBrowser
>,
263 public MyIConnectionPointImpl
<CShellBrowser
, &DIID_DWebBrowserEvents2
>,
264 public MyIConnectionPointImpl
<CShellBrowser
, &DIID_DWebBrowserEvents
>
271 CComPtr
<IUnknown
> clientBar
;
274 static const int BIInternetToolbar
= 0;
275 static const int BIVerticalBaseBar
= 1;
276 static const int BIHorizontalBaseBar
= 2;
278 HWND fCurrentShellViewWindow
; // our currently hosted shell view window
279 CComPtr
<IShellFolder
> fCurrentShellFolder
; //
280 CComPtr
<IShellView
> fCurrentShellView
; //
281 LPITEMIDLIST fCurrentDirectoryPIDL
; //
283 bool fStatusBarVisible
;
284 CToolbarProxy fToolbarProxy
;
285 barInfo fClientBars
[3];
286 CComPtr
<ITravelLog
> fTravelLog
;
287 HMENU fCurrentMenuBar
;
288 CABINETSTATE fCabinetState
;
289 // The next three fields support persisted history for shell views.
290 // They do not need to be reference counted.
291 IOleObject
*fHistoryObject
;
292 IStream
*fHistoryStream
;
293 IBindCtx
*fHistoryBindContext
;
298 ULONG
InternalAddRef()
300 OutputDebugString(_T("AddRef\n"));
301 return CComObjectRootEx
<CComMultiThreadModelNoCS
>::InternalAddRef();
303 ULONG
InternalRelease()
305 OutputDebugString(_T("Release\n"));
306 return CComObjectRootEx
<CComMultiThreadModelNoCS
>::InternalRelease();
312 HRESULT
Initialize(LPITEMIDLIST pidl
, long b
, long c
, long d
);
314 HRESULT
BrowseToPIDL(LPCITEMIDLIST pidl
, long flags
);
315 HRESULT
BrowseToPath(IShellFolder
*newShellFolder
, LPCITEMIDLIST absolutePIDL
,
316 FOLDERSETTINGS
*folderSettings
, long flags
);
317 HRESULT
GetMenuBand(REFIID riid
, void **shellMenu
);
318 HRESULT
GetBaseBar(bool vertical
, REFIID riid
, void **theBaseBar
);
319 BOOL
IsBandLoaded(const CLSID clsidBand
, bool verticali
, DWORD
*pdwBandID
);
320 HRESULT
ShowBand(const CLSID
&classID
, bool vertical
);
321 HRESULT
NavigateToParent();
322 HRESULT
DoFolderOptions();
323 static LRESULT CALLBACK
WindowProc(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
324 void RepositionBars();
325 HRESULT
BuildExplorerBandMenu();
326 HRESULT
BuildExplorerBandCategory(HMENU hBandsMenu
, CATID category
, DWORD dwPos
, UINT
*nbFound
);
327 BOOL
IsBuiltinBand(CLSID
&bandID
);
328 virtual WNDPROC
GetWindowProc()
332 HRESULT
FireEvent(DISPID dispIdMember
, int argCount
, VARIANT
*arguments
);
333 HRESULT
FireNavigateComplete(const wchar_t *newDirectory
);
334 HRESULT
FireCommandStateChange(bool newState
, int commandID
);
335 HRESULT
FireCommandStateChangeAll();
336 HRESULT
UpdateForwardBackState();
337 HRESULT
UpdateUpState();
338 void UpdateGotoMenu(HMENU theMenu
);
339 void UpdateViewMenu(HMENU theMenu
);
341 /* // *** IDockingWindowFrame methods ***
342 virtual HRESULT STDMETHODCALLTYPE AddToolbar(IUnknown *punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags);
343 virtual HRESULT STDMETHODCALLTYPE RemoveToolbar(IUnknown *punkSrc, DWORD dwRemoveFlags);
344 virtual HRESULT STDMETHODCALLTYPE FindToolbar(LPCWSTR pwszItem, REFIID riid, void **ppv);
347 // *** IDockingWindowSite methods ***
348 virtual HRESULT STDMETHODCALLTYPE
GetBorderDW(IUnknown
* punkObj
, LPRECT prcBorder
);
349 virtual HRESULT STDMETHODCALLTYPE
RequestBorderSpaceDW(IUnknown
* punkObj
, LPCBORDERWIDTHS pbw
);
350 virtual HRESULT STDMETHODCALLTYPE
SetBorderSpaceDW(IUnknown
* punkObj
, LPCBORDERWIDTHS pbw
);
352 // *** IOleCommandTarget methods ***
353 virtual HRESULT STDMETHODCALLTYPE
QueryStatus(const GUID
*pguidCmdGroup
, ULONG cCmds
,
354 OLECMD prgCmds
[ ], OLECMDTEXT
*pCmdText
);
355 virtual HRESULT STDMETHODCALLTYPE
Exec(const GUID
*pguidCmdGroup
, DWORD nCmdID
,
356 DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
);
358 // *** IOleWindow methods ***
359 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*lphwnd
);
360 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
);
362 // *** IShellBrowser methods ***
363 virtual HRESULT STDMETHODCALLTYPE
InsertMenusSB(HMENU hmenuShared
, LPOLEMENUGROUPWIDTHS lpMenuWidths
);
364 virtual HRESULT STDMETHODCALLTYPE
SetMenuSB(HMENU hmenuShared
, HOLEMENU holemenuRes
, HWND hwndActiveObject
);
365 virtual HRESULT STDMETHODCALLTYPE
RemoveMenusSB(HMENU hmenuShared
);
366 virtual HRESULT STDMETHODCALLTYPE
SetStatusTextSB(LPCOLESTR pszStatusText
);
367 virtual HRESULT STDMETHODCALLTYPE
EnableModelessSB(BOOL fEnable
);
368 virtual HRESULT STDMETHODCALLTYPE
TranslateAcceleratorSB(MSG
*pmsg
, WORD wID
);
369 virtual HRESULT STDMETHODCALLTYPE
BrowseObject(LPCITEMIDLIST pidl
, UINT wFlags
);
370 virtual HRESULT STDMETHODCALLTYPE
GetViewStateStream(DWORD grfMode
, IStream
**ppStrm
);
371 virtual HRESULT STDMETHODCALLTYPE
GetControlWindow(UINT id
, HWND
*lphwnd
);
372 virtual HRESULT STDMETHODCALLTYPE
SendControlMsg(UINT id
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*pret
);
373 virtual HRESULT STDMETHODCALLTYPE
QueryActiveShellView(IShellView
**ppshv
);
374 virtual HRESULT STDMETHODCALLTYPE
OnViewWindowActive(IShellView
*ppshv
);
375 virtual HRESULT STDMETHODCALLTYPE
SetToolbarItems(LPTBBUTTON lpButtons
, UINT nButtons
, UINT uFlags
);
377 // *** IDropTarget methods ***
378 virtual HRESULT STDMETHODCALLTYPE
DragEnter(IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
);
379 virtual HRESULT STDMETHODCALLTYPE
DragOver(DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
);
380 virtual HRESULT STDMETHODCALLTYPE
DragLeave();
381 virtual HRESULT STDMETHODCALLTYPE
Drop(IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
);
383 // *** IServiceProvider methods ***
384 virtual HRESULT STDMETHODCALLTYPE
QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
);
386 // *** IShellBowserService methods ***
387 virtual HRESULT STDMETHODCALLTYPE
GetPropertyBag(long flags
, REFIID riid
, void **ppvObject
);
389 // *** IDispatch methods ***
390 virtual HRESULT STDMETHODCALLTYPE
GetTypeInfoCount(UINT
*pctinfo
);
391 virtual HRESULT STDMETHODCALLTYPE
GetTypeInfo(UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
);
392 virtual HRESULT STDMETHODCALLTYPE
GetIDsOfNames(
393 REFIID riid
, LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
);
394 virtual HRESULT STDMETHODCALLTYPE
Invoke(DISPID dispIdMember
, REFIID riid
, LCID lcid
, WORD wFlags
,
395 DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
);
397 // *** IBrowserService methods ***
398 virtual HRESULT STDMETHODCALLTYPE
GetParentSite(IOleInPlaceSite
**ppipsite
);
399 virtual HRESULT STDMETHODCALLTYPE
SetTitle(IShellView
*psv
, LPCWSTR pszName
);
400 virtual HRESULT STDMETHODCALLTYPE
GetTitle(IShellView
*psv
, LPWSTR pszName
, DWORD cchName
);
401 virtual HRESULT STDMETHODCALLTYPE
GetOleObject(IOleObject
**ppobjv
);
402 virtual HRESULT STDMETHODCALLTYPE
GetTravelLog(ITravelLog
**pptl
);
403 virtual HRESULT STDMETHODCALLTYPE
ShowControlWindow(UINT id
, BOOL fShow
);
404 virtual HRESULT STDMETHODCALLTYPE
IsControlWindowShown(UINT id
, BOOL
*pfShown
);
405 virtual HRESULT STDMETHODCALLTYPE
IEGetDisplayName(LPCITEMIDLIST pidl
, LPWSTR pwszName
, UINT uFlags
);
406 virtual HRESULT STDMETHODCALLTYPE
IEParseDisplayName(UINT uiCP
, LPCWSTR pwszPath
, LPITEMIDLIST
*ppidlOut
);
407 virtual HRESULT STDMETHODCALLTYPE
DisplayParseError(HRESULT hres
, LPCWSTR pwszPath
);
408 virtual HRESULT STDMETHODCALLTYPE
NavigateToPidl(LPCITEMIDLIST pidl
, DWORD grfHLNF
);
409 virtual HRESULT STDMETHODCALLTYPE
SetNavigateState(BNSTATE bnstate
);
410 virtual HRESULT STDMETHODCALLTYPE
GetNavigateState(BNSTATE
*pbnstate
);
411 virtual HRESULT STDMETHODCALLTYPE
NotifyRedirect(IShellView
*psv
, LPCITEMIDLIST pidl
, BOOL
*pfDidBrowse
);
412 virtual HRESULT STDMETHODCALLTYPE
UpdateWindowList();
413 virtual HRESULT STDMETHODCALLTYPE
UpdateBackForwardState();
414 virtual HRESULT STDMETHODCALLTYPE
SetFlags(DWORD dwFlags
, DWORD dwFlagMask
);
415 virtual HRESULT STDMETHODCALLTYPE
GetFlags(DWORD
*pdwFlags
);
416 virtual HRESULT STDMETHODCALLTYPE
CanNavigateNow( void);
417 virtual HRESULT STDMETHODCALLTYPE
GetPidl(LPITEMIDLIST
*ppidl
);
418 virtual HRESULT STDMETHODCALLTYPE
SetReferrer(LPCITEMIDLIST pidl
);
419 virtual DWORD STDMETHODCALLTYPE
GetBrowserIndex();
420 virtual HRESULT STDMETHODCALLTYPE
GetBrowserByIndex(DWORD dwID
, IUnknown
**ppunk
);
421 virtual HRESULT STDMETHODCALLTYPE
GetHistoryObject(IOleObject
**ppole
, IStream
**pstm
, IBindCtx
**ppbc
);
422 virtual HRESULT STDMETHODCALLTYPE
SetHistoryObject(IOleObject
*pole
, BOOL fIsLocalAnchor
);
423 virtual HRESULT STDMETHODCALLTYPE
CacheOLEServer(IOleObject
*pole
);
424 virtual HRESULT STDMETHODCALLTYPE
GetSetCodePage(VARIANT
*pvarIn
, VARIANT
*pvarOut
);
425 virtual HRESULT STDMETHODCALLTYPE
OnHttpEquiv(IShellView
*psv
, BOOL fDone
, VARIANT
*pvarargIn
, VARIANT
*pvarargOut
);
426 virtual HRESULT STDMETHODCALLTYPE
GetPalette(HPALETTE
*hpal
);
427 virtual HRESULT STDMETHODCALLTYPE
RegisterWindow(BOOL fForceRegister
, int swc
);
429 // *** IBrowserService2 methods ***
430 virtual LRESULT STDMETHODCALLTYPE
WndProcBS(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
431 virtual HRESULT STDMETHODCALLTYPE
SetAsDefFolderSettings();
432 virtual HRESULT STDMETHODCALLTYPE
GetViewRect(RECT
*prc
);
433 virtual HRESULT STDMETHODCALLTYPE
OnSize(WPARAM wParam
);
434 virtual HRESULT STDMETHODCALLTYPE
OnCreate(struct tagCREATESTRUCTW
*pcs
);
435 virtual LRESULT STDMETHODCALLTYPE
OnCommand(WPARAM wParam
, LPARAM lParam
);
436 virtual HRESULT STDMETHODCALLTYPE
OnDestroy();
437 virtual LRESULT STDMETHODCALLTYPE
OnNotify(struct tagNMHDR
*pnm
);
438 virtual HRESULT STDMETHODCALLTYPE
OnSetFocus();
439 virtual HRESULT STDMETHODCALLTYPE
OnFrameWindowActivateBS(BOOL fActive
);
440 virtual HRESULT STDMETHODCALLTYPE
ReleaseShellView();
441 virtual HRESULT STDMETHODCALLTYPE
ActivatePendingView();
442 virtual HRESULT STDMETHODCALLTYPE
CreateViewWindow(IShellView
*psvNew
, IShellView
*psvOld
, LPRECT prcView
, HWND
*phwnd
);
443 virtual HRESULT STDMETHODCALLTYPE
CreateBrowserPropSheetExt(REFIID riid
, void **ppv
);
444 virtual HRESULT STDMETHODCALLTYPE
GetViewWindow(HWND
*phwndView
);
445 virtual HRESULT STDMETHODCALLTYPE
GetBaseBrowserData(LPCBASEBROWSERDATA
*pbbd
);
446 virtual LPBASEBROWSERDATA STDMETHODCALLTYPE
PutBaseBrowserData( void);
447 virtual HRESULT STDMETHODCALLTYPE
InitializeTravelLog(ITravelLog
*ptl
, DWORD dw
);
448 virtual HRESULT STDMETHODCALLTYPE
SetTopBrowser();
449 virtual HRESULT STDMETHODCALLTYPE
Offline(int iCmd
);
450 virtual HRESULT STDMETHODCALLTYPE
AllowViewResize(BOOL f
);
451 virtual HRESULT STDMETHODCALLTYPE
SetActivateState(UINT u
);
452 virtual HRESULT STDMETHODCALLTYPE
UpdateSecureLockIcon(int eSecureLock
);
453 virtual HRESULT STDMETHODCALLTYPE
InitializeDownloadManager();
454 virtual HRESULT STDMETHODCALLTYPE
InitializeTransitionSite();
455 virtual HRESULT STDMETHODCALLTYPE
_Initialize(HWND hwnd
, IUnknown
*pauto
);
456 virtual HRESULT STDMETHODCALLTYPE
_CancelPendingNavigationAsync( void);
457 virtual HRESULT STDMETHODCALLTYPE
_CancelPendingView();
458 virtual HRESULT STDMETHODCALLTYPE
_MaySaveChanges();
459 virtual HRESULT STDMETHODCALLTYPE
_PauseOrResumeView(BOOL fPaused
);
460 virtual HRESULT STDMETHODCALLTYPE
_DisableModeless();
461 virtual HRESULT STDMETHODCALLTYPE
_NavigateToPidl(LPCITEMIDLIST pidl
, DWORD grfHLNF
, DWORD dwFlags
);
462 virtual HRESULT STDMETHODCALLTYPE
_TryShell2Rename(IShellView
*psv
, LPCITEMIDLIST pidlNew
);
463 virtual HRESULT STDMETHODCALLTYPE
_SwitchActivationNow();
464 virtual HRESULT STDMETHODCALLTYPE
_ExecChildren(IUnknown
*punkBar
, BOOL fBroadcast
, const GUID
*pguidCmdGroup
,
465 DWORD nCmdID
, DWORD nCmdexecopt
, VARIANTARG
*pvarargIn
, VARIANTARG
*pvarargOut
);
466 virtual HRESULT STDMETHODCALLTYPE
_SendChildren(
467 HWND hwndBar
, BOOL fBroadcast
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
468 virtual HRESULT STDMETHODCALLTYPE
GetFolderSetData(struct tagFolderSetData
*pfsd
);
469 virtual HRESULT STDMETHODCALLTYPE
_OnFocusChange(UINT itb
);
470 virtual HRESULT STDMETHODCALLTYPE
v_ShowHideChildWindows(BOOL fChildOnly
);
471 virtual UINT STDMETHODCALLTYPE
_get_itbLastFocus();
472 virtual HRESULT STDMETHODCALLTYPE
_put_itbLastFocus(UINT itbLastFocus
);
473 virtual HRESULT STDMETHODCALLTYPE
_UIActivateView(UINT uState
);
474 virtual HRESULT STDMETHODCALLTYPE
_GetViewBorderRect(RECT
*prc
);
475 virtual HRESULT STDMETHODCALLTYPE
_UpdateViewRectSize();
476 virtual HRESULT STDMETHODCALLTYPE
_ResizeNextBorder(UINT itb
);
477 virtual HRESULT STDMETHODCALLTYPE
_ResizeView();
478 virtual HRESULT STDMETHODCALLTYPE
_GetEffectiveClientArea(LPRECT lprectBorder
, HMONITOR hmon
);
479 virtual IStream
*STDMETHODCALLTYPE
v_GetViewStream(LPCITEMIDLIST pidl
, DWORD grfMode
, LPCWSTR pwszName
);
480 virtual LRESULT STDMETHODCALLTYPE
ForwardViewMsg(UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
481 virtual HRESULT STDMETHODCALLTYPE
SetAcceleratorMenu(HACCEL hacc
);
482 virtual int STDMETHODCALLTYPE
_GetToolbarCount();
483 virtual LPTOOLBARITEM STDMETHODCALLTYPE
_GetToolbarItem(int itb
);
484 virtual HRESULT STDMETHODCALLTYPE
_SaveToolbars(IStream
*pstm
);
485 virtual HRESULT STDMETHODCALLTYPE
_LoadToolbars(IStream
*pstm
);
486 virtual HRESULT STDMETHODCALLTYPE
_CloseAndReleaseToolbars(BOOL fClose
);
487 virtual HRESULT STDMETHODCALLTYPE
v_MayGetNextToolbarFocus(LPMSG lpMsg
, UINT itbNext
,
488 int citb
, LPTOOLBARITEM
*pptbi
, HWND
*phwnd
);
489 virtual HRESULT STDMETHODCALLTYPE
_ResizeNextBorderHelper(UINT itb
, BOOL bUseHmonitor
);
490 virtual UINT STDMETHODCALLTYPE
_FindTBar(IUnknown
*punkSrc
);
491 virtual HRESULT STDMETHODCALLTYPE
_SetFocus(LPTOOLBARITEM ptbi
, HWND hwnd
, LPMSG lpMsg
);
492 virtual HRESULT STDMETHODCALLTYPE
v_MayTranslateAccelerator(MSG
*pmsg
);
493 virtual HRESULT STDMETHODCALLTYPE
_GetBorderDWHelper(IUnknown
*punkSrc
, LPRECT lprectBorder
, BOOL bUseHmonitor
);
494 virtual HRESULT STDMETHODCALLTYPE
v_CheckZoneCrossing(LPCITEMIDLIST pidl
);
496 // *** IWebBrowser methods ***
497 virtual HRESULT STDMETHODCALLTYPE
GoBack();
498 virtual HRESULT STDMETHODCALLTYPE
GoForward();
499 virtual HRESULT STDMETHODCALLTYPE
GoHome();
500 virtual HRESULT STDMETHODCALLTYPE
GoSearch();
501 virtual HRESULT STDMETHODCALLTYPE
Navigate(BSTR URL
, VARIANT
*Flags
, VARIANT
*TargetFrameName
,
502 VARIANT
*PostData
, VARIANT
*Headers
);
503 virtual HRESULT STDMETHODCALLTYPE
Refresh();
504 virtual HRESULT STDMETHODCALLTYPE
Refresh2(VARIANT
*Level
);
505 virtual HRESULT STDMETHODCALLTYPE
Stop();
506 virtual HRESULT STDMETHODCALLTYPE
get_Application(IDispatch
**ppDisp
);
507 virtual HRESULT STDMETHODCALLTYPE
get_Parent(IDispatch
**ppDisp
);
508 virtual HRESULT STDMETHODCALLTYPE
get_Container(IDispatch
**ppDisp
);
509 virtual HRESULT STDMETHODCALLTYPE
get_Document(IDispatch
**ppDisp
);
510 virtual HRESULT STDMETHODCALLTYPE
get_TopLevelContainer(VARIANT_BOOL
*pBool
);
511 virtual HRESULT STDMETHODCALLTYPE
get_Type(BSTR
*Type
);
512 virtual HRESULT STDMETHODCALLTYPE
get_Left(long *pl
);
513 virtual HRESULT STDMETHODCALLTYPE
put_Left(long Left
);
514 virtual HRESULT STDMETHODCALLTYPE
get_Top(long *pl
);
515 virtual HRESULT STDMETHODCALLTYPE
put_Top(long Top
);
516 virtual HRESULT STDMETHODCALLTYPE
get_Width(long *pl
);
517 virtual HRESULT STDMETHODCALLTYPE
put_Width(long Width
);
518 virtual HRESULT STDMETHODCALLTYPE
get_Height(long *pl
);
519 virtual HRESULT STDMETHODCALLTYPE
put_Height(long Height
);
520 virtual HRESULT STDMETHODCALLTYPE
get_LocationName(BSTR
*LocationName
);
521 virtual HRESULT STDMETHODCALLTYPE
get_LocationURL(BSTR
*LocationURL
);
522 virtual HRESULT STDMETHODCALLTYPE
get_Busy(VARIANT_BOOL
*pBool
);
524 // *** IWebBrowserApp methods ***
525 virtual HRESULT STDMETHODCALLTYPE
Quit();
526 virtual HRESULT STDMETHODCALLTYPE
ClientToWindow(int *pcx
, int *pcy
);
527 virtual HRESULT STDMETHODCALLTYPE
PutProperty(BSTR Property
, VARIANT vtValue
);
528 virtual HRESULT STDMETHODCALLTYPE
GetProperty(BSTR Property
, VARIANT
*pvtValue
);
529 virtual HRESULT STDMETHODCALLTYPE
get_Name(BSTR
*Name
);
530 virtual HRESULT STDMETHODCALLTYPE
get_HWND(SHANDLE_PTR
*pHWND
);
531 virtual HRESULT STDMETHODCALLTYPE
get_FullName(BSTR
*FullName
);
532 virtual HRESULT STDMETHODCALLTYPE
get_Path(BSTR
*Path
);
533 virtual HRESULT STDMETHODCALLTYPE
get_Visible(VARIANT_BOOL
*pBool
);
534 virtual HRESULT STDMETHODCALLTYPE
put_Visible(VARIANT_BOOL Value
);
535 virtual HRESULT STDMETHODCALLTYPE
get_StatusBar(VARIANT_BOOL
*pBool
);
536 virtual HRESULT STDMETHODCALLTYPE
put_StatusBar(VARIANT_BOOL Value
);
537 virtual HRESULT STDMETHODCALLTYPE
get_StatusText(BSTR
*StatusText
);
538 virtual HRESULT STDMETHODCALLTYPE
put_StatusText(BSTR StatusText
);
539 virtual HRESULT STDMETHODCALLTYPE
get_ToolBar(int *Value
);
540 virtual HRESULT STDMETHODCALLTYPE
put_ToolBar(int Value
);
541 virtual HRESULT STDMETHODCALLTYPE
get_MenuBar(VARIANT_BOOL
*Value
);
542 virtual HRESULT STDMETHODCALLTYPE
put_MenuBar(VARIANT_BOOL Value
);
543 virtual HRESULT STDMETHODCALLTYPE
get_FullScreen(VARIANT_BOOL
*pbFullScreen
);
544 virtual HRESULT STDMETHODCALLTYPE
put_FullScreen(VARIANT_BOOL bFullScreen
);
546 // *** IWebBrowser2 methods ***
547 virtual HRESULT STDMETHODCALLTYPE
Navigate2(VARIANT
*URL
, VARIANT
*Flags
, VARIANT
*TargetFrameName
,
548 VARIANT
*PostData
, VARIANT
*Headers
);
549 virtual HRESULT STDMETHODCALLTYPE
QueryStatusWB(OLECMDID cmdID
, OLECMDF
*pcmdf
);
550 virtual HRESULT STDMETHODCALLTYPE
ExecWB(OLECMDID cmdID
, OLECMDEXECOPT cmdexecopt
,
551 VARIANT
*pvaIn
, VARIANT
*pvaOut
);
552 virtual HRESULT STDMETHODCALLTYPE
ShowBrowserBar(VARIANT
*pvaClsid
, VARIANT
*pvarShow
, VARIANT
*pvarSize
);
553 virtual HRESULT STDMETHODCALLTYPE
get_ReadyState(READYSTATE
*plReadyState
);
554 virtual HRESULT STDMETHODCALLTYPE
get_Offline(VARIANT_BOOL
*pbOffline
);
555 virtual HRESULT STDMETHODCALLTYPE
put_Offline(VARIANT_BOOL bOffline
);
556 virtual HRESULT STDMETHODCALLTYPE
get_Silent(VARIANT_BOOL
*pbSilent
);
557 virtual HRESULT STDMETHODCALLTYPE
put_Silent(VARIANT_BOOL bSilent
);
558 virtual HRESULT STDMETHODCALLTYPE
get_RegisterAsBrowser(VARIANT_BOOL
*pbRegister
);
559 virtual HRESULT STDMETHODCALLTYPE
put_RegisterAsBrowser(VARIANT_BOOL bRegister
);
560 virtual HRESULT STDMETHODCALLTYPE
get_RegisterAsDropTarget(VARIANT_BOOL
*pbRegister
);
561 virtual HRESULT STDMETHODCALLTYPE
put_RegisterAsDropTarget(VARIANT_BOOL bRegister
);
562 virtual HRESULT STDMETHODCALLTYPE
get_TheaterMode(VARIANT_BOOL
*pbRegister
);
563 virtual HRESULT STDMETHODCALLTYPE
put_TheaterMode(VARIANT_BOOL bRegister
);
564 virtual HRESULT STDMETHODCALLTYPE
get_AddressBar(VARIANT_BOOL
*Value
);
565 virtual HRESULT STDMETHODCALLTYPE
put_AddressBar(VARIANT_BOOL Value
);
566 virtual HRESULT STDMETHODCALLTYPE
get_Resizable(VARIANT_BOOL
*Value
);
567 virtual HRESULT STDMETHODCALLTYPE
put_Resizable(VARIANT_BOOL Value
);
569 // *** ITravelLogClient methods ***
570 virtual HRESULT STDMETHODCALLTYPE
FindWindowByIndex(DWORD dwID
, IUnknown
**ppunk
);
571 virtual HRESULT STDMETHODCALLTYPE
GetWindowData(IStream
*pStream
, LPWINDOWDATA pWinData
);
572 virtual HRESULT STDMETHODCALLTYPE
LoadHistoryPosition(LPWSTR pszUrlLocation
, DWORD dwPosition
);
574 // *** IPersist methods ***
575 virtual HRESULT STDMETHODCALLTYPE
GetClassID(CLSID
*pClassID
);
577 // *** IPersistHistory methods ***
578 virtual HRESULT STDMETHODCALLTYPE
LoadHistory(IStream
*pStream
, IBindCtx
*pbc
);
579 virtual HRESULT STDMETHODCALLTYPE
SaveHistory(IStream
*pStream
);
580 virtual HRESULT STDMETHODCALLTYPE
SetPositionCookie(DWORD dwPositioncookie
);
581 virtual HRESULT STDMETHODCALLTYPE
GetPositionCookie(DWORD
*pdwPositioncookie
);
584 LRESULT
OnCreate(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
585 LRESULT
OnDestroy(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
586 LRESULT
OnSize(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
587 LRESULT
OnInitMenuPopup(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
588 LRESULT
OnSetFocus(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
589 LRESULT
RelayMsgToShellView(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
590 LRESULT
OnClose(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
591 LRESULT
OnFolderOptions(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
592 LRESULT
OnMapNetworkDrive(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
593 LRESULT
OnDisconnectNetworkDrive(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
594 LRESULT
OnAboutReactOS(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
595 LRESULT
OnGoBack(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
596 LRESULT
OnGoForward(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
597 LRESULT
OnGoUpLevel(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
598 LRESULT
OnBackspace(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
599 LRESULT
OnGoHome(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
600 LRESULT
OnIsThisLegal(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
601 LRESULT
OnOrganizeFavorites(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
602 LRESULT
OnToggleStatusBarVisible(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
603 LRESULT
OnToggleToolbarLock(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
604 LRESULT
OnToggleToolbarBandVisible(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
605 LRESULT
OnToggleAddressBandVisible(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
606 LRESULT
OnToggleLinksBandVisible(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
607 LRESULT
OnToggleTextLabels(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
608 LRESULT
OnToolbarCustomize(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
609 LRESULT
OnGoTravel(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
610 LRESULT
OnExplorerBar(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
611 LRESULT
RelayCommands(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
614 static ATL::CWndClassInfo
& GetWndClassInfo()
616 static ATL::CWndClassInfo wc
=
618 { sizeof(WNDCLASSEX
), CS_DBLCLKS
, StartWindowProc
,
619 0, 0, NULL
, LoadIcon(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDI_CABINET
)),
620 LoadCursor(NULL
, IDC_ARROW
), (HBRUSH
)(COLOR_WINDOW
+ 1), NULL
, szCabinetWndClass
, NULL
},
621 NULL
, NULL
, IDC_ARROW
, TRUE
, 0, _T("")
626 BEGIN_MSG_MAP(CShellBrowser
)
627 MESSAGE_HANDLER(WM_CREATE
, OnCreate
)
628 MESSAGE_HANDLER(WM_DESTROY
, OnDestroy
)
629 MESSAGE_HANDLER(WM_SIZE
, OnSize
)
630 MESSAGE_HANDLER(WM_INITMENUPOPUP
, OnInitMenuPopup
)
631 MESSAGE_HANDLER(WM_SETFOCUS
, OnSetFocus
)
632 MESSAGE_HANDLER(WM_MEASUREITEM
, RelayMsgToShellView
)
633 MESSAGE_HANDLER(WM_DRAWITEM
, RelayMsgToShellView
)
634 MESSAGE_HANDLER(WM_MENUSELECT
, RelayMsgToShellView
)
635 COMMAND_ID_HANDLER(IDM_FILE_CLOSE
, OnClose
)
636 COMMAND_ID_HANDLER(IDM_TOOLS_FOLDEROPTIONS
, OnFolderOptions
)
637 COMMAND_ID_HANDLER(IDM_TOOLS_MAPNETWORKDRIVE
, OnMapNetworkDrive
)
638 COMMAND_ID_HANDLER(IDM_TOOLS_DISCONNECTNETWORKDRIVE
, OnDisconnectNetworkDrive
)
639 COMMAND_ID_HANDLER(IDM_HELP_ABOUT
, OnAboutReactOS
)
640 COMMAND_ID_HANDLER(IDM_GOTO_BACK
, OnGoBack
)
641 COMMAND_ID_HANDLER(IDM_GOTO_FORWARD
, OnGoForward
)
642 COMMAND_ID_HANDLER(IDM_GOTO_UPONELEVEL
, OnGoUpLevel
)
643 COMMAND_ID_HANDLER(IDM_GOTO_HOMEPAGE
, OnGoHome
)
644 COMMAND_ID_HANDLER(IDM_FAVORITES_ORGANIZEFAVORITES
, OnOrganizeFavorites
)
645 COMMAND_ID_HANDLER(IDM_HELP_ISTHISCOPYLEGAL
, OnIsThisLegal
)
646 COMMAND_ID_HANDLER(IDM_VIEW_STATUSBAR
, OnToggleStatusBarVisible
)
647 COMMAND_ID_HANDLER(IDM_TOOLBARS_LOCKTOOLBARS
, OnToggleToolbarLock
)
648 COMMAND_ID_HANDLER(IDM_TOOLBARS_STANDARDBUTTONS
, OnToggleToolbarBandVisible
)
649 COMMAND_ID_HANDLER(IDM_TOOLBARS_ADDRESSBAR
, OnToggleAddressBandVisible
)
650 COMMAND_ID_HANDLER(IDM_TOOLBARS_LINKSBAR
, OnToggleLinksBandVisible
)
651 COMMAND_ID_HANDLER(IDM_TOOLBARS_TEXTLABELS
, OnToggleTextLabels
)
652 COMMAND_ID_HANDLER(IDM_TOOLBARS_CUSTOMIZE
, OnToolbarCustomize
)
653 COMMAND_ID_HANDLER(IDM_EXPLORERBAR_SEARCH
, OnExplorerBar
)
654 COMMAND_ID_HANDLER(IDM_EXPLORERBAR_FOLDERS
, OnExplorerBar
)
655 COMMAND_ID_HANDLER(IDM_EXPLORERBAR_HISTORY
, OnExplorerBar
)
656 COMMAND_ID_HANDLER(IDM_EXPLORERBAR_FAVORITES
, OnExplorerBar
)
657 COMMAND_ID_HANDLER(IDM_BACKSPACE
, OnBackspace
)
658 COMMAND_RANGE_HANDLER(IDM_GOTO_TRAVEL_FIRSTTARGET
, IDM_GOTO_TRAVEL_LASTTARGET
, OnGoTravel
)
659 COMMAND_RANGE_HANDLER(IDM_EXPLORERBAND_BEGINCUSTOM
, IDM_EXPLORERBAND_ENDCUSTOM
, OnExplorerBar
)
660 MESSAGE_HANDLER(WM_COMMAND
, RelayCommands
)
663 BEGIN_CONNECTION_POINT_MAP(CShellBrowser
)
664 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents2
)
665 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents
)
666 END_CONNECTION_POINT_MAP()
668 BEGIN_COM_MAP(CShellBrowser
)
669 COM_INTERFACE_ENTRY_IID(IID_IDockingWindowSite
, IDockingWindowSite
)
670 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget
, IOleCommandTarget
)
671 COM_INTERFACE_ENTRY2_IID(IID_IOleWindow
, IOleWindow
, IDockingWindowSite
)
672 COM_INTERFACE_ENTRY_IID(IID_IShellBrowser
, IShellBrowser
)
673 COM_INTERFACE_ENTRY_IID(IID_IDropTarget
, IDropTarget
)
674 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider
, IServiceProvider
)
675 COM_INTERFACE_ENTRY_IID(IID_IProfferService
, IProfferService
)
676 COM_INTERFACE_ENTRY_IID(IID_IShellBrowserService
, IShellBrowserService
)
677 COM_INTERFACE_ENTRY_IID(IID_IDispatch
, IDispatch
)
678 COM_INTERFACE_ENTRY_IID(IID_IConnectionPointContainer
, IConnectionPointContainer
)
679 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser
, IWebBrowser
)
680 COM_INTERFACE_ENTRY_IID(IID_IWebBrowserApp
, IWebBrowserApp
)
681 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser2
, IWebBrowser2
)
682 COM_INTERFACE_ENTRY_IID(IID_ITravelLogClient
, ITravelLogClient
)
683 COM_INTERFACE_ENTRY_IID(IID_IPersist
, IPersist
)
684 COM_INTERFACE_ENTRY_IID(IID_IPersistHistory
, IPersistHistory
)
685 COM_INTERFACE_ENTRY_IID(IID_IBrowserService
, IBrowserService
)
686 COM_INTERFACE_ENTRY_IID(IID_IBrowserService2
, IBrowserService2
)
690 extern HRESULT
CreateProgressDialog(REFIID riid
, void **ppv
);
692 CShellBrowser::CShellBrowser()
694 fCurrentShellViewWindow
= NULL
;
695 fCurrentDirectoryPIDL
= NULL
;
697 fStatusBarVisible
= true;
698 memset(fClientBars
, 0, sizeof(fClientBars
));
699 fCurrentMenuBar
= NULL
;
700 fHistoryObject
= NULL
;
701 fHistoryStream
= NULL
;
702 fHistoryBindContext
= NULL
;
705 CShellBrowser::~CShellBrowser()
708 DSA_Destroy(menuDsa
);
711 HRESULT
CShellBrowser::Initialize(LPITEMIDLIST pidl
, long b
, long c
, long d
)
713 CComPtr
<IPersistStreamInit
> persistStreamInit
;
715 CComPtr
<IUnknown
> clientBar
;
717 _AtlInitialConstruct();
719 menuDsa
= DSA_Create(sizeof(MenuBandInfo
), 5);
721 return E_OUTOFMEMORY
;
723 fCabinetState
.cLength
= sizeof(fCabinetState
);
724 if (ReadCabinetState(&fCabinetState
, sizeof(fCabinetState
)) == FALSE
)
729 Create(HWND_DESKTOP
);
733 hResult
= CInternetToolbar_CreateInstance(IID_PPV_ARG(IUnknown
, &clientBar
));
734 if (FAILED_UNEXPECTEDLY(hResult
))
737 fClientBars
[BIInternetToolbar
].clientBar
= clientBar
;
740 hResult
= clientBar
->QueryInterface(IID_PPV_ARG(IPersistStreamInit
, &persistStreamInit
));
741 if (FAILED_UNEXPECTEDLY(hResult
))
744 hResult
= IUnknown_SetSite(clientBar
, static_cast<IShellBrowser
*>(this));
745 if (FAILED_UNEXPECTEDLY(hResult
))
748 hResult
= IUnknown_Exec(clientBar
, CGID_PrivCITCommands
, 1, 1 /* or 0 */, NULL
, NULL
);
749 if (FAILED_UNEXPECTEDLY(hResult
))
752 // TODO: create settingsStream from registry entry
753 //if (settingsStream.p)
755 // hResult = persistStreamInit->Load(settingsStream);
756 // if (FAILED_UNEXPECTEDLY(hResult))
761 hResult
= persistStreamInit
->InitNew();
762 if (FAILED_UNEXPECTEDLY(hResult
))
766 hResult
= IUnknown_ShowDW(clientBar
, TRUE
);
767 if (FAILED_UNEXPECTEDLY(hResult
))
770 fToolbarProxy
.Initialize(m_hWnd
, clientBar
);
774 fStatusBar
= CreateWindow(STATUSCLASSNAMEW
, NULL
, WS_CHILD
| WS_VISIBLE
| WS_CLIPSIBLINGS
|
775 SBT_NOBORDERS
| SBT_TOOLTIPS
, 0, 0, 500, 20, m_hWnd
, (HMENU
)0xa001,
776 _AtlBaseModule
.GetModuleInstance(), 0);
777 fStatusBarVisible
= true;
781 hResult
= BrowseToPIDL(pidl
, BTP_UPDATE_NEXT_HISTORY
);
782 if (FAILED_UNEXPECTEDLY(hResult
))
785 ShowWindow(SW_SHOWNORMAL
);
790 HRESULT
CShellBrowser::BrowseToPIDL(LPCITEMIDLIST pidl
, long flags
)
792 CComPtr
<IShellFolder
> newFolder
;
793 FOLDERSETTINGS newFolderSettings
;
796 // called by shell view to browse to new folder
797 // also called by explorer band to navigate to new folder
798 hResult
= SHBindToFolder(pidl
, &newFolder
);
799 if (FAILED_UNEXPECTEDLY(hResult
))
802 newFolderSettings
.ViewMode
= FVM_ICON
;
803 newFolderSettings
.fFlags
= 0;
804 hResult
= BrowseToPath(newFolder
, pidl
, &newFolderSettings
, flags
);
805 if (FAILED_UNEXPECTEDLY(hResult
))
810 BOOL WINAPI
_ILIsDesktop(LPCITEMIDLIST pidl
)
812 return (pidl
== NULL
|| pidl
->mkid
.cb
== 0);
815 BOOL WINAPI
_ILIsPidlSimple(LPCITEMIDLIST pidl
)
817 LPCITEMIDLIST pidlnext
;
822 if (! _ILIsDesktop(pidl
))
824 length
= pidl
->mkid
.cb
;
826 reinterpret_cast<LPCITEMIDLIST
>(
827 reinterpret_cast<const BYTE
*>(pidl
) + length
);
828 if (pidlnext
->mkid
.cb
!= 0)
834 HRESULT WINAPI
SHBindToFolderIDListParent(IShellFolder
*unused
, LPCITEMIDLIST pidl
,
835 const IID
*riid
, LPVOID
*ppv
, LPITEMIDLIST
*ppidlLast
)
837 CComPtr
<IShellFolder
> psf
;
838 LPITEMIDLIST pidlChild
;
839 LPITEMIDLIST pidlParent
;
846 if (ppidlLast
!= NULL
)
848 if (_ILIsPidlSimple(pidl
))
850 if (ppidlLast
!= NULL
)
851 *ppidlLast
= ILClone(pidl
);
852 hResult
= SHGetDesktopFolder((IShellFolder
**)ppv
);
856 pidlChild
= ILClone(ILFindLastID(pidl
));
857 pidlParent
= ILClone(pidl
);
858 ILRemoveLastID(pidlParent
);
859 hResult
= SHGetDesktopFolder(&psf
);
860 if (SUCCEEDED(hResult
))
861 hResult
= psf
->BindToObject(pidlParent
, NULL
, *riid
, ppv
);
862 if (SUCCEEDED(hResult
) && ppidlLast
!= NULL
)
863 *ppidlLast
= pidlChild
;
871 HRESULT
IEGetNameAndFlagsEx(LPITEMIDLIST pidl
, SHGDNF uFlags
, long param10
,
872 LPWSTR pszBuf
, UINT cchBuf
, SFGAOF
*rgfInOut
)
874 CComPtr
<IShellFolder
> parentFolder
;
875 LPITEMIDLIST childPIDL
= NULL
;
879 hResult
= SHBindToFolderIDListParent(NULL
, pidl
, &IID_PPV_ARG(IShellFolder
, &parentFolder
), &childPIDL
);
883 hResult
= parentFolder
->GetDisplayNameOf(childPIDL
, uFlags
, &L108
);
887 StrRetToBufW(&L108
, childPIDL
, pszBuf
, cchBuf
);
890 hResult
= parentFolder
->GetAttributesOf(1, const_cast<LPCITEMIDLIST
*>(&childPIDL
), rgfInOut
);
903 long IEGetNameAndFlags(LPITEMIDLIST pidl
, SHGDNF uFlags
, LPWSTR pszBuf
, UINT cchBuf
, SFGAOF
*rgfInOut
)
905 return IEGetNameAndFlagsEx(pidl
, uFlags
, 0, pszBuf
, cchBuf
, rgfInOut
);
908 HRESULT
CShellBrowser::BrowseToPath(IShellFolder
*newShellFolder
,
909 LPCITEMIDLIST absolutePIDL
, FOLDERSETTINGS
*folderSettings
, long flags
)
911 CComPtr
<IObjectWithSite
> objectWithSite
;
912 CComPtr
<IShellFolder
> saveCurrentShellFolder
;
913 CComPtr
<IShellView
> saveCurrentShellView
;
914 CComPtr
<IShellView
> newShellView
;
915 CComPtr
<ITravelLog
> travelLog
;
916 HWND newShellViewWindow
;
917 BOOL windowUpdateIsLocked
;
918 RECT shellViewWindowBounds
;
921 wchar_t newTitle
[MAX_PATH
];
925 if (newShellFolder
== NULL
)
928 hResult
= GetTravelLog(&travelLog
);
929 if (FAILED_UNEXPECTEDLY(hResult
))
933 if (flags
& BTP_UPDATE_CUR_HISTORY
)
935 if (travelLog
->CountEntries(static_cast<IDropTarget
*>(this)) > 0)
936 hResult
= travelLog
->UpdateEntry(static_cast<IDropTarget
*>(this), FALSE
);
937 // what to do with error? Do we want to halt browse because state save failed?
940 if (fCurrentShellView
)
942 fCurrentShellView
->UIActivate(SVUIA_DEACTIVATE
);
945 // create view object
946 hResult
= newShellFolder
->CreateViewObject(m_hWnd
, IID_PPV_ARG(IShellView
, &newShellView
));
947 if (FAILED_UNEXPECTEDLY(hResult
))
949 previousView
= fCurrentShellViewWindow
;
951 // enter updating section
952 saveCursor
= SetCursor(LoadCursor(NULL
, IDC_WAIT
));
953 windowUpdateIsLocked
= LockWindowUpdate(TRUE
);
954 if (fCurrentShellView
!= NULL
)
955 ::SendMessage(fCurrentShellViewWindow
, WM_SETREDRAW
, 0, 0);
958 hResult
= IUnknown_SetSite(newShellView
, static_cast<IDropTarget
*>(this));
960 // update folder and view
961 saveCurrentShellFolder
= fCurrentShellFolder
;
962 saveCurrentShellView
= fCurrentShellView
;
963 fCurrentShellFolder
= newShellFolder
;
964 fCurrentShellView
= newShellView
;
967 if (previousView
!= NULL
)
968 ::GetWindowRect(previousView
, &shellViewWindowBounds
);
970 ZeroMemory(&shellViewWindowBounds
, sizeof(shellViewWindowBounds
));
971 ::MapWindowPoints(0, m_hWnd
, reinterpret_cast<POINT
*>(&shellViewWindowBounds
), 2);
973 // create view window
974 hResult
= newShellView
->CreateViewWindow(saveCurrentShellView
, folderSettings
,
975 this, &shellViewWindowBounds
, &newShellViewWindow
);
976 if (FAILED_UNEXPECTEDLY(hResult
) || newShellViewWindow
== NULL
)
978 fCurrentShellView
= saveCurrentShellView
;
979 fCurrentShellFolder
= saveCurrentShellFolder
;
980 ::SendMessage(fCurrentShellViewWindow
, WM_SETREDRAW
, 1, 0);
981 if (windowUpdateIsLocked
)
982 LockWindowUpdate(FALSE
);
983 SetCursor(saveCursor
);
987 if (objectWithSite
.p
!= NULL
)
988 hResult
= objectWithSite
->SetSite(NULL
);
990 // update current pidl
991 ILFree(fCurrentDirectoryPIDL
);
992 fCurrentDirectoryPIDL
= ILClone(absolutePIDL
);
994 // update view window
995 if (saveCurrentShellView
!= NULL
)
996 saveCurrentShellView
->DestroyViewWindow();
997 fCurrentShellViewWindow
= newShellViewWindow
;
1000 saveCurrentShellView
.Release();
1001 saveCurrentShellFolder
.Release();
1003 hResult
= newShellView
->UIActivate(SVUIA_ACTIVATE_FOCUS
);
1005 // leave updating section
1006 if (windowUpdateIsLocked
)
1007 LockWindowUpdate(FALSE
);
1008 SetCursor(saveCursor
);
1011 if (flags
& BTP_UPDATE_NEXT_HISTORY
)
1013 hResult
= travelLog
->AddEntry(static_cast<IDropTarget
*>(this), FALSE
);
1014 hResult
= travelLog
->UpdateEntry(static_cast<IDropTarget
*>(this), FALSE
);
1018 nameFlags
= SHGDN_FORADDRESSBAR
| SHGDN_FORPARSING
;
1019 hResult
= IEGetNameAndFlags(fCurrentDirectoryPIDL
, nameFlags
, newTitle
,
1020 sizeof(newTitle
) / sizeof(wchar_t), NULL
);
1021 if (SUCCEEDED(hResult
))
1023 FireNavigateComplete(newTitle
);
1027 FireNavigateComplete(L
"ERROR");
1030 if (fCabinetState
.fFullPathTitle
)
1031 nameFlags
= SHGDN_FORADDRESSBAR
| SHGDN_FORPARSING
;
1033 nameFlags
= SHGDN_FORADDRESSBAR
;
1034 hResult
= IEGetNameAndFlags(fCurrentDirectoryPIDL
, nameFlags
, newTitle
,
1035 sizeof(newTitle
) / sizeof(wchar_t), NULL
);
1036 if (SUCCEEDED(hResult
))
1038 SetWindowText(newTitle
);
1040 LPCITEMIDLIST pidlChild
;
1041 INT index
, indexOpen
;
1042 HIMAGELIST himlSmall
, himlLarge
;
1044 CComPtr
<IShellFolder
> sf
;
1045 SHBindToParent(absolutePIDL
, IID_PPV_ARG(IShellFolder
, &sf
), &pidlChild
);
1047 index
= SHMapPIDLToSystemImageListIndex(sf
, pidlChild
, &indexOpen
);
1049 Shell_GetImageLists(&himlLarge
, &himlSmall
);
1051 HICON icSmall
= ImageList_GetIcon(himlSmall
, indexOpen
, 0);
1052 HICON icLarge
= ImageList_GetIcon(himlLarge
, indexOpen
, 0);
1054 /* Hack to make it possible to release the old icons */
1055 /* Something seems to go wrong with WM_SETICON */
1056 HICON oldSmall
= (HICON
)SendMessage(WM_GETICON
, ICON_SMALL
, 0);
1057 HICON oldLarge
= (HICON
)SendMessage(WM_GETICON
, ICON_BIG
, 0);
1059 SendMessage(WM_SETICON
, ICON_SMALL
, reinterpret_cast<LPARAM
>(icSmall
));
1060 SendMessage(WM_SETICON
, ICON_BIG
, reinterpret_cast<LPARAM
>(icLarge
));
1062 DestroyIcon(oldSmall
);
1063 DestroyIcon(oldLarge
);
1066 FireCommandStateChangeAll();
1067 hResult
= UpdateForwardBackState();
1068 hResult
= UpdateUpState();
1072 HRESULT
CShellBrowser::GetMenuBand(REFIID riid
, void **shellMenu
)
1074 CComPtr
<IBandSite
> bandSite
;
1075 CComPtr
<IDeskBand
> deskBand
;
1078 if (!fClientBars
[BIInternetToolbar
].clientBar
)
1081 hResult
= IUnknown_QueryService(fClientBars
[BIInternetToolbar
].clientBar
, SID_IBandSite
, IID_PPV_ARG(IBandSite
, &bandSite
));
1082 if (FAILED_UNEXPECTEDLY(hResult
))
1085 hResult
= bandSite
->QueryBand(1, &deskBand
, NULL
, NULL
, 0);
1086 if (FAILED_UNEXPECTEDLY(hResult
))
1089 return deskBand
->QueryInterface(riid
, shellMenu
);
1092 HRESULT
CShellBrowser::GetBaseBar(bool vertical
, REFIID riid
, void **theBaseBar
)
1094 CComPtr
<IUnknown
> newBaseBar
;
1095 CComPtr
<IDeskBar
> deskBar
;
1096 CComPtr
<IUnknown
> newBaseBarSite
;
1097 CComPtr
<IDeskBarClient
> deskBarClient
;
1102 cache
= &fClientBars
[BIVerticalBaseBar
].clientBar
.p
;
1104 cache
= &fClientBars
[BIHorizontalBaseBar
].clientBar
.p
;
1107 hResult
= CBaseBar_CreateInstance(IID_PPV_ARG(IUnknown
, &newBaseBar
), vertical
);
1108 if (FAILED_UNEXPECTEDLY(hResult
))
1110 hResult
= CBaseBarSite_CreateInstance(IID_PPV_ARG(IUnknown
, &newBaseBarSite
), vertical
);
1111 if (FAILED_UNEXPECTEDLY(hResult
))
1114 // we have to store our basebar into cache now
1115 *cache
= newBaseBar
;
1117 // tell the new base bar about the shell browser
1118 hResult
= IUnknown_SetSite(newBaseBar
, static_cast<IDropTarget
*>(this));
1119 if (FAILED_UNEXPECTEDLY(hResult
))
1122 // tell the new base bar about the new base bar site
1123 hResult
= newBaseBar
->QueryInterface(IID_PPV_ARG(IDeskBar
, &deskBar
));
1124 if (FAILED_UNEXPECTEDLY(hResult
))
1126 hResult
= deskBar
->SetClient(newBaseBarSite
);
1127 if (FAILED_UNEXPECTEDLY(hResult
))
1130 // tell the new base bar site about the new base bar
1131 hResult
= newBaseBarSite
->QueryInterface(IID_PPV_ARG(IDeskBarClient
, &deskBarClient
));
1132 if (FAILED_UNEXPECTEDLY(hResult
))
1134 hResult
= deskBarClient
->SetDeskBarSite(newBaseBar
);
1135 if (FAILED_UNEXPECTEDLY(hResult
))
1139 return (*cache
)->QueryInterface(riid
, theBaseBar
);
1142 BOOL
CShellBrowser::IsBandLoaded(const CLSID clsidBand
, bool vertical
, DWORD
*pdwBandID
)
1145 CComPtr
<IDeskBar
> deskBar
;
1146 CComPtr
<IUnknown
> baseBarSite
;
1147 CComPtr
<IBandSite
> bandSite
;
1153 /* Get our basebarsite to be able to enumerate bands */
1154 hResult
= GetBaseBar(vertical
, IID_PPV_ARG(IDeskBar
, &deskBar
));
1155 if (FAILED_UNEXPECTEDLY(hResult
))
1157 hResult
= deskBar
->GetClient(&baseBarSite
);
1158 if (FAILED_UNEXPECTEDLY(hResult
))
1160 hResult
= baseBarSite
->QueryInterface(IID_PPV_ARG(IBandSite
, &bandSite
));
1161 if (FAILED_UNEXPECTEDLY(hResult
))
1164 hResult
= bandSite
->EnumBands(-1, &numBands
);
1165 if (FAILED_UNEXPECTEDLY(hResult
))
1168 for(i
= 0; i
< numBands
; i
++)
1170 CComPtr
<IPersist
> bandPersist
;
1172 hResult
= bandSite
->EnumBands(i
, &dwBandID
);
1173 if (FAILED_UNEXPECTEDLY(hResult
))
1176 hResult
= bandSite
->GetBandObject(dwBandID
, IID_PPV_ARG(IPersist
, &bandPersist
));
1177 if (FAILED_UNEXPECTEDLY(hResult
))
1179 hResult
= bandPersist
->GetClassID(&clsidTmp
);
1180 if (FAILED_UNEXPECTEDLY(hResult
))
1182 if (IsEqualGUID(clsidBand
, clsidTmp
))
1184 if (pdwBandID
) *pdwBandID
= dwBandID
;
1191 HRESULT
CShellBrowser::ShowBand(const CLSID
&classID
, bool vertical
)
1193 CComPtr
<IDockingWindow
> dockingWindow
;
1194 CComPtr
<IUnknown
> baseBarSite
;
1195 CComPtr
<IUnknown
> newBand
;
1196 CComPtr
<IDeskBar
> deskBar
;
1201 hResult
= GetBaseBar(vertical
, IID_PPV_ARG(IDeskBar
, &deskBar
));
1202 if (FAILED_UNEXPECTEDLY(hResult
))
1205 hResult
= deskBar
->GetClient(&baseBarSite
);
1206 if (FAILED_UNEXPECTEDLY(hResult
))
1209 hResult
= deskBar
->QueryInterface(IID_PPV_ARG(IDockingWindow
, &dockingWindow
));
1210 if (FAILED_UNEXPECTEDLY(hResult
))
1213 if (!IsBandLoaded(classID
, vertical
, &dwBandID
))
1215 TRACE("ShowBand called for CLSID %s, vertical=%d...\n", wine_dbgstr_guid(&classID
), vertical
);
1216 if (IsEqualCLSID(CLSID_ExplorerBand
, classID
))
1218 TRACE("CLSID_ExplorerBand requested, building internal band.\n");
1219 hResult
= CExplorerBand_CreateInstance(IID_PPV_ARG(IUnknown
, &newBand
));
1220 if (FAILED_UNEXPECTEDLY(hResult
))
1225 TRACE("A different CLSID requested, using CoCreateInstance.\n");
1226 hResult
= CoCreateInstance(classID
, NULL
, CLSCTX_INPROC_SERVER
, IID_PPV_ARG(IUnknown
, &newBand
));
1227 if (FAILED_UNEXPECTEDLY(hResult
))
1233 CComPtr
<IBandSite
> pBandSite
;
1235 hResult
= baseBarSite
->QueryInterface(IID_PPV_ARG(IBandSite
, &pBandSite
));
1236 if (!SUCCEEDED(hResult
))
1238 ERR("Can't get IBandSite interface\n");
1241 hResult
= pBandSite
->GetBandObject(dwBandID
, IID_PPV_ARG(IUnknown
, &newBand
));
1242 if (!SUCCEEDED(hResult
))
1244 ERR("Can't find band object\n");
1248 // It's hackish, but we should be able to show the wanted band until we
1249 // find the proper way to do this (but it seems to work to add a new band)
1250 // Here we'll just re-add the existing band to the site, causing it to display.
1252 V_VT(&vaIn
) = VT_UNKNOWN
;
1253 V_UNKNOWN(&vaIn
) = newBand
.p
;
1254 hResult
= IUnknown_Exec(baseBarSite
, CGID_IDeskBand
, 1, 1, &vaIn
, NULL
);
1255 if (FAILED_UNEXPECTEDLY(hResult
))
1260 hResult
= dockingWindow
->ShowDW(TRUE
);
1261 if (FAILED_UNEXPECTEDLY(hResult
))
1267 HRESULT
CShellBrowser::NavigateToParent()
1269 LPITEMIDLIST newDirectory
= ILClone(fCurrentDirectoryPIDL
);
1270 if (newDirectory
== NULL
)
1271 return E_OUTOFMEMORY
;
1272 if (_ILIsDesktop(newDirectory
))
1274 ILFree(newDirectory
);
1275 return E_INVALIDARG
;
1277 ILRemoveLastID(newDirectory
);
1278 HRESULT hResult
= BrowseToPIDL(newDirectory
, BTP_UPDATE_CUR_HISTORY
| BTP_UPDATE_NEXT_HISTORY
);
1279 ILFree(newDirectory
);
1280 if (FAILED_UNEXPECTEDLY(hResult
))
1285 BOOL CALLBACK
AddFolderOptionsPage(HPROPSHEETPAGE thePage
, LPARAM lParam
)
1287 PROPSHEETHEADER
* sheetInfo
= reinterpret_cast<PROPSHEETHEADER
*>(lParam
);
1288 if (sheetInfo
->nPages
>= folderOptionsPageCountMax
)
1290 sheetInfo
->phpage
[sheetInfo
->nPages
] = thePage
;
1291 sheetInfo
->nPages
++;
1295 HRESULT
CShellBrowser::DoFolderOptions()
1297 CComPtr
<IShellPropSheetExt
> folderOptionsSheet
;
1298 PROPSHEETHEADER m_PropSheet
;
1299 HPROPSHEETPAGE m_psp
[folderOptionsPageCountMax
];
1300 // CComPtr<IGlobalFolderSettings> globalSettings;
1301 // SHELLSTATE2 shellState;
1304 memset(m_psp
, 0, sizeof(m_psp
));
1305 memset(&m_PropSheet
, 0, sizeof(m_PropSheet
));
1307 // create sheet object
1308 hResult
= CoCreateInstance(CLSID_ShellFldSetExt
, NULL
, CLSCTX_INPROC_SERVER
,
1309 IID_PPV_ARG(IShellPropSheetExt
, &folderOptionsSheet
));
1310 if (FAILED_UNEXPECTEDLY(hResult
))
1313 // must set site in order for Apply to all Folders on Advanced page to be enabled
1314 hResult
= IUnknown_SetSite(folderOptionsSheet
, static_cast<IDispatch
*>(this));
1315 m_PropSheet
.phpage
= m_psp
;
1318 hResult
= CoCreateInstance(CLSID_GlobalFolderSettings
, NULL
, CLSCTX_INPROC_SERVER
, IID_PPV_ARG(IGlobalFolderSettings
, &globalSettings
));
1319 if (FAILED_UNEXPECTEDLY(hResult
))
1321 hResult
= globalSettings
->Get(&shellState
, sizeof(shellState
));
1322 if (FAILED_UNEXPECTEDLY(hResult
))
1327 hResult
= folderOptionsSheet
->AddPages(AddFolderOptionsPage
, reinterpret_cast<LPARAM
>(&m_PropSheet
));
1328 if (FAILED_UNEXPECTEDLY(hResult
))
1331 // CORE-11140 : Disabled this bit, because it prevents the folder options from showing.
1332 // It returns 'E_NOTIMPL'
1334 if (fCurrentShellView
!= NULL
)
1336 hResult
= fCurrentShellView
->AddPropertySheetPages(
1337 0, AddFolderOptionsPage
, reinterpret_cast<LPARAM
>(&m_PropSheet
));
1338 if (FAILED_UNEXPECTEDLY(hResult
))
1344 m_PropSheet
.dwSize
= sizeof(PROPSHEETHEADER
);
1345 m_PropSheet
.dwFlags
= 0;
1346 m_PropSheet
.hwndParent
= m_hWnd
;
1347 m_PropSheet
.hInstance
= _AtlBaseModule
.GetResourceInstance();
1348 m_PropSheet
.pszCaption
= _T("Folder Options");
1349 m_PropSheet
.nStartPage
= 0;
1350 PropertySheet(&m_PropSheet
);
1354 LRESULT CALLBACK
CShellBrowser::WindowProc(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
1356 CShellBrowser
*pThis
= reinterpret_cast<CShellBrowser
*>(hWnd
);
1357 _ATL_MSG
msg(pThis
->m_hWnd
, uMsg
, wParam
, lParam
);
1359 const _ATL_MSG
*previousMessage
;
1361 WNDPROC saveWindowProc
;
1364 hWnd
= pThis
->m_hWnd
;
1365 previousMessage
= pThis
->m_pCurrentMsg
;
1366 pThis
->m_pCurrentMsg
= &msg
;
1368 CComPtr
<IMenuBand
> menuBand
;
1369 hResult
= pThis
->GetMenuBand(IID_PPV_ARG(IMenuBand
, &menuBand
));
1370 if (SUCCEEDED(hResult
) && menuBand
.p
!= NULL
)
1372 hResult
= menuBand
->TranslateMenuMessage(&msg
, &lResult
);
1373 if (hResult
== S_OK
)
1376 wParam
= msg
.wParam
;
1377 lParam
= msg
.lParam
;
1381 handled
= pThis
->ProcessWindowMessage(hWnd
, uMsg
, wParam
, lParam
, lResult
, 0);
1382 ATLASSERT(pThis
->m_pCurrentMsg
== &msg
);
1383 if (handled
== FALSE
)
1385 if (uMsg
== WM_NCDESTROY
)
1387 saveWindowProc
= reinterpret_cast<WNDPROC
>(::GetWindowLongPtr(hWnd
, GWL_WNDPROC
));
1388 lResult
= pThis
->DefWindowProc(uMsg
, wParam
, lParam
);
1389 if (saveWindowProc
== reinterpret_cast<WNDPROC
>(::GetWindowLongPtr(hWnd
, GWL_WNDPROC
)))
1390 ::SetWindowLongPtr(hWnd
, GWL_WNDPROC
, (LONG_PTR
)pThis
->m_pfnSuperWindowProc
);
1391 pThis
->m_dwState
|= WINSTATE_DESTROYED
;
1394 lResult
= pThis
->DefWindowProc(uMsg
, wParam
, lParam
);
1396 pThis
->m_pCurrentMsg
= previousMessage
;
1397 if (previousMessage
== NULL
&& (pThis
->m_dwState
& WINSTATE_DESTROYED
) != 0)
1399 pThis
->m_dwState
&= ~WINSTATE_DESTROYED
;
1400 pThis
->m_hWnd
= NULL
;
1401 pThis
->OnFinalMessage(hWnd
);
1406 void CShellBrowser::RepositionBars()
1412 GetClientRect(&clientRect
);
1414 if (fStatusBarVisible
&& fStatusBar
)
1416 ::GetWindowRect(fStatusBar
, &statusRect
);
1417 ::SetWindowPos(fStatusBar
, NULL
, clientRect
.left
, clientRect
.bottom
- (statusRect
.bottom
- statusRect
.top
),
1418 clientRect
.right
- clientRect
.left
,
1419 statusRect
.bottom
- statusRect
.top
, SWP_NOOWNERZORDER
| SWP_NOZORDER
);
1420 clientRect
.bottom
-= statusRect
.bottom
- statusRect
.top
;
1423 for (x
= 0; x
< 3; x
++)
1425 HWND hwnd
= fClientBars
[x
].hwnd
;
1426 RECT borderSpace
= fClientBars
[x
].borderSpace
;
1427 if (hwnd
== NULL
&& fClientBars
[x
].clientBar
!= NULL
)
1429 IUnknown_GetWindow(fClientBars
[x
].clientBar
, &hwnd
);
1430 fClientBars
[x
].hwnd
= hwnd
;
1434 RECT toolbarRect
= clientRect
;
1435 if (borderSpace
.top
!= 0)
1437 toolbarRect
.bottom
= toolbarRect
.top
+ borderSpace
.top
;
1439 else if (borderSpace
.bottom
!= 0)
1441 toolbarRect
.top
= toolbarRect
.bottom
- borderSpace
.bottom
;
1443 else if (borderSpace
.left
!= 0)
1445 toolbarRect
.right
= toolbarRect
.left
+ borderSpace
.left
;
1447 else if (borderSpace
.right
!= 0)
1449 toolbarRect
.left
= toolbarRect
.right
- borderSpace
.right
;
1452 ::SetWindowPos(hwnd
, NULL
,
1455 toolbarRect
.right
- toolbarRect
.left
,
1456 toolbarRect
.bottom
- toolbarRect
.top
,
1457 SWP_NOOWNERZORDER
| SWP_NOZORDER
);
1459 if (borderSpace
.top
!= 0)
1461 clientRect
.top
= toolbarRect
.bottom
;
1463 else if (borderSpace
.bottom
!= 0)
1465 clientRect
.bottom
= toolbarRect
.top
;
1467 else if (borderSpace
.left
!= 0)
1469 clientRect
.left
= toolbarRect
.right
;
1471 else if (borderSpace
.right
!= 0)
1473 clientRect
.right
= toolbarRect
.left
;
1477 ::SetWindowPos(fCurrentShellViewWindow
, NULL
, clientRect
.left
, clientRect
.top
,
1478 clientRect
.right
- clientRect
.left
,
1479 clientRect
.bottom
- clientRect
.top
, SWP_NOOWNERZORDER
| SWP_NOZORDER
);
1482 HRESULT
CShellBrowser::FireEvent(DISPID dispIdMember
, int argCount
, VARIANT
*arguments
)
1485 CComDynamicUnkArray
&vec
= IConnectionPointImpl
<CShellBrowser
, &DIID_DWebBrowserEvents2
>::m_vec
;
1486 CComDynamicUnkArray
&vec2
= IConnectionPointImpl
<CShellBrowser
, &DIID_DWebBrowserEvents
>::m_vec
;
1489 params
.rgvarg
= arguments
;
1490 params
.rgdispidNamedArgs
= NULL
;
1491 params
.cArgs
= argCount
;
1492 params
.cNamedArgs
= 0;
1493 IUnknown
** pp
= vec
.begin();
1494 while (pp
< vec
.end())
1498 CComPtr
<IDispatch
> theDispatch
;
1500 hResult
= (*pp
)->QueryInterface(IID_PPV_ARG(IDispatch
, &theDispatch
));
1501 hResult
= theDispatch
->Invoke(dispIdMember
, GUID_NULL
, 0, DISPATCH_METHOD
, ¶ms
, NULL
, NULL
, NULL
);
1506 while (pp
< vec2
.end())
1510 CComPtr
<IDispatch
> theDispatch
;
1512 hResult
= (*pp
)->QueryInterface(IID_PPV_ARG(IDispatch
, &theDispatch
));
1513 hResult
= theDispatch
->Invoke(dispIdMember
, GUID_NULL
, 0, DISPATCH_METHOD
, ¶ms
, NULL
, NULL
, NULL
);
1520 HRESULT
CShellBrowser::FireNavigateComplete(const wchar_t *newDirectory
)
1522 // these two variants intentionally to do use CComVariant because it would double free/release
1523 // or does not need to dispose at all
1526 CComBSTR
tempString(newDirectory
);
1528 V_VT(&varArgs
) = VT_BSTR
;
1529 V_BSTR(&varArgs
) = tempString
.m_str
;
1531 V_VT(&varArg
[0]) = VT_VARIANT
| VT_BYREF
;
1532 V_VARIANTREF(&varArg
[0]) = &varArgs
;
1533 V_VT(&varArg
[1]) = VT_DISPATCH
;
1534 V_DISPATCH(&varArg
[1]) = (IDispatch
*)this;
1536 return FireEvent(DISPID_NAVIGATECOMPLETE2
, 2, varArg
);
1539 HRESULT
CShellBrowser::FireCommandStateChange(bool newState
, int commandID
)
1543 V_VT(&varArg
[0]) = VT_BOOL
;
1544 V_BOOL(&varArg
[0]) = newState
? VARIANT_TRUE
: VARIANT_FALSE
;
1545 V_VT(&varArg
[1]) = VT_I4
;
1546 V_I4(&varArg
[1]) = commandID
;
1548 return FireEvent(DISPID_COMMANDSTATECHANGE
, 2, varArg
);
1551 HRESULT
CShellBrowser::FireCommandStateChangeAll()
1553 return FireCommandStateChange(false, -1);
1556 HRESULT
CShellBrowser::UpdateForwardBackState()
1558 CComPtr
<ITravelLog
> travelLog
;
1559 CComPtr
<ITravelEntry
> unusedEntry
;
1565 canGoForward
= false;
1566 hResult
= GetTravelLog(&travelLog
);
1567 if (FAILED_UNEXPECTEDLY(hResult
))
1569 hResult
= travelLog
->GetTravelEntry(static_cast<IDropTarget
*>(this), TLOG_BACK
, &unusedEntry
);
1570 if (SUCCEEDED(hResult
))
1573 unusedEntry
.Release();
1575 hResult
= travelLog
->GetTravelEntry(static_cast<IDropTarget
*>(this), TLOG_FORE
, &unusedEntry
);
1576 if (SUCCEEDED(hResult
))
1578 canGoForward
= true;
1579 unusedEntry
.Release();
1581 hResult
= FireCommandStateChange(canGoBack
, 2);
1582 hResult
= FireCommandStateChange(canGoForward
, 1);
1586 HRESULT
CShellBrowser::UpdateUpState()
1592 if (_ILIsDesktop(fCurrentDirectoryPIDL
))
1594 hResult
= FireCommandStateChange(canGoUp
, 3);
1598 void CShellBrowser::UpdateGotoMenu(HMENU theMenu
)
1600 CComPtr
<ITravelLog
> travelLog
;
1601 CComPtr
<ITravelEntry
> unusedEntry
;
1603 MENUITEMINFO menuItemInfo
;
1606 DeleteMenuItems(theMenu
, IDM_GOTO_TRAVEL_FIRST
, IDM_GOTO_TRAVEL_LAST
);
1608 position
= GetMenuItemCount(theMenu
);
1609 hResult
= GetTravelLog(&travelLog
);
1610 if (FAILED_UNEXPECTEDLY(hResult
))
1613 hResult
= travelLog
->GetTravelEntry(static_cast<IDropTarget
*>(this),
1617 if (SUCCEEDED(hResult
))
1619 SHEnableMenuItem(theMenu
, IDM_GOTO_BACK
, TRUE
);
1620 unusedEntry
.Release();
1623 SHEnableMenuItem(theMenu
, IDM_GOTO_BACK
, FALSE
);
1625 hResult
= travelLog
->GetTravelEntry(static_cast<IDropTarget
*>(this),
1629 if (SUCCEEDED(hResult
))
1631 SHEnableMenuItem(theMenu
, IDM_GOTO_FORWARD
, TRUE
);
1632 unusedEntry
.Release();
1635 SHEnableMenuItem(theMenu
, IDM_GOTO_FORWARD
, FALSE
);
1637 SHEnableMenuItem(theMenu
,
1638 IDM_GOTO_UPONELEVEL
,
1639 !_ILIsDesktop(fCurrentDirectoryPIDL
));
1641 hResult
= travelLog
->InsertMenuEntries(static_cast<IDropTarget
*>(this), theMenu
, position
,
1642 IDM_GOTO_TRAVEL_FIRSTTARGET
, IDM_GOTO_TRAVEL_LASTTARGET
, TLMENUF_BACKANDFORTH
| TLMENUF_CHECKCURRENT
);
1643 if (SUCCEEDED(hResult
))
1645 menuItemInfo
.cbSize
= sizeof(menuItemInfo
);
1646 menuItemInfo
.fMask
= MIIM_TYPE
| MIIM_ID
;
1647 menuItemInfo
.fType
= MF_SEPARATOR
;
1648 menuItemInfo
.wID
= IDM_GOTO_TRAVEL_SEP
;
1649 InsertMenuItem(theMenu
, position
, TRUE
, &menuItemInfo
);
1653 void CShellBrowser::UpdateViewMenu(HMENU theMenu
)
1655 CComPtr
<ITravelLog
> travelLog
;
1657 OLECMD commandList
[5];
1658 HMENU toolbarMenuBar
;
1660 MENUITEMINFO menuItemInfo
;
1663 gotoMenu
= SHGetMenuFromID(theMenu
, FCIDM_MENU_EXPLORE
);
1664 if (gotoMenu
!= NULL
)
1665 UpdateGotoMenu(gotoMenu
);
1667 commandList
[0].cmdID
= ITID_TOOLBARBANDSHOWN
;
1668 commandList
[1].cmdID
= ITID_ADDRESSBANDSHOWN
;
1669 commandList
[2].cmdID
= ITID_LINKSBANDSHOWN
;
1670 commandList
[3].cmdID
= ITID_TOOLBARLOCKED
;
1671 commandList
[4].cmdID
= ITID_CUSTOMIZEENABLED
;
1673 hResult
= IUnknown_QueryStatus(fClientBars
[BIInternetToolbar
].clientBar
,
1674 CGID_PrivCITCommands
, 5, commandList
, NULL
);
1675 if (FAILED_UNEXPECTEDLY(hResult
))
1676 DeleteMenu(theMenu
, IDM_VIEW_TOOLBARS
, MF_BYCOMMAND
);
1679 menuItemInfo
.cbSize
= sizeof(menuItemInfo
);
1680 menuItemInfo
.fMask
= MIIM_SUBMENU
;
1681 GetMenuItemInfo(theMenu
, IDM_VIEW_TOOLBARS
, FALSE
, &menuItemInfo
);
1682 DestroyMenu(menuItemInfo
.hSubMenu
);
1684 toolbarMenuBar
= LoadMenu(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU
));
1685 toolbarMenu
= GetSubMenu(toolbarMenuBar
, 0);
1686 RemoveMenu(toolbarMenuBar
, 0, MF_BYPOSITION
);
1687 DestroyMenu(toolbarMenuBar
);
1690 SHEnableMenuItem(toolbarMenu
, IDM_TOOLBARS_STANDARDBUTTONS
, commandList
[0].cmdf
& OLECMDF_ENABLED
);
1691 SHEnableMenuItem(toolbarMenu
, IDM_TOOLBARS_ADDRESSBAR
, commandList
[1].cmdf
& OLECMDF_ENABLED
);
1692 SHEnableMenuItem(toolbarMenu
, IDM_TOOLBARS_LINKSBAR
, commandList
[2].cmdf
& OLECMDF_ENABLED
);
1693 SHEnableMenuItem(toolbarMenu
, IDM_TOOLBARS_CUSTOMIZE
, commandList
[4].cmdf
& OLECMDF_ENABLED
);
1695 SHCheckMenuItem(toolbarMenu
, IDM_TOOLBARS_STANDARDBUTTONS
, commandList
[0].cmdf
& OLECMDF_LATCHED
);
1696 SHCheckMenuItem(toolbarMenu
, IDM_TOOLBARS_ADDRESSBAR
, commandList
[1].cmdf
& OLECMDF_LATCHED
);
1697 SHCheckMenuItem(toolbarMenu
, IDM_TOOLBARS_LINKSBAR
, commandList
[2].cmdf
& OLECMDF_LATCHED
);
1698 SHCheckMenuItem(toolbarMenu
, IDM_TOOLBARS_LOCKTOOLBARS
, commandList
[3].cmdf
& OLECMDF_LATCHED
);
1699 if ((commandList
[4].cmdf
& OLECMDF_ENABLED
) == 0)
1700 DeleteMenu(toolbarMenu
, IDM_TOOLBARS_CUSTOMIZE
, MF_BYCOMMAND
);
1701 DeleteMenu(toolbarMenu
, IDM_TOOLBARS_TEXTLABELS
, MF_BYCOMMAND
);
1702 DeleteMenu(toolbarMenu
, IDM_TOOLBARS_GOBUTTON
, MF_BYCOMMAND
);
1704 menuItemInfo
.cbSize
= sizeof(menuItemInfo
);
1705 menuItemInfo
.fMask
= MIIM_SUBMENU
;
1706 menuItemInfo
.hSubMenu
= toolbarMenu
;
1707 SetMenuItemInfo(theMenu
, IDM_VIEW_TOOLBARS
, FALSE
, &menuItemInfo
);
1709 SHCheckMenuItem(theMenu
, IDM_VIEW_STATUSBAR
, fStatusBarVisible
? TRUE
: FALSE
);
1712 HRESULT
CShellBrowser::BuildExplorerBandMenu()
1717 hBandsMenu
= SHGetMenuFromID(fCurrentMenuBar
, IDM_VIEW_EXPLORERBAR
);
1720 OutputDebugString(L
"No menu !\n");
1723 DSA_DeleteAllItems(menuDsa
);
1724 BuildExplorerBandCategory(hBandsMenu
, CATID_InfoBand
, 4, NULL
);
1725 BuildExplorerBandCategory(hBandsMenu
, CATID_CommBand
, 20, &nbFound
);
1729 DeleteMenu(hBandsMenu
, IDM_EXPLORERBAR_SEPARATOR
, MF_BYCOMMAND
);
1731 // Remove media menu since XP does it (according to API Monitor)
1732 DeleteMenu(hBandsMenu
, IDM_EXPLORERBAR_MEDIA
, MF_BYCOMMAND
);
1736 HRESULT
CShellBrowser::BuildExplorerBandCategory(HMENU hBandsMenu
, CATID category
, DWORD dwPos
, UINT
*nbFound
)
1739 CComPtr
<IEnumGUID
> pEnumGUID
;
1740 WCHAR wszBandName
[MAX_PATH
];
1741 WCHAR wszBandGUID
[MAX_PATH
];
1742 WCHAR wRegKey
[MAX_PATH
];
1749 mbi
.fVertical
= IsEqualGUID(category
, CATID_InfoBand
);
1751 hr
= SHEnumClassesOfCategories(1, &category
, 0, NULL
, &pEnumGUID
);
1752 if (FAILED_UNEXPECTEDLY(hr
))
1758 pEnumGUID
->Next(1, &iter
, &dwRead
);
1761 // Get the band name
1762 if (IsBuiltinBand(iter
))
1764 if (!StringFromGUID2(iter
, wszBandGUID
, MAX_PATH
))
1766 StringCchPrintfW(wRegKey
, MAX_PATH
, L
"CLSID\\%s", wszBandGUID
);
1767 dwDataSize
= MAX_PATH
;
1768 SHGetValue(HKEY_CLASSES_ROOT
, wRegKey
, NULL
, NULL
, wszBandName
, &dwDataSize
);
1771 InsertMenu(hBandsMenu
, dwPos
+ cBands
, MF_BYPOSITION
, IDM_EXPLORERBAND_BEGINCUSTOM
+ DSA_GetItemCount(menuDsa
), wszBandName
);
1772 DSA_AppendItem(menuDsa
, &mbi
);
1782 BOOL
CShellBrowser::IsBuiltinBand(CLSID
&bandID
)
1784 if (IsEqualCLSID(bandID
, CLSID_ExplorerBand
))
1786 if (IsEqualCLSID(bandID
, CLSID_SH_SearchBand
) || IsEqualCLSID(bandID
, CLSID_SearchBand
))
1788 if (IsEqualCLSID(bandID
, CLSID_IE_SearchBand
) || IsEqualCLSID(bandID
, CLSID_FileSearchBand
))
1790 if (IsEqualCLSID(bandID
, CLSID_SH_HistBand
))
1792 if (IsEqualCLSID(bandID
, CLSID_SH_FavBand
))
1794 if (IsEqualCLSID(bandID
, CLSID_ChannelsBand
))
1799 HRESULT
CShellBrowser::OnSearch()
1801 CComPtr
<IObjectWithSite
> objectWithSite
;
1802 CComPtr
<IContextMenu
> contextMenu
;
1803 CMINVOKECOMMANDINFO commandInfo
;
1804 const char *searchGUID
= "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}";
1807 // TODO: Query shell if this command is enabled first
1809 memset(&commandInfo
, 0, sizeof(commandInfo
));
1810 commandInfo
.cbSize
= sizeof(commandInfo
);
1811 commandInfo
.hwnd
= m_hWnd
;
1812 commandInfo
.lpParameters
= searchGUID
;
1813 commandInfo
.nShow
= SW_SHOWNORMAL
;
1815 hResult
= CoCreateInstance(CLSID_ShellSearchExt
, NULL
, CLSCTX_INPROC_SERVER
,
1816 IID_PPV_ARG(IContextMenu
, &contextMenu
));
1817 if (FAILED_UNEXPECTEDLY(hResult
))
1819 hResult
= contextMenu
->QueryInterface(IID_PPV_ARG(IObjectWithSite
, &objectWithSite
));
1820 if (FAILED_UNEXPECTEDLY(hResult
))
1822 hResult
= objectWithSite
->SetSite(dynamic_cast<IShellBrowser
*>(this));
1823 if (FAILED_UNEXPECTEDLY(hResult
))
1825 hResult
= contextMenu
->InvokeCommand(&commandInfo
);
1826 hResult
= objectWithSite
->SetSite(NULL
);
1830 bool IUnknownIsEqual(IUnknown
*int1
, IUnknown
*int2
)
1832 CComPtr
<IUnknown
> int1Retry
;
1833 CComPtr
<IUnknown
> int2Retry
;
1838 if (int1
== NULL
|| int2
== NULL
)
1840 hResult
= int1
->QueryInterface(IID_PPV_ARG(IUnknown
, &int1Retry
));
1841 if (FAILED_UNEXPECTEDLY(hResult
))
1843 hResult
= int2
->QueryInterface(IID_PPV_ARG(IUnknown
, &int2Retry
));
1844 if (FAILED_UNEXPECTEDLY(hResult
))
1846 if (int1Retry
== int2Retry
)
1851 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetBorderDW(IUnknown
*punkObj
, LPRECT prcBorder
)
1853 static const INT excludeItems
[] = { 1, 1, 1, 0xa001, 0, 0 };
1855 RECT availableBounds
;
1857 GetEffectiveClientRect(m_hWnd
, &availableBounds
, excludeItems
);
1858 for (INT x
= 0; x
< 3; x
++)
1860 if (fClientBars
[x
].clientBar
.p
!= NULL
&& !IUnknownIsEqual(fClientBars
[x
].clientBar
, punkObj
))
1862 availableBounds
.top
+= fClientBars
[x
].borderSpace
.top
;
1863 availableBounds
.left
+= fClientBars
[x
].borderSpace
.left
;
1864 availableBounds
.bottom
-= fClientBars
[x
].borderSpace
.bottom
;
1865 availableBounds
.right
-= fClientBars
[x
].borderSpace
.right
;
1868 *prcBorder
= availableBounds
;
1872 HRESULT STDMETHODCALLTYPE
CShellBrowser::RequestBorderSpaceDW(IUnknown
* punkObj
, LPCBORDERWIDTHS pbw
)
1877 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetBorderSpaceDW(IUnknown
* punkObj
, LPCBORDERWIDTHS pbw
)
1879 for (INT x
= 0; x
< 3; x
++)
1881 if (IUnknownIsEqual(fClientBars
[x
].clientBar
, punkObj
))
1883 fClientBars
[x
].borderSpace
= *pbw
;
1884 // if this bar changed size, it cascades and forces all subsequent bars to resize
1889 return E_INVALIDARG
;
1892 HRESULT STDMETHODCALLTYPE
CShellBrowser::QueryStatus(const GUID
*pguidCmdGroup
,
1893 ULONG cCmds
, OLECMD prgCmds
[ ], OLECMDTEXT
*pCmdText
)
1895 CComPtr
<IOleCommandTarget
> commandTarget
;
1898 if (prgCmds
== NULL
)
1899 return E_INVALIDARG
;
1900 if (pguidCmdGroup
== NULL
)
1902 if (fCurrentShellView
.p
!= NULL
)
1904 hResult
= fCurrentShellView
->QueryInterface(IID_PPV_ARG(IOleCommandTarget
, &commandTarget
));
1905 if (SUCCEEDED(hResult
) && commandTarget
.p
!= NULL
)
1906 return commandTarget
->QueryStatus(NULL
, 1, prgCmds
, pCmdText
);
1915 else if (IsEqualIID(*pguidCmdGroup
, CGID_Explorer
))
1919 switch (prgCmds
->cmdID
)
1921 case 0x1c: // search
1922 prgCmds
->cmdf
= OLECMDF_SUPPORTED
| OLECMDF_ENABLED
;
1924 case 0x1d: // history
1925 prgCmds
->cmdf
= OLECMDF_SUPPORTED
| OLECMDF_ENABLED
;
1927 case 0x1e: // favorites
1928 prgCmds
->cmdf
= OLECMDF_SUPPORTED
| OLECMDF_ENABLED
;
1930 case 0x23: // folders
1931 prgCmds
->cmdf
= OLECMDF_SUPPORTED
| OLECMDF_ENABLED
| OLECMDF_LATCHED
;
1941 else if (IsEqualIID(*pguidCmdGroup
, CGID_ShellBrowser
))
1945 switch (prgCmds
->cmdID
)
1947 case 0xa022: // up level
1948 prgCmds
->cmdf
= OLECMDF_SUPPORTED
;
1949 if (fCurrentDirectoryPIDL
->mkid
.cb
!= 0)
1950 prgCmds
->cmdf
|= OLECMDF_ENABLED
;
1960 HRESULT STDMETHODCALLTYPE
CShellBrowser::Exec(const GUID
*pguidCmdGroup
, DWORD nCmdID
,
1961 DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
1967 TRACE("Unhandled null CGID %d %d %p %p\n", nCmdID
, nCmdexecopt
, pvaIn
, pvaOut
);
1970 if (IsEqualIID(*pguidCmdGroup
, CGID_Explorer
))
1975 hResult
= ShowBand(CLSID_ExplorerBand
, true);
1978 if (nCmdexecopt
== 1)
1980 // pvaIn is a VT_UNKNOWN with a band that is being hidden
1984 // update zones part of the status bar
1987 case 0x35: // don't do this, and the internet toolbar doesn't create a menu band
1988 V_VT(pvaOut
) = VT_INT_PTR
;
1989 V_INTREF(pvaOut
) = reinterpret_cast<INT
*>(
1990 LoadMenu(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU
)));
1993 // indicate if this cabinet was opened as a browser
1999 else if (IsEqualIID(*pguidCmdGroup
, CGID_InternetButtons
))
2008 else if (IsEqualIID(*pguidCmdGroup
, CGID_Theater
))
2013 // what is theater mode and why do we receive this?
2017 else if (IsEqualIID(*pguidCmdGroup
, CGID_MenuBand
))
2022 // initialize favorites menu
2026 else if (IsEqualIID(*pguidCmdGroup
, CGID_ShellDocView
))
2031 // refresh on toolbar clicked
2034 // called for unknown bands ?
2037 // tell the view if it should hide the task pane or not
2038 return (fClientBars
[BIVerticalBaseBar
].clientBar
.p
== NULL
) ? S_FALSE
: S_OK
;
2041 else if (IsEqualIID(*pguidCmdGroup
, CGID_ShellBrowser
))
2046 return NavigateToParent();
2049 else if (IsEqualIID(*pguidCmdGroup
, CGID_IExplorerToolbar
))
2054 return DoFolderOptions();
2057 else if (IsEqualIID(*pguidCmdGroup
, CGID_DefView
))
2062 // Reset All Folders option in Folder Options
2066 else if (IsEqualIID(*pguidCmdGroup
, CLSID_CommonButtons
))
2068 // Windows seems to use this as proxy for toolbar buttons.
2069 // We use it for search band for now to remove code duplication,
2070 // let's see if it could be useful in the future.
2074 // Show search band from toolbar
2087 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetWindow(HWND
*lphwnd
)
2095 HRESULT STDMETHODCALLTYPE
CShellBrowser::ContextSensitiveHelp(BOOL fEnterMode
)
2100 HRESULT STDMETHODCALLTYPE
CShellBrowser::InsertMenusSB(HMENU hmenuShared
, LPOLEMENUGROUPWIDTHS lpMenuWidths
)
2102 HMENU mainMenu
= LoadMenu(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU
));
2104 Shell_MergeMenus(hmenuShared
, mainMenu
, 0, 0, FCIDM_BROWSERLAST
, MM_SUBMENUSHAVEIDS
);
2106 int GCCU(itemCount3
) = GetMenuItemCount(hmenuShared
);
2109 DestroyMenu(mainMenu
);
2111 lpMenuWidths
->width
[0] = 2;
2112 lpMenuWidths
->width
[2] = 3;
2113 lpMenuWidths
->width
[4] = 1;
2117 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetMenuSB(HMENU hmenuShared
, HOLEMENU holemenuRes
, HWND hwndActiveObject
)
2119 CComPtr
<IShellMenu
> shellMenu
;
2122 if (hmenuShared
&& IsMenu(hmenuShared
) == FALSE
)
2124 hResult
= GetMenuBand(IID_PPV_ARG(IShellMenu
, &shellMenu
));
2125 if (FAILED_UNEXPECTEDLY(hResult
))
2130 hmenuShared
= LoadMenu(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU
));
2132 // FIXME: Figure out the proper way to do this.
2133 HMENU hMenuFavs
= GetSubMenu(hmenuShared
, 3);
2136 DeleteMenu(hMenuFavs
, IDM_FAVORITES_EMPTY
, MF_BYCOMMAND
);
2139 hResult
= shellMenu
->SetMenu(hmenuShared
, m_hWnd
, SMSET_DONTOWN
);
2140 if (FAILED_UNEXPECTEDLY(hResult
))
2142 fCurrentMenuBar
= hmenuShared
;
2143 BuildExplorerBandMenu();
2147 HRESULT STDMETHODCALLTYPE
CShellBrowser::RemoveMenusSB(HMENU hmenuShared
)
2149 if (hmenuShared
== fCurrentMenuBar
)
2151 //DestroyMenu(fCurrentMenuBar);
2152 SetMenuSB(NULL
, NULL
, NULL
);
2157 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetStatusTextSB(LPCOLESTR pszStatusText
)
2162 ::SetWindowText(fStatusBar
, pszStatusText
);
2171 HRESULT STDMETHODCALLTYPE
CShellBrowser::EnableModelessSB(BOOL fEnable
)
2176 HRESULT STDMETHODCALLTYPE
CShellBrowser::TranslateAcceleratorSB(MSG
*pmsg
, WORD wID
)
2178 if (!::TranslateAcceleratorW(m_hWnd
, m_hAccel
, pmsg
))
2183 HRESULT STDMETHODCALLTYPE
CShellBrowser::BrowseObject(LPCITEMIDLIST pidl
, UINT wFlags
)
2185 return BrowseToPIDL(pidl
, BTP_UPDATE_CUR_HISTORY
| BTP_UPDATE_NEXT_HISTORY
);
2188 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetViewStateStream(DWORD grfMode
, IStream
**ppStrm
)
2193 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetControlWindow(UINT id
, HWND
*lphwnd
)
2201 *lphwnd
= fToolbarProxy
.m_hWnd
;
2204 *lphwnd
= fStatusBar
;
2207 // find the directory browser and return it
2208 // this should be used only to determine if a tree is present
2211 // is this a progress dialog?
2217 HRESULT STDMETHODCALLTYPE
CShellBrowser::SendControlMsg(
2218 UINT id
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*pret
)
2227 result
= fToolbarProxy
.SendMessage(uMsg
, wParam
, lParam
);
2232 result
= SendMessage(fStatusBar
, uMsg
, wParam
, lParam
);
2240 HRESULT STDMETHODCALLTYPE
CShellBrowser::QueryActiveShellView(IShellView
**ppshv
)
2244 *ppshv
= fCurrentShellView
;
2245 if (fCurrentShellView
.p
!= NULL
)
2246 fCurrentShellView
.p
->AddRef();
2250 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnViewWindowActive(IShellView
*ppshv
)
2255 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetToolbarItems(LPTBBUTTON lpButtons
, UINT nButtons
, UINT uFlags
)
2260 HRESULT STDMETHODCALLTYPE
CShellBrowser::DragEnter(
2261 IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
)
2266 HRESULT STDMETHODCALLTYPE
CShellBrowser::DragOver(DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
)
2271 HRESULT STDMETHODCALLTYPE
CShellBrowser::DragLeave()
2276 HRESULT STDMETHODCALLTYPE
CShellBrowser::Drop(
2277 IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
)
2282 HRESULT STDMETHODCALLTYPE
CShellBrowser::QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
)
2284 // view does a query for SID_STopLevelBrowser, IID_IShellBrowserService
2285 // the returned interface has a method GetPropertyBag on it
2286 if (IsEqualIID(guidService
, SID_STopLevelBrowser
))
2287 return this->QueryInterface(riid
, ppvObject
);
2288 if (IsEqualIID(guidService
, SID_SShellBrowser
))
2289 return this->QueryInterface(riid
, ppvObject
);
2290 if (IsEqualIID(guidService
, SID_ITargetFrame2
))
2291 return this->QueryInterface(riid
, ppvObject
);
2292 if (IsEqualIID(guidService
, SID_IWebBrowserApp
)) // without this, the internet toolbar won't reflect notifications
2293 return this->QueryInterface(riid
, ppvObject
);
2294 if (IsEqualIID(guidService
, SID_SProxyBrowser
))
2295 return this->QueryInterface(riid
, ppvObject
);
2296 if (IsEqualIID(guidService
, SID_IExplorerToolbar
))
2297 return fClientBars
[BIInternetToolbar
].clientBar
->QueryInterface(riid
, ppvObject
);
2298 if (IsEqualIID(riid
, IID_IShellBrowser
))
2299 return this->QueryInterface(riid
, ppvObject
);
2300 return E_NOINTERFACE
;
2303 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetPropertyBag(long flags
, REFIID riid
, void **ppvObject
)
2305 if (ppvObject
== NULL
)
2311 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetTypeInfoCount(UINT
*pctinfo
)
2316 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetTypeInfo(UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
)
2321 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetIDsOfNames(REFIID riid
, LPOLESTR
*rgszNames
,
2322 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
2327 HRESULT STDMETHODCALLTYPE
CShellBrowser::Invoke(DISPID dispIdMember
, REFIID riid
, LCID lcid
,
2328 WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2333 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetParentSite(IOleInPlaceSite
**ppipsite
)
2338 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetTitle(IShellView
*psv
, LPCWSTR pszName
)
2343 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetTitle(IShellView
*psv
, LPWSTR pszName
, DWORD cchName
)
2348 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetOleObject(IOleObject
**ppobjv
)
2353 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetTravelLog(ITravelLog
**pptl
)
2357 // called by toolbar when displaying tooltips
2362 if (fTravelLog
.p
== NULL
)
2364 hResult
= CTravelLog_CreateInstance(IID_PPV_ARG(ITravelLog
, &fTravelLog
));
2365 if (FAILED_UNEXPECTEDLY(hResult
))
2368 *pptl
= fTravelLog
.p
;
2369 fTravelLog
.p
->AddRef();
2373 HRESULT STDMETHODCALLTYPE
CShellBrowser::ShowControlWindow(UINT id
, BOOL fShow
)
2378 HRESULT STDMETHODCALLTYPE
CShellBrowser::IsControlWindowShown(UINT id
, BOOL
*pfShown
)
2383 HRESULT STDMETHODCALLTYPE
CShellBrowser::IEGetDisplayName(LPCITEMIDLIST pidl
, LPWSTR pwszName
, UINT uFlags
)
2388 HRESULT STDMETHODCALLTYPE
CShellBrowser::IEParseDisplayName(UINT uiCP
, LPCWSTR pwszPath
, LPITEMIDLIST
*ppidlOut
)
2393 HRESULT STDMETHODCALLTYPE
CShellBrowser::DisplayParseError(HRESULT hres
, LPCWSTR pwszPath
)
2398 HRESULT STDMETHODCALLTYPE
CShellBrowser::NavigateToPidl(LPCITEMIDLIST pidl
, DWORD grfHLNF
)
2403 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetNavigateState(BNSTATE bnstate
)
2408 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetNavigateState(BNSTATE
*pbnstate
)
2413 HRESULT STDMETHODCALLTYPE
CShellBrowser::NotifyRedirect(IShellView
*psv
, LPCITEMIDLIST pidl
, BOOL
*pfDidBrowse
)
2418 HRESULT STDMETHODCALLTYPE
CShellBrowser::UpdateWindowList()
2423 HRESULT STDMETHODCALLTYPE
CShellBrowser::UpdateBackForwardState()
2428 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetFlags(DWORD dwFlags
, DWORD dwFlagMask
)
2433 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetFlags(DWORD
*pdwFlags
)
2438 HRESULT STDMETHODCALLTYPE
CShellBrowser::CanNavigateNow()
2443 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetPidl(LPITEMIDLIST
*ppidl
)
2445 // called by explorer bar to get current pidl
2448 *ppidl
= ILClone(fCurrentDirectoryPIDL
);
2452 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetReferrer(LPCITEMIDLIST pidl
)
2457 DWORD STDMETHODCALLTYPE
CShellBrowser::GetBrowserIndex()
2462 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetBrowserByIndex(DWORD dwID
, IUnknown
**ppunk
)
2467 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetHistoryObject(IOleObject
**ppole
, IStream
**pstm
, IBindCtx
**ppbc
)
2469 if (ppole
== NULL
|| pstm
== NULL
|| ppbc
== NULL
)
2470 return E_INVALIDARG
;
2471 *ppole
= fHistoryObject
;
2472 if (fHistoryObject
!= NULL
)
2473 fHistoryObject
->AddRef();
2474 *pstm
= fHistoryStream
;
2475 if (fHistoryStream
!= NULL
)
2476 fHistoryStream
->AddRef();
2477 *ppbc
= fHistoryBindContext
;
2478 if (fHistoryBindContext
!= NULL
)
2479 fHistoryBindContext
->AddRef();
2480 fHistoryObject
= NULL
;
2481 fHistoryStream
= NULL
;
2482 fHistoryBindContext
= NULL
;
2488 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetHistoryObject(IOleObject
*pole
, BOOL fIsLocalAnchor
)
2493 HRESULT STDMETHODCALLTYPE
CShellBrowser::CacheOLEServer(IOleObject
*pole
)
2498 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetSetCodePage(VARIANT
*pvarIn
, VARIANT
*pvarOut
)
2503 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnHttpEquiv(
2504 IShellView
*psv
, BOOL fDone
, VARIANT
*pvarargIn
, VARIANT
*pvarargOut
)
2509 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetPalette(HPALETTE
*hpal
)
2514 HRESULT STDMETHODCALLTYPE
CShellBrowser::RegisterWindow(BOOL fForceRegister
, int swc
)
2519 LRESULT STDMETHODCALLTYPE
CShellBrowser::WndProcBS(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
2524 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetAsDefFolderSettings()
2529 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetViewRect(RECT
*prc
)
2534 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnSize(WPARAM wParam
)
2539 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnCreate(struct tagCREATESTRUCTW
*pcs
)
2541 m_hAccel
= LoadAcceleratorsW(GetModuleHandle(L
"browseui.dll"), MAKEINTRESOURCEW(256));
2545 LRESULT STDMETHODCALLTYPE
CShellBrowser::OnCommand(WPARAM wParam
, LPARAM lParam
)
2550 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnDestroy()
2555 LRESULT STDMETHODCALLTYPE
CShellBrowser::OnNotify(struct tagNMHDR
*pnm
)
2560 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnSetFocus()
2565 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnFrameWindowActivateBS(BOOL fActive
)
2570 HRESULT STDMETHODCALLTYPE
CShellBrowser::ReleaseShellView()
2575 HRESULT STDMETHODCALLTYPE
CShellBrowser::ActivatePendingView()
2580 HRESULT STDMETHODCALLTYPE
CShellBrowser::CreateViewWindow(
2581 IShellView
*psvNew
, IShellView
*psvOld
, LPRECT prcView
, HWND
*phwnd
)
2586 HRESULT STDMETHODCALLTYPE
CShellBrowser::CreateBrowserPropSheetExt(REFIID riid
, void **ppv
)
2591 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetViewWindow(HWND
*phwndView
)
2596 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetBaseBrowserData(LPCBASEBROWSERDATA
*pbbd
)
2601 LPBASEBROWSERDATA STDMETHODCALLTYPE
CShellBrowser::PutBaseBrowserData()
2606 HRESULT STDMETHODCALLTYPE
CShellBrowser::InitializeTravelLog(ITravelLog
*ptl
, DWORD dw
)
2611 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetTopBrowser()
2616 HRESULT STDMETHODCALLTYPE
CShellBrowser::Offline(int iCmd
)
2621 HRESULT STDMETHODCALLTYPE
CShellBrowser::AllowViewResize(BOOL f
)
2626 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetActivateState(UINT u
)
2631 HRESULT STDMETHODCALLTYPE
CShellBrowser::UpdateSecureLockIcon(int eSecureLock
)
2636 HRESULT STDMETHODCALLTYPE
CShellBrowser::InitializeDownloadManager()
2641 HRESULT STDMETHODCALLTYPE
CShellBrowser::InitializeTransitionSite()
2646 HRESULT STDMETHODCALLTYPE
CShellBrowser::_Initialize(HWND hwnd
, IUnknown
*pauto
)
2651 HRESULT STDMETHODCALLTYPE
CShellBrowser::_CancelPendingNavigationAsync()
2656 HRESULT STDMETHODCALLTYPE
CShellBrowser::_CancelPendingView()
2661 HRESULT STDMETHODCALLTYPE
CShellBrowser::_MaySaveChanges()
2666 HRESULT STDMETHODCALLTYPE
CShellBrowser::_PauseOrResumeView(BOOL fPaused
)
2671 HRESULT STDMETHODCALLTYPE
CShellBrowser::_DisableModeless()
2676 HRESULT STDMETHODCALLTYPE
CShellBrowser::_NavigateToPidl(LPCITEMIDLIST pidl
, DWORD grfHLNF
, DWORD dwFlags
)
2681 HRESULT STDMETHODCALLTYPE
CShellBrowser::_TryShell2Rename(IShellView
*psv
, LPCITEMIDLIST pidlNew
)
2686 HRESULT STDMETHODCALLTYPE
CShellBrowser::_SwitchActivationNow()
2691 HRESULT STDMETHODCALLTYPE
CShellBrowser::_ExecChildren(IUnknown
*punkBar
, BOOL fBroadcast
,
2692 const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANTARG
*pvarargIn
, VARIANTARG
*pvarargOut
)
2697 HRESULT STDMETHODCALLTYPE
CShellBrowser::_SendChildren(
2698 HWND hwndBar
, BOOL fBroadcast
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
2703 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetFolderSetData(struct tagFolderSetData
*pfsd
)
2708 HRESULT STDMETHODCALLTYPE
CShellBrowser::_OnFocusChange(UINT itb
)
2713 HRESULT STDMETHODCALLTYPE
CShellBrowser::v_ShowHideChildWindows(BOOL fChildOnly
)
2718 UINT STDMETHODCALLTYPE
CShellBrowser::_get_itbLastFocus()
2723 HRESULT STDMETHODCALLTYPE
CShellBrowser::_put_itbLastFocus(UINT itbLastFocus
)
2728 HRESULT STDMETHODCALLTYPE
CShellBrowser::_UIActivateView(UINT uState
)
2733 HRESULT STDMETHODCALLTYPE
CShellBrowser::_GetViewBorderRect(RECT
*prc
)
2738 HRESULT STDMETHODCALLTYPE
CShellBrowser::_UpdateViewRectSize()
2743 HRESULT STDMETHODCALLTYPE
CShellBrowser::_ResizeNextBorder(UINT itb
)
2748 HRESULT STDMETHODCALLTYPE
CShellBrowser::_ResizeView()
2753 HRESULT STDMETHODCALLTYPE
CShellBrowser::_GetEffectiveClientArea(LPRECT lprectBorder
, HMONITOR hmon
)
2758 IStream
*STDMETHODCALLTYPE
CShellBrowser::v_GetViewStream(LPCITEMIDLIST pidl
, DWORD grfMode
, LPCWSTR pwszName
)
2763 LRESULT STDMETHODCALLTYPE
CShellBrowser::ForwardViewMsg(UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
2768 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetAcceleratorMenu(HACCEL hacc
)
2773 int STDMETHODCALLTYPE
CShellBrowser::_GetToolbarCount()
2778 LPTOOLBARITEM STDMETHODCALLTYPE
CShellBrowser::_GetToolbarItem(int itb
)
2783 HRESULT STDMETHODCALLTYPE
CShellBrowser::_SaveToolbars(IStream
*pstm
)
2788 HRESULT STDMETHODCALLTYPE
CShellBrowser::_LoadToolbars(IStream
*pstm
)
2793 HRESULT STDMETHODCALLTYPE
CShellBrowser::_CloseAndReleaseToolbars(BOOL fClose
)
2798 HRESULT STDMETHODCALLTYPE
CShellBrowser::v_MayGetNextToolbarFocus(
2799 LPMSG lpMsg
, UINT itbNext
, int citb
, LPTOOLBARITEM
*pptbi
, HWND
*phwnd
)
2804 HRESULT STDMETHODCALLTYPE
CShellBrowser::_ResizeNextBorderHelper(UINT itb
, BOOL bUseHmonitor
)
2809 UINT STDMETHODCALLTYPE
CShellBrowser::_FindTBar(IUnknown
*punkSrc
)
2814 HRESULT STDMETHODCALLTYPE
CShellBrowser::_SetFocus(LPTOOLBARITEM ptbi
, HWND hwnd
, LPMSG lpMsg
)
2819 HRESULT STDMETHODCALLTYPE
CShellBrowser::v_MayTranslateAccelerator(MSG
*pmsg
)
2821 for (int i
= 0; i
< 3; i
++)
2823 if (IUnknown_TranslateAcceleratorIO(fClientBars
[i
].clientBar
, pmsg
) == S_OK
)
2827 if (!fCurrentShellView
)
2830 return fCurrentShellView
->TranslateAcceleratorW(pmsg
);
2833 HRESULT STDMETHODCALLTYPE
CShellBrowser::_GetBorderDWHelper(IUnknown
*punkSrc
, LPRECT lprectBorder
, BOOL bUseHmonitor
)
2838 HRESULT STDMETHODCALLTYPE
CShellBrowser::v_CheckZoneCrossing(LPCITEMIDLIST pidl
)
2843 HRESULT STDMETHODCALLTYPE
CShellBrowser::GoBack()
2845 CComPtr
<ITravelLog
> travelLog
;
2846 HRESULT hResult
= GetTravelLog(&travelLog
);
2847 if (FAILED_UNEXPECTEDLY(hResult
))
2849 return travelLog
->Travel(static_cast<IDropTarget
*>(this), TLOG_BACK
);
2852 HRESULT STDMETHODCALLTYPE
CShellBrowser::GoForward()
2854 CComPtr
<ITravelLog
> travelLog
;
2855 HRESULT hResult
= GetTravelLog(&travelLog
);
2856 if (FAILED_UNEXPECTEDLY(hResult
))
2858 return travelLog
->Travel(static_cast<IDropTarget
*>(this), TLOG_FORE
);
2861 HRESULT STDMETHODCALLTYPE
CShellBrowser::GoHome()
2866 HRESULT STDMETHODCALLTYPE
CShellBrowser::GoSearch()
2871 HRESULT STDMETHODCALLTYPE
CShellBrowser::Navigate(BSTR URL
, VARIANT
*Flags
,
2872 VARIANT
*TargetFrameName
, VARIANT
*PostData
, VARIANT
*Headers
)
2874 CComHeapPtr
<ITEMIDLIST
> pidl
;
2876 CComPtr
<IShellFolder
> pDesktop
;
2878 hResult
= SHGetDesktopFolder(&pDesktop
);
2879 if (FAILED_UNEXPECTEDLY(hResult
))
2881 hResult
= pDesktop
->ParseDisplayName(NULL
, NULL
, URL
, NULL
, &pidl
, NULL
);
2882 if (FAILED_UNEXPECTEDLY(hResult
))
2884 return BrowseObject(pidl
, 1);
2887 HRESULT STDMETHODCALLTYPE
CShellBrowser::Refresh()
2891 V_VT(&level
) = VT_I4
;
2893 return Refresh2(&level
);
2896 HRESULT STDMETHODCALLTYPE
CShellBrowser::Refresh2(VARIANT
*Level
)
2898 CComPtr
<IOleCommandTarget
> oleCommandTarget
;
2901 hResult
= fCurrentShellView
->QueryInterface(IID_PPV_ARG(IOleCommandTarget
, &oleCommandTarget
));
2902 if (FAILED_UNEXPECTEDLY(hResult
))
2904 return oleCommandTarget
->Exec(NULL
, 22, 1, Level
, NULL
);
2907 HRESULT STDMETHODCALLTYPE
CShellBrowser::Stop()
2912 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Application(IDispatch
**ppDisp
)
2917 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Parent(IDispatch
**ppDisp
)
2922 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Container(IDispatch
**ppDisp
)
2927 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Document(IDispatch
**ppDisp
)
2932 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_TopLevelContainer(VARIANT_BOOL
*pBool
)
2937 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Type(BSTR
*Type
)
2944 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Left(long *pl
)
2949 HRESULT STDMETHODCALLTYPE
CShellBrowser::put_Left(long Left
)
2954 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Top(long *pl
)
2959 HRESULT STDMETHODCALLTYPE
CShellBrowser::put_Top(long Top
)
2964 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Width(long *pl
)
2969 HRESULT STDMETHODCALLTYPE
CShellBrowser::put_Width(long Width
)
2974 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Height(long *pl
)
2979 HRESULT STDMETHODCALLTYPE
CShellBrowser::put_Height(long Height
)
2986 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_LocationName(BSTR
*LocationName
)
2991 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_LocationURL(BSTR
*LocationURL
)
2996 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Busy(VARIANT_BOOL
*pBool
)
3001 HRESULT STDMETHODCALLTYPE
CShellBrowser::Quit()
3006 HRESULT STDMETHODCALLTYPE
CShellBrowser::ClientToWindow(int *pcx
, int *pcy
)
3011 HRESULT STDMETHODCALLTYPE
CShellBrowser::PutProperty(BSTR Property
, VARIANT vtValue
)