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
, DWORD dwFlags
);
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
OnOrganizeFavorites(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
601 LRESULT
OnToggleStatusBarVisible(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
602 LRESULT
OnToggleToolbarLock(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
603 LRESULT
OnToggleToolbarBandVisible(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
604 LRESULT
OnToggleAddressBandVisible(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
605 LRESULT
OnToggleLinksBandVisible(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
606 LRESULT
OnToggleTextLabels(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
607 LRESULT
OnToolbarCustomize(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
608 LRESULT
OnGoTravel(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
609 LRESULT
OnExplorerBar(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
610 LRESULT
RelayCommands(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
613 static ATL::CWndClassInfo
& GetWndClassInfo()
615 static ATL::CWndClassInfo wc
=
617 { sizeof(WNDCLASSEX
), CS_DBLCLKS
, StartWindowProc
,
618 0, 0, NULL
, LoadIcon(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDI_CABINET
)),
619 LoadCursor(NULL
, IDC_ARROW
), (HBRUSH
)(COLOR_WINDOW
+ 1), NULL
, szCabinetWndClass
, NULL
},
620 NULL
, NULL
, IDC_ARROW
, TRUE
, 0, _T("")
625 BEGIN_MSG_MAP(CShellBrowser
)
626 MESSAGE_HANDLER(WM_CREATE
, OnCreate
)
627 MESSAGE_HANDLER(WM_DESTROY
, OnDestroy
)
628 MESSAGE_HANDLER(WM_SIZE
, OnSize
)
629 MESSAGE_HANDLER(WM_INITMENUPOPUP
, OnInitMenuPopup
)
630 MESSAGE_HANDLER(WM_SETFOCUS
, OnSetFocus
)
631 MESSAGE_HANDLER(WM_MEASUREITEM
, RelayMsgToShellView
)
632 MESSAGE_HANDLER(WM_DRAWITEM
, RelayMsgToShellView
)
633 MESSAGE_HANDLER(WM_MENUSELECT
, RelayMsgToShellView
)
634 COMMAND_ID_HANDLER(IDM_FILE_CLOSE
, OnClose
)
635 COMMAND_ID_HANDLER(IDM_TOOLS_FOLDEROPTIONS
, OnFolderOptions
)
636 COMMAND_ID_HANDLER(IDM_TOOLS_MAPNETWORKDRIVE
, OnMapNetworkDrive
)
637 COMMAND_ID_HANDLER(IDM_TOOLS_DISCONNECTNETWORKDRIVE
, OnDisconnectNetworkDrive
)
638 COMMAND_ID_HANDLER(IDM_HELP_ABOUT
, OnAboutReactOS
)
639 COMMAND_ID_HANDLER(IDM_GOTO_BACK
, OnGoBack
)
640 COMMAND_ID_HANDLER(IDM_GOTO_FORWARD
, OnGoForward
)
641 COMMAND_ID_HANDLER(IDM_GOTO_UPONELEVEL
, OnGoUpLevel
)
642 COMMAND_ID_HANDLER(IDM_GOTO_HOMEPAGE
, OnGoHome
)
643 COMMAND_ID_HANDLER(IDM_FAVORITES_ORGANIZEFAVORITES
, OnOrganizeFavorites
)
644 COMMAND_ID_HANDLER(IDM_VIEW_STATUSBAR
, OnToggleStatusBarVisible
)
645 COMMAND_ID_HANDLER(IDM_TOOLBARS_LOCKTOOLBARS
, OnToggleToolbarLock
)
646 COMMAND_ID_HANDLER(IDM_TOOLBARS_STANDARDBUTTONS
, OnToggleToolbarBandVisible
)
647 COMMAND_ID_HANDLER(IDM_TOOLBARS_ADDRESSBAR
, OnToggleAddressBandVisible
)
648 COMMAND_ID_HANDLER(IDM_TOOLBARS_LINKSBAR
, OnToggleLinksBandVisible
)
649 COMMAND_ID_HANDLER(IDM_TOOLBARS_TEXTLABELS
, OnToggleTextLabels
)
650 COMMAND_ID_HANDLER(IDM_TOOLBARS_CUSTOMIZE
, OnToolbarCustomize
)
651 COMMAND_ID_HANDLER(IDM_EXPLORERBAR_SEARCH
, OnExplorerBar
)
652 COMMAND_ID_HANDLER(IDM_EXPLORERBAR_FOLDERS
, OnExplorerBar
)
653 COMMAND_ID_HANDLER(IDM_EXPLORERBAR_HISTORY
, OnExplorerBar
)
654 COMMAND_ID_HANDLER(IDM_EXPLORERBAR_FAVORITES
, OnExplorerBar
)
655 COMMAND_ID_HANDLER(IDM_BACKSPACE
, OnBackspace
)
656 COMMAND_RANGE_HANDLER(IDM_GOTO_TRAVEL_FIRSTTARGET
, IDM_GOTO_TRAVEL_LASTTARGET
, OnGoTravel
)
657 COMMAND_RANGE_HANDLER(IDM_EXPLORERBAND_BEGINCUSTOM
, IDM_EXPLORERBAND_ENDCUSTOM
, OnExplorerBar
)
658 MESSAGE_HANDLER(WM_COMMAND
, RelayCommands
)
661 BEGIN_CONNECTION_POINT_MAP(CShellBrowser
)
662 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents2
)
663 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents
)
664 END_CONNECTION_POINT_MAP()
666 BEGIN_COM_MAP(CShellBrowser
)
667 COM_INTERFACE_ENTRY_IID(IID_IDockingWindowSite
, IDockingWindowSite
)
668 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget
, IOleCommandTarget
)
669 COM_INTERFACE_ENTRY2_IID(IID_IOleWindow
, IOleWindow
, IDockingWindowSite
)
670 COM_INTERFACE_ENTRY_IID(IID_IShellBrowser
, IShellBrowser
)
671 COM_INTERFACE_ENTRY_IID(IID_IDropTarget
, IDropTarget
)
672 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider
, IServiceProvider
)
673 COM_INTERFACE_ENTRY_IID(IID_IProfferService
, IProfferService
)
674 COM_INTERFACE_ENTRY_IID(IID_IShellBrowserService
, IShellBrowserService
)
675 COM_INTERFACE_ENTRY_IID(IID_IDispatch
, IDispatch
)
676 COM_INTERFACE_ENTRY_IID(IID_IConnectionPointContainer
, IConnectionPointContainer
)
677 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser
, IWebBrowser
)
678 COM_INTERFACE_ENTRY_IID(IID_IWebBrowserApp
, IWebBrowserApp
)
679 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser2
, IWebBrowser2
)
680 COM_INTERFACE_ENTRY_IID(IID_ITravelLogClient
, ITravelLogClient
)
681 COM_INTERFACE_ENTRY_IID(IID_IPersist
, IPersist
)
682 COM_INTERFACE_ENTRY_IID(IID_IPersistHistory
, IPersistHistory
)
683 COM_INTERFACE_ENTRY_IID(IID_IBrowserService
, IBrowserService
)
684 COM_INTERFACE_ENTRY_IID(IID_IBrowserService2
, IBrowserService2
)
688 extern HRESULT
CreateProgressDialog(REFIID riid
, void **ppv
);
690 CShellBrowser::CShellBrowser()
692 fCurrentShellViewWindow
= NULL
;
693 fCurrentDirectoryPIDL
= NULL
;
695 fStatusBarVisible
= true;
696 memset(fClientBars
, 0, sizeof(fClientBars
));
697 fCurrentMenuBar
= NULL
;
698 fHistoryObject
= NULL
;
699 fHistoryStream
= NULL
;
700 fHistoryBindContext
= NULL
;
703 CShellBrowser::~CShellBrowser()
706 DSA_Destroy(menuDsa
);
709 HRESULT
CShellBrowser::Initialize(LPITEMIDLIST pidl
, DWORD dwFlags
)
711 CComPtr
<IPersistStreamInit
> persistStreamInit
;
713 CComPtr
<IUnknown
> clientBar
;
715 _AtlInitialConstruct();
717 menuDsa
= DSA_Create(sizeof(MenuBandInfo
), 5);
719 return E_OUTOFMEMORY
;
721 fCabinetState
.cLength
= sizeof(fCabinetState
);
722 if (ReadCabinetState(&fCabinetState
, sizeof(fCabinetState
)) == FALSE
)
727 Create(HWND_DESKTOP
);
731 hResult
= CInternetToolbar_CreateInstance(IID_PPV_ARG(IUnknown
, &clientBar
));
732 if (FAILED_UNEXPECTEDLY(hResult
))
735 fClientBars
[BIInternetToolbar
].clientBar
= clientBar
;
738 hResult
= clientBar
->QueryInterface(IID_PPV_ARG(IPersistStreamInit
, &persistStreamInit
));
739 if (FAILED_UNEXPECTEDLY(hResult
))
742 hResult
= IUnknown_SetSite(clientBar
, static_cast<IShellBrowser
*>(this));
743 if (FAILED_UNEXPECTEDLY(hResult
))
746 hResult
= IUnknown_Exec(clientBar
, CGID_PrivCITCommands
, 1, 1 /* or 0 */, NULL
, NULL
);
747 if (FAILED_UNEXPECTEDLY(hResult
))
750 // TODO: create settingsStream from registry entry
751 //if (settingsStream.p)
753 // hResult = persistStreamInit->Load(settingsStream);
754 // if (FAILED_UNEXPECTEDLY(hResult))
759 hResult
= persistStreamInit
->InitNew();
760 if (FAILED_UNEXPECTEDLY(hResult
))
764 hResult
= IUnknown_ShowDW(clientBar
, TRUE
);
765 if (FAILED_UNEXPECTEDLY(hResult
))
768 fToolbarProxy
.Initialize(m_hWnd
, clientBar
);
772 fStatusBar
= CreateWindow(STATUSCLASSNAMEW
, NULL
, WS_CHILD
| WS_VISIBLE
| WS_CLIPSIBLINGS
|
773 SBT_NOBORDERS
| SBT_TOOLTIPS
, 0, 0, 500, 20, m_hWnd
, (HMENU
)0xa001,
774 _AtlBaseModule
.GetModuleInstance(), 0);
775 fStatusBarVisible
= true;
779 hResult
= BrowseToPIDL(pidl
, BTP_UPDATE_NEXT_HISTORY
);
780 if (FAILED_UNEXPECTEDLY(hResult
))
783 if ((dwFlags
& SBSP_EXPLOREMODE
) != NULL
)
784 ShowBand(CLSID_ExplorerBand
, true);
786 ShowWindow(SW_SHOWNORMAL
);
791 HRESULT
CShellBrowser::BrowseToPIDL(LPCITEMIDLIST pidl
, long flags
)
793 CComPtr
<IShellFolder
> newFolder
;
794 FOLDERSETTINGS newFolderSettings
;
797 // called by shell view to browse to new folder
798 // also called by explorer band to navigate to new folder
799 hResult
= SHBindToFolder(pidl
, &newFolder
);
800 if (FAILED_UNEXPECTEDLY(hResult
))
803 newFolderSettings
.ViewMode
= FVM_ICON
;
804 newFolderSettings
.fFlags
= 0;
805 hResult
= BrowseToPath(newFolder
, pidl
, &newFolderSettings
, flags
);
806 if (FAILED_UNEXPECTEDLY(hResult
))
811 BOOL WINAPI
_ILIsDesktop(LPCITEMIDLIST pidl
)
813 return (pidl
== NULL
|| pidl
->mkid
.cb
== 0);
816 BOOL WINAPI
_ILIsPidlSimple(LPCITEMIDLIST pidl
)
818 LPCITEMIDLIST pidlnext
;
823 if (! _ILIsDesktop(pidl
))
825 length
= pidl
->mkid
.cb
;
827 reinterpret_cast<LPCITEMIDLIST
>(
828 reinterpret_cast<const BYTE
*>(pidl
) + length
);
829 if (pidlnext
->mkid
.cb
!= 0)
835 HRESULT WINAPI
SHBindToFolderIDListParent(IShellFolder
*unused
, LPCITEMIDLIST pidl
,
836 const IID
*riid
, LPVOID
*ppv
, LPITEMIDLIST
*ppidlLast
)
838 CComPtr
<IShellFolder
> psf
;
839 LPITEMIDLIST pidlChild
;
840 LPITEMIDLIST pidlParent
;
847 if (ppidlLast
!= NULL
)
849 if (_ILIsPidlSimple(pidl
))
851 if (ppidlLast
!= NULL
)
852 *ppidlLast
= ILClone(pidl
);
853 hResult
= SHGetDesktopFolder((IShellFolder
**)ppv
);
857 pidlChild
= ILClone(ILFindLastID(pidl
));
858 pidlParent
= ILClone(pidl
);
859 ILRemoveLastID(pidlParent
);
860 hResult
= SHGetDesktopFolder(&psf
);
861 if (SUCCEEDED(hResult
))
862 hResult
= psf
->BindToObject(pidlParent
, NULL
, *riid
, ppv
);
863 if (SUCCEEDED(hResult
) && ppidlLast
!= NULL
)
864 *ppidlLast
= pidlChild
;
872 HRESULT
IEGetNameAndFlagsEx(LPITEMIDLIST pidl
, SHGDNF uFlags
, long param10
,
873 LPWSTR pszBuf
, UINT cchBuf
, SFGAOF
*rgfInOut
)
875 CComPtr
<IShellFolder
> parentFolder
;
876 LPITEMIDLIST childPIDL
= NULL
;
880 hResult
= SHBindToFolderIDListParent(NULL
, pidl
, &IID_PPV_ARG(IShellFolder
, &parentFolder
), &childPIDL
);
884 hResult
= parentFolder
->GetDisplayNameOf(childPIDL
, uFlags
, &L108
);
888 StrRetToBufW(&L108
, childPIDL
, pszBuf
, cchBuf
);
891 hResult
= parentFolder
->GetAttributesOf(1, const_cast<LPCITEMIDLIST
*>(&childPIDL
), rgfInOut
);
904 long IEGetNameAndFlags(LPITEMIDLIST pidl
, SHGDNF uFlags
, LPWSTR pszBuf
, UINT cchBuf
, SFGAOF
*rgfInOut
)
906 return IEGetNameAndFlagsEx(pidl
, uFlags
, 0, pszBuf
, cchBuf
, rgfInOut
);
909 HRESULT
CShellBrowser::BrowseToPath(IShellFolder
*newShellFolder
,
910 LPCITEMIDLIST absolutePIDL
, FOLDERSETTINGS
*folderSettings
, long flags
)
912 CComPtr
<IObjectWithSite
> objectWithSite
;
913 CComPtr
<IShellFolder
> saveCurrentShellFolder
;
914 CComPtr
<IShellView
> saveCurrentShellView
;
915 CComPtr
<IShellView
> newShellView
;
916 CComPtr
<ITravelLog
> travelLog
;
917 HWND newShellViewWindow
;
918 BOOL windowUpdateIsLocked
;
919 RECT shellViewWindowBounds
;
922 wchar_t newTitle
[MAX_PATH
];
926 if (newShellFolder
== NULL
)
929 hResult
= GetTravelLog(&travelLog
);
930 if (FAILED_UNEXPECTEDLY(hResult
))
934 if (flags
& BTP_UPDATE_CUR_HISTORY
)
936 if (travelLog
->CountEntries(static_cast<IDropTarget
*>(this)) > 0)
937 hResult
= travelLog
->UpdateEntry(static_cast<IDropTarget
*>(this), FALSE
);
938 // what to do with error? Do we want to halt browse because state save failed?
941 if (fCurrentShellView
)
943 fCurrentShellView
->UIActivate(SVUIA_DEACTIVATE
);
946 // create view object
947 hResult
= newShellFolder
->CreateViewObject(m_hWnd
, IID_PPV_ARG(IShellView
, &newShellView
));
948 if (FAILED_UNEXPECTEDLY(hResult
))
950 previousView
= fCurrentShellViewWindow
;
952 // enter updating section
953 saveCursor
= SetCursor(LoadCursor(NULL
, IDC_WAIT
));
954 windowUpdateIsLocked
= LockWindowUpdate(TRUE
);
955 if (fCurrentShellView
!= NULL
)
956 ::SendMessage(fCurrentShellViewWindow
, WM_SETREDRAW
, 0, 0);
959 hResult
= IUnknown_SetSite(newShellView
, static_cast<IDropTarget
*>(this));
961 // update folder and view
962 saveCurrentShellFolder
= fCurrentShellFolder
;
963 saveCurrentShellView
= fCurrentShellView
;
964 fCurrentShellFolder
= newShellFolder
;
965 fCurrentShellView
= newShellView
;
968 if (previousView
!= NULL
)
969 ::GetWindowRect(previousView
, &shellViewWindowBounds
);
971 ZeroMemory(&shellViewWindowBounds
, sizeof(shellViewWindowBounds
));
972 ::MapWindowPoints(0, m_hWnd
, reinterpret_cast<POINT
*>(&shellViewWindowBounds
), 2);
974 // create view window
975 hResult
= newShellView
->CreateViewWindow(saveCurrentShellView
, folderSettings
,
976 this, &shellViewWindowBounds
, &newShellViewWindow
);
977 if (FAILED_UNEXPECTEDLY(hResult
) || newShellViewWindow
== NULL
)
979 fCurrentShellView
= saveCurrentShellView
;
980 fCurrentShellFolder
= saveCurrentShellFolder
;
981 ::SendMessage(fCurrentShellViewWindow
, WM_SETREDRAW
, 1, 0);
982 if (windowUpdateIsLocked
)
983 LockWindowUpdate(FALSE
);
984 SetCursor(saveCursor
);
988 if (objectWithSite
.p
!= NULL
)
989 hResult
= objectWithSite
->SetSite(NULL
);
991 // update current pidl
992 ILFree(fCurrentDirectoryPIDL
);
993 fCurrentDirectoryPIDL
= ILClone(absolutePIDL
);
995 // update view window
996 if (saveCurrentShellView
!= NULL
)
997 saveCurrentShellView
->DestroyViewWindow();
998 fCurrentShellViewWindow
= newShellViewWindow
;
1001 saveCurrentShellView
.Release();
1002 saveCurrentShellFolder
.Release();
1004 hResult
= newShellView
->UIActivate(SVUIA_ACTIVATE_FOCUS
);
1006 // leave updating section
1007 if (windowUpdateIsLocked
)
1008 LockWindowUpdate(FALSE
);
1009 SetCursor(saveCursor
);
1012 if (flags
& BTP_UPDATE_NEXT_HISTORY
)
1014 hResult
= travelLog
->AddEntry(static_cast<IDropTarget
*>(this), FALSE
);
1015 hResult
= travelLog
->UpdateEntry(static_cast<IDropTarget
*>(this), FALSE
);
1019 nameFlags
= SHGDN_FORADDRESSBAR
| SHGDN_FORPARSING
;
1020 hResult
= IEGetNameAndFlags(fCurrentDirectoryPIDL
, nameFlags
, newTitle
,
1021 sizeof(newTitle
) / sizeof(wchar_t), NULL
);
1022 if (SUCCEEDED(hResult
))
1024 FireNavigateComplete(newTitle
);
1028 FireNavigateComplete(L
"ERROR");
1031 if (fCabinetState
.fFullPathTitle
)
1032 nameFlags
= SHGDN_FORADDRESSBAR
| SHGDN_FORPARSING
;
1034 nameFlags
= SHGDN_FORADDRESSBAR
;
1035 hResult
= IEGetNameAndFlags(fCurrentDirectoryPIDL
, nameFlags
, newTitle
,
1036 sizeof(newTitle
) / sizeof(wchar_t), NULL
);
1037 if (SUCCEEDED(hResult
))
1039 SetWindowText(newTitle
);
1041 LPCITEMIDLIST pidlChild
;
1042 INT index
, indexOpen
;
1043 HIMAGELIST himlSmall
, himlLarge
;
1045 CComPtr
<IShellFolder
> sf
;
1046 hResult
= SHBindToParent(absolutePIDL
, IID_PPV_ARG(IShellFolder
, &sf
), &pidlChild
);
1047 if (SUCCEEDED(hResult
))
1049 index
= SHMapPIDLToSystemImageListIndex(sf
, pidlChild
, &indexOpen
);
1051 Shell_GetImageLists(&himlLarge
, &himlSmall
);
1053 HICON icSmall
= ImageList_GetIcon(himlSmall
, indexOpen
, 0);
1054 HICON icLarge
= ImageList_GetIcon(himlLarge
, indexOpen
, 0);
1056 /* Hack to make it possible to release the old icons */
1057 /* Something seems to go wrong with WM_SETICON */
1058 HICON oldSmall
= (HICON
)SendMessage(WM_GETICON
, ICON_SMALL
, 0);
1059 HICON oldLarge
= (HICON
)SendMessage(WM_GETICON
, ICON_BIG
, 0);
1061 SendMessage(WM_SETICON
, ICON_SMALL
, reinterpret_cast<LPARAM
>(icSmall
));
1062 SendMessage(WM_SETICON
, ICON_BIG
, reinterpret_cast<LPARAM
>(icLarge
));
1064 DestroyIcon(oldSmall
);
1065 DestroyIcon(oldLarge
);
1069 FireCommandStateChangeAll();
1070 hResult
= UpdateForwardBackState();
1071 hResult
= UpdateUpState();
1075 HRESULT
CShellBrowser::GetMenuBand(REFIID riid
, void **shellMenu
)
1077 CComPtr
<IBandSite
> bandSite
;
1078 CComPtr
<IDeskBand
> deskBand
;
1081 if (!fClientBars
[BIInternetToolbar
].clientBar
)
1084 hResult
= IUnknown_QueryService(fClientBars
[BIInternetToolbar
].clientBar
, SID_IBandSite
, IID_PPV_ARG(IBandSite
, &bandSite
));
1085 if (FAILED_UNEXPECTEDLY(hResult
))
1088 hResult
= bandSite
->QueryBand(1, &deskBand
, NULL
, NULL
, 0);
1089 if (FAILED_UNEXPECTEDLY(hResult
))
1092 return deskBand
->QueryInterface(riid
, shellMenu
);
1095 HRESULT
CShellBrowser::GetBaseBar(bool vertical
, REFIID riid
, void **theBaseBar
)
1097 CComPtr
<IUnknown
> newBaseBar
;
1098 CComPtr
<IDeskBar
> deskBar
;
1099 CComPtr
<IUnknown
> newBaseBarSite
;
1100 CComPtr
<IDeskBarClient
> deskBarClient
;
1105 cache
= &fClientBars
[BIVerticalBaseBar
].clientBar
.p
;
1107 cache
= &fClientBars
[BIHorizontalBaseBar
].clientBar
.p
;
1110 hResult
= CBaseBar_CreateInstance(IID_PPV_ARG(IUnknown
, &newBaseBar
), vertical
);
1111 if (FAILED_UNEXPECTEDLY(hResult
))
1113 hResult
= CBaseBarSite_CreateInstance(IID_PPV_ARG(IUnknown
, &newBaseBarSite
), vertical
);
1114 if (FAILED_UNEXPECTEDLY(hResult
))
1117 // we have to store our basebar into cache now
1118 *cache
= newBaseBar
;
1120 // tell the new base bar about the shell browser
1121 hResult
= IUnknown_SetSite(newBaseBar
, static_cast<IDropTarget
*>(this));
1122 if (FAILED_UNEXPECTEDLY(hResult
))
1125 // tell the new base bar about the new base bar site
1126 hResult
= newBaseBar
->QueryInterface(IID_PPV_ARG(IDeskBar
, &deskBar
));
1127 if (FAILED_UNEXPECTEDLY(hResult
))
1129 hResult
= deskBar
->SetClient(newBaseBarSite
);
1130 if (FAILED_UNEXPECTEDLY(hResult
))
1133 // tell the new base bar site about the new base bar
1134 hResult
= newBaseBarSite
->QueryInterface(IID_PPV_ARG(IDeskBarClient
, &deskBarClient
));
1135 if (FAILED_UNEXPECTEDLY(hResult
))
1137 hResult
= deskBarClient
->SetDeskBarSite(newBaseBar
);
1138 if (FAILED_UNEXPECTEDLY(hResult
))
1142 return (*cache
)->QueryInterface(riid
, theBaseBar
);
1145 BOOL
CShellBrowser::IsBandLoaded(const CLSID clsidBand
, bool vertical
, DWORD
*pdwBandID
)
1148 CComPtr
<IDeskBar
> deskBar
;
1149 CComPtr
<IUnknown
> baseBarSite
;
1150 CComPtr
<IBandSite
> bandSite
;
1156 /* Get our basebarsite to be able to enumerate bands */
1157 hResult
= GetBaseBar(vertical
, IID_PPV_ARG(IDeskBar
, &deskBar
));
1158 if (FAILED_UNEXPECTEDLY(hResult
))
1160 hResult
= deskBar
->GetClient(&baseBarSite
);
1161 if (FAILED_UNEXPECTEDLY(hResult
))
1163 hResult
= baseBarSite
->QueryInterface(IID_PPV_ARG(IBandSite
, &bandSite
));
1164 if (FAILED_UNEXPECTEDLY(hResult
))
1167 hResult
= bandSite
->EnumBands(-1, &numBands
);
1168 if (FAILED_UNEXPECTEDLY(hResult
))
1171 for(i
= 0; i
< numBands
; i
++)
1173 CComPtr
<IPersist
> bandPersist
;
1175 hResult
= bandSite
->EnumBands(i
, &dwBandID
);
1176 if (FAILED_UNEXPECTEDLY(hResult
))
1179 hResult
= bandSite
->GetBandObject(dwBandID
, IID_PPV_ARG(IPersist
, &bandPersist
));
1180 if (FAILED_UNEXPECTEDLY(hResult
))
1182 hResult
= bandPersist
->GetClassID(&clsidTmp
);
1183 if (FAILED_UNEXPECTEDLY(hResult
))
1185 if (IsEqualGUID(clsidBand
, clsidTmp
))
1187 if (pdwBandID
) *pdwBandID
= dwBandID
;
1194 HRESULT
CShellBrowser::ShowBand(const CLSID
&classID
, bool vertical
)
1196 CComPtr
<IDockingWindow
> dockingWindow
;
1197 CComPtr
<IUnknown
> baseBarSite
;
1198 CComPtr
<IUnknown
> newBand
;
1199 CComPtr
<IDeskBar
> deskBar
;
1204 hResult
= GetBaseBar(vertical
, IID_PPV_ARG(IDeskBar
, &deskBar
));
1205 if (FAILED_UNEXPECTEDLY(hResult
))
1208 hResult
= deskBar
->GetClient(&baseBarSite
);
1209 if (FAILED_UNEXPECTEDLY(hResult
))
1212 hResult
= deskBar
->QueryInterface(IID_PPV_ARG(IDockingWindow
, &dockingWindow
));
1213 if (FAILED_UNEXPECTEDLY(hResult
))
1216 if (!IsBandLoaded(classID
, vertical
, &dwBandID
))
1218 TRACE("ShowBand called for CLSID %s, vertical=%d...\n", wine_dbgstr_guid(&classID
), vertical
);
1219 if (IsEqualCLSID(CLSID_ExplorerBand
, classID
))
1221 TRACE("CLSID_ExplorerBand requested, building internal band.\n");
1222 hResult
= CExplorerBand_CreateInstance(IID_PPV_ARG(IUnknown
, &newBand
));
1223 if (FAILED_UNEXPECTEDLY(hResult
))
1228 TRACE("A different CLSID requested, using CoCreateInstance.\n");
1229 hResult
= CoCreateInstance(classID
, NULL
, CLSCTX_INPROC_SERVER
, IID_PPV_ARG(IUnknown
, &newBand
));
1230 if (FAILED_UNEXPECTEDLY(hResult
))
1236 CComPtr
<IBandSite
> pBandSite
;
1238 hResult
= baseBarSite
->QueryInterface(IID_PPV_ARG(IBandSite
, &pBandSite
));
1239 if (!SUCCEEDED(hResult
))
1241 ERR("Can't get IBandSite interface\n");
1244 hResult
= pBandSite
->GetBandObject(dwBandID
, IID_PPV_ARG(IUnknown
, &newBand
));
1245 if (!SUCCEEDED(hResult
))
1247 ERR("Can't find band object\n");
1251 // It's hackish, but we should be able to show the wanted band until we
1252 // find the proper way to do this (but it seems to work to add a new band)
1253 // Here we'll just re-add the existing band to the site, causing it to display.
1255 V_VT(&vaIn
) = VT_UNKNOWN
;
1256 V_UNKNOWN(&vaIn
) = newBand
.p
;
1257 hResult
= IUnknown_Exec(baseBarSite
, CGID_IDeskBand
, 1, 1, &vaIn
, NULL
);
1258 if (FAILED_UNEXPECTEDLY(hResult
))
1263 hResult
= dockingWindow
->ShowDW(TRUE
);
1264 if (FAILED_UNEXPECTEDLY(hResult
))
1270 HRESULT
CShellBrowser::NavigateToParent()
1272 LPITEMIDLIST newDirectory
= ILClone(fCurrentDirectoryPIDL
);
1273 if (newDirectory
== NULL
)
1274 return E_OUTOFMEMORY
;
1275 if (_ILIsDesktop(newDirectory
))
1277 ILFree(newDirectory
);
1278 return E_INVALIDARG
;
1280 ILRemoveLastID(newDirectory
);
1281 HRESULT hResult
= BrowseToPIDL(newDirectory
, BTP_UPDATE_CUR_HISTORY
| BTP_UPDATE_NEXT_HISTORY
);
1282 ILFree(newDirectory
);
1283 if (FAILED_UNEXPECTEDLY(hResult
))
1288 BOOL CALLBACK
AddFolderOptionsPage(HPROPSHEETPAGE thePage
, LPARAM lParam
)
1290 PROPSHEETHEADER
* sheetInfo
= reinterpret_cast<PROPSHEETHEADER
*>(lParam
);
1291 if (sheetInfo
->nPages
>= folderOptionsPageCountMax
)
1293 sheetInfo
->phpage
[sheetInfo
->nPages
] = thePage
;
1294 sheetInfo
->nPages
++;
1298 HRESULT
CShellBrowser::DoFolderOptions()
1300 CComPtr
<IShellPropSheetExt
> folderOptionsSheet
;
1301 PROPSHEETHEADER m_PropSheet
;
1302 HPROPSHEETPAGE m_psp
[folderOptionsPageCountMax
];
1303 // CComPtr<IGlobalFolderSettings> globalSettings;
1304 // SHELLSTATE2 shellState;
1307 memset(m_psp
, 0, sizeof(m_psp
));
1308 memset(&m_PropSheet
, 0, sizeof(m_PropSheet
));
1310 // create sheet object
1311 hResult
= CoCreateInstance(CLSID_ShellFldSetExt
, NULL
, CLSCTX_INPROC_SERVER
,
1312 IID_PPV_ARG(IShellPropSheetExt
, &folderOptionsSheet
));
1313 if (FAILED_UNEXPECTEDLY(hResult
))
1316 // must set site in order for Apply to all Folders on Advanced page to be enabled
1317 hResult
= IUnknown_SetSite(folderOptionsSheet
, static_cast<IDispatch
*>(this));
1318 m_PropSheet
.phpage
= m_psp
;
1321 hResult
= CoCreateInstance(CLSID_GlobalFolderSettings
, NULL
, CLSCTX_INPROC_SERVER
, IID_PPV_ARG(IGlobalFolderSettings
, &globalSettings
));
1322 if (FAILED_UNEXPECTEDLY(hResult
))
1324 hResult
= globalSettings
->Get(&shellState
, sizeof(shellState
));
1325 if (FAILED_UNEXPECTEDLY(hResult
))
1330 hResult
= folderOptionsSheet
->AddPages(AddFolderOptionsPage
, reinterpret_cast<LPARAM
>(&m_PropSheet
));
1331 if (FAILED_UNEXPECTEDLY(hResult
))
1334 // CORE-11140 : Disabled this bit, because it prevents the folder options from showing.
1335 // It returns 'E_NOTIMPL'
1337 if (fCurrentShellView
!= NULL
)
1339 hResult
= fCurrentShellView
->AddPropertySheetPages(
1340 0, AddFolderOptionsPage
, reinterpret_cast<LPARAM
>(&m_PropSheet
));
1341 if (FAILED_UNEXPECTEDLY(hResult
))
1347 m_PropSheet
.dwSize
= sizeof(PROPSHEETHEADER
);
1348 m_PropSheet
.dwFlags
= 0;
1349 m_PropSheet
.hwndParent
= m_hWnd
;
1350 m_PropSheet
.hInstance
= _AtlBaseModule
.GetResourceInstance();
1351 m_PropSheet
.pszCaption
= _T("Folder Options");
1352 m_PropSheet
.nStartPage
= 0;
1353 PropertySheet(&m_PropSheet
);
1357 LRESULT CALLBACK
CShellBrowser::WindowProc(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
1359 CShellBrowser
*pThis
= reinterpret_cast<CShellBrowser
*>(hWnd
);
1360 _ATL_MSG
msg(pThis
->m_hWnd
, uMsg
, wParam
, lParam
);
1362 const _ATL_MSG
*previousMessage
;
1364 WNDPROC saveWindowProc
;
1367 hWnd
= pThis
->m_hWnd
;
1368 previousMessage
= pThis
->m_pCurrentMsg
;
1369 pThis
->m_pCurrentMsg
= &msg
;
1371 CComPtr
<IMenuBand
> menuBand
;
1372 hResult
= pThis
->GetMenuBand(IID_PPV_ARG(IMenuBand
, &menuBand
));
1373 if (SUCCEEDED(hResult
) && menuBand
.p
!= NULL
)
1375 hResult
= menuBand
->TranslateMenuMessage(&msg
, &lResult
);
1376 if (hResult
== S_OK
)
1379 wParam
= msg
.wParam
;
1380 lParam
= msg
.lParam
;
1384 handled
= pThis
->ProcessWindowMessage(hWnd
, uMsg
, wParam
, lParam
, lResult
, 0);
1385 ATLASSERT(pThis
->m_pCurrentMsg
== &msg
);
1386 if (handled
== FALSE
)
1388 if (uMsg
== WM_NCDESTROY
)
1390 saveWindowProc
= reinterpret_cast<WNDPROC
>(::GetWindowLongPtr(hWnd
, GWL_WNDPROC
));
1391 lResult
= pThis
->DefWindowProc(uMsg
, wParam
, lParam
);
1392 if (saveWindowProc
== reinterpret_cast<WNDPROC
>(::GetWindowLongPtr(hWnd
, GWL_WNDPROC
)))
1393 ::SetWindowLongPtr(hWnd
, GWL_WNDPROC
, (LONG_PTR
)pThis
->m_pfnSuperWindowProc
);
1394 pThis
->m_dwState
|= WINSTATE_DESTROYED
;
1397 lResult
= pThis
->DefWindowProc(uMsg
, wParam
, lParam
);
1399 pThis
->m_pCurrentMsg
= previousMessage
;
1400 if (previousMessage
== NULL
&& (pThis
->m_dwState
& WINSTATE_DESTROYED
) != 0)
1402 pThis
->m_dwState
&= ~WINSTATE_DESTROYED
;
1403 pThis
->m_hWnd
= NULL
;
1404 pThis
->OnFinalMessage(hWnd
);
1409 void CShellBrowser::RepositionBars()
1415 GetClientRect(&clientRect
);
1417 if (fStatusBarVisible
&& fStatusBar
)
1419 ::GetWindowRect(fStatusBar
, &statusRect
);
1420 ::SetWindowPos(fStatusBar
, NULL
, clientRect
.left
, clientRect
.bottom
- (statusRect
.bottom
- statusRect
.top
),
1421 clientRect
.right
- clientRect
.left
,
1422 statusRect
.bottom
- statusRect
.top
, SWP_NOOWNERZORDER
| SWP_NOZORDER
);
1423 clientRect
.bottom
-= statusRect
.bottom
- statusRect
.top
;
1426 for (x
= 0; x
< 3; x
++)
1428 HWND hwnd
= fClientBars
[x
].hwnd
;
1429 RECT borderSpace
= fClientBars
[x
].borderSpace
;
1430 if (hwnd
== NULL
&& fClientBars
[x
].clientBar
!= NULL
)
1432 IUnknown_GetWindow(fClientBars
[x
].clientBar
, &hwnd
);
1433 fClientBars
[x
].hwnd
= hwnd
;
1437 RECT toolbarRect
= clientRect
;
1438 if (borderSpace
.top
!= 0)
1440 toolbarRect
.bottom
= toolbarRect
.top
+ borderSpace
.top
;
1442 else if (borderSpace
.bottom
!= 0)
1444 toolbarRect
.top
= toolbarRect
.bottom
- borderSpace
.bottom
;
1446 else if (borderSpace
.left
!= 0)
1448 toolbarRect
.right
= toolbarRect
.left
+ borderSpace
.left
;
1450 else if (borderSpace
.right
!= 0)
1452 toolbarRect
.left
= toolbarRect
.right
- borderSpace
.right
;
1455 ::SetWindowPos(hwnd
, NULL
,
1458 toolbarRect
.right
- toolbarRect
.left
,
1459 toolbarRect
.bottom
- toolbarRect
.top
,
1460 SWP_NOOWNERZORDER
| SWP_NOZORDER
);
1462 if (borderSpace
.top
!= 0)
1464 clientRect
.top
= toolbarRect
.bottom
;
1466 else if (borderSpace
.bottom
!= 0)
1468 clientRect
.bottom
= toolbarRect
.top
;
1470 else if (borderSpace
.left
!= 0)
1472 clientRect
.left
= toolbarRect
.right
;
1474 else if (borderSpace
.right
!= 0)
1476 clientRect
.right
= toolbarRect
.left
;
1480 ::SetWindowPos(fCurrentShellViewWindow
, NULL
, clientRect
.left
, clientRect
.top
,
1481 clientRect
.right
- clientRect
.left
,
1482 clientRect
.bottom
- clientRect
.top
, SWP_NOOWNERZORDER
| SWP_NOZORDER
);
1485 HRESULT
CShellBrowser::FireEvent(DISPID dispIdMember
, int argCount
, VARIANT
*arguments
)
1488 CComDynamicUnkArray
&vec
= IConnectionPointImpl
<CShellBrowser
, &DIID_DWebBrowserEvents2
>::m_vec
;
1489 CComDynamicUnkArray
&vec2
= IConnectionPointImpl
<CShellBrowser
, &DIID_DWebBrowserEvents
>::m_vec
;
1492 params
.rgvarg
= arguments
;
1493 params
.rgdispidNamedArgs
= NULL
;
1494 params
.cArgs
= argCount
;
1495 params
.cNamedArgs
= 0;
1496 IUnknown
** pp
= vec
.begin();
1497 while (pp
< vec
.end())
1501 CComPtr
<IDispatch
> theDispatch
;
1503 hResult
= (*pp
)->QueryInterface(IID_PPV_ARG(IDispatch
, &theDispatch
));
1504 hResult
= theDispatch
->Invoke(dispIdMember
, GUID_NULL
, 0, DISPATCH_METHOD
, ¶ms
, NULL
, NULL
, NULL
);
1509 while (pp
< vec2
.end())
1513 CComPtr
<IDispatch
> theDispatch
;
1515 hResult
= (*pp
)->QueryInterface(IID_PPV_ARG(IDispatch
, &theDispatch
));
1516 hResult
= theDispatch
->Invoke(dispIdMember
, GUID_NULL
, 0, DISPATCH_METHOD
, ¶ms
, NULL
, NULL
, NULL
);
1523 HRESULT
CShellBrowser::FireNavigateComplete(const wchar_t *newDirectory
)
1525 // these two variants intentionally to do use CComVariant because it would double free/release
1526 // or does not need to dispose at all
1529 CComBSTR
tempString(newDirectory
);
1531 V_VT(&varArgs
) = VT_BSTR
;
1532 V_BSTR(&varArgs
) = tempString
.m_str
;
1534 V_VT(&varArg
[0]) = VT_VARIANT
| VT_BYREF
;
1535 V_VARIANTREF(&varArg
[0]) = &varArgs
;
1536 V_VT(&varArg
[1]) = VT_DISPATCH
;
1537 V_DISPATCH(&varArg
[1]) = (IDispatch
*)this;
1539 return FireEvent(DISPID_NAVIGATECOMPLETE2
, 2, varArg
);
1542 HRESULT
CShellBrowser::FireCommandStateChange(bool newState
, int commandID
)
1546 V_VT(&varArg
[0]) = VT_BOOL
;
1547 V_BOOL(&varArg
[0]) = newState
? VARIANT_TRUE
: VARIANT_FALSE
;
1548 V_VT(&varArg
[1]) = VT_I4
;
1549 V_I4(&varArg
[1]) = commandID
;
1551 return FireEvent(DISPID_COMMANDSTATECHANGE
, 2, varArg
);
1554 HRESULT
CShellBrowser::FireCommandStateChangeAll()
1556 return FireCommandStateChange(false, -1);
1559 HRESULT
CShellBrowser::UpdateForwardBackState()
1561 CComPtr
<ITravelLog
> travelLog
;
1562 CComPtr
<ITravelEntry
> unusedEntry
;
1568 canGoForward
= false;
1569 hResult
= GetTravelLog(&travelLog
);
1570 if (FAILED_UNEXPECTEDLY(hResult
))
1572 hResult
= travelLog
->GetTravelEntry(static_cast<IDropTarget
*>(this), TLOG_BACK
, &unusedEntry
);
1573 if (SUCCEEDED(hResult
))
1576 unusedEntry
.Release();
1578 hResult
= travelLog
->GetTravelEntry(static_cast<IDropTarget
*>(this), TLOG_FORE
, &unusedEntry
);
1579 if (SUCCEEDED(hResult
))
1581 canGoForward
= true;
1582 unusedEntry
.Release();
1584 hResult
= FireCommandStateChange(canGoBack
, 2);
1585 hResult
= FireCommandStateChange(canGoForward
, 1);
1589 HRESULT
CShellBrowser::UpdateUpState()
1595 if (_ILIsDesktop(fCurrentDirectoryPIDL
))
1597 hResult
= FireCommandStateChange(canGoUp
, 3);
1601 void CShellBrowser::UpdateGotoMenu(HMENU theMenu
)
1603 CComPtr
<ITravelLog
> travelLog
;
1604 CComPtr
<ITravelEntry
> unusedEntry
;
1606 MENUITEMINFO menuItemInfo
;
1609 DeleteMenuItems(theMenu
, IDM_GOTO_TRAVEL_FIRST
, IDM_GOTO_TRAVEL_LAST
);
1611 position
= GetMenuItemCount(theMenu
);
1612 hResult
= GetTravelLog(&travelLog
);
1613 if (FAILED_UNEXPECTEDLY(hResult
))
1616 hResult
= travelLog
->GetTravelEntry(static_cast<IDropTarget
*>(this),
1620 if (SUCCEEDED(hResult
))
1622 SHEnableMenuItem(theMenu
, IDM_GOTO_BACK
, TRUE
);
1623 unusedEntry
.Release();
1626 SHEnableMenuItem(theMenu
, IDM_GOTO_BACK
, FALSE
);
1628 hResult
= travelLog
->GetTravelEntry(static_cast<IDropTarget
*>(this),
1632 if (SUCCEEDED(hResult
))
1634 SHEnableMenuItem(theMenu
, IDM_GOTO_FORWARD
, TRUE
);
1635 unusedEntry
.Release();
1638 SHEnableMenuItem(theMenu
, IDM_GOTO_FORWARD
, FALSE
);
1640 SHEnableMenuItem(theMenu
,
1641 IDM_GOTO_UPONELEVEL
,
1642 !_ILIsDesktop(fCurrentDirectoryPIDL
));
1644 hResult
= travelLog
->InsertMenuEntries(static_cast<IDropTarget
*>(this), theMenu
, position
,
1645 IDM_GOTO_TRAVEL_FIRSTTARGET
, IDM_GOTO_TRAVEL_LASTTARGET
, TLMENUF_BACKANDFORTH
| TLMENUF_CHECKCURRENT
);
1646 if (SUCCEEDED(hResult
))
1648 menuItemInfo
.cbSize
= sizeof(menuItemInfo
);
1649 menuItemInfo
.fMask
= MIIM_TYPE
| MIIM_ID
;
1650 menuItemInfo
.fType
= MF_SEPARATOR
;
1651 menuItemInfo
.wID
= IDM_GOTO_TRAVEL_SEP
;
1652 InsertMenuItem(theMenu
, position
, TRUE
, &menuItemInfo
);
1656 void CShellBrowser::UpdateViewMenu(HMENU theMenu
)
1658 CComPtr
<ITravelLog
> travelLog
;
1660 OLECMD commandList
[5];
1661 HMENU toolbarMenuBar
;
1663 MENUITEMINFO menuItemInfo
;
1666 gotoMenu
= SHGetMenuFromID(theMenu
, FCIDM_MENU_EXPLORE
);
1667 if (gotoMenu
!= NULL
)
1668 UpdateGotoMenu(gotoMenu
);
1670 commandList
[0].cmdID
= ITID_TOOLBARBANDSHOWN
;
1671 commandList
[1].cmdID
= ITID_ADDRESSBANDSHOWN
;
1672 commandList
[2].cmdID
= ITID_LINKSBANDSHOWN
;
1673 commandList
[3].cmdID
= ITID_TOOLBARLOCKED
;
1674 commandList
[4].cmdID
= ITID_CUSTOMIZEENABLED
;
1676 hResult
= IUnknown_QueryStatus(fClientBars
[BIInternetToolbar
].clientBar
,
1677 CGID_PrivCITCommands
, 5, commandList
, NULL
);
1678 if (FAILED_UNEXPECTEDLY(hResult
))
1679 DeleteMenu(theMenu
, IDM_VIEW_TOOLBARS
, MF_BYCOMMAND
);
1682 menuItemInfo
.cbSize
= sizeof(menuItemInfo
);
1683 menuItemInfo
.fMask
= MIIM_SUBMENU
;
1684 GetMenuItemInfo(theMenu
, IDM_VIEW_TOOLBARS
, FALSE
, &menuItemInfo
);
1685 DestroyMenu(menuItemInfo
.hSubMenu
);
1687 toolbarMenuBar
= LoadMenu(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU
));
1688 toolbarMenu
= GetSubMenu(toolbarMenuBar
, 0);
1689 RemoveMenu(toolbarMenuBar
, 0, MF_BYPOSITION
);
1690 DestroyMenu(toolbarMenuBar
);
1693 SHEnableMenuItem(toolbarMenu
, IDM_TOOLBARS_STANDARDBUTTONS
, commandList
[0].cmdf
& OLECMDF_ENABLED
);
1694 SHEnableMenuItem(toolbarMenu
, IDM_TOOLBARS_ADDRESSBAR
, commandList
[1].cmdf
& OLECMDF_ENABLED
);
1695 SHEnableMenuItem(toolbarMenu
, IDM_TOOLBARS_LINKSBAR
, commandList
[2].cmdf
& OLECMDF_ENABLED
);
1696 SHEnableMenuItem(toolbarMenu
, IDM_TOOLBARS_CUSTOMIZE
, commandList
[4].cmdf
& OLECMDF_ENABLED
);
1698 SHCheckMenuItem(toolbarMenu
, IDM_TOOLBARS_STANDARDBUTTONS
, commandList
[0].cmdf
& OLECMDF_LATCHED
);
1699 SHCheckMenuItem(toolbarMenu
, IDM_TOOLBARS_ADDRESSBAR
, commandList
[1].cmdf
& OLECMDF_LATCHED
);
1700 SHCheckMenuItem(toolbarMenu
, IDM_TOOLBARS_LINKSBAR
, commandList
[2].cmdf
& OLECMDF_LATCHED
);
1701 SHCheckMenuItem(toolbarMenu
, IDM_TOOLBARS_LOCKTOOLBARS
, commandList
[3].cmdf
& OLECMDF_LATCHED
);
1702 if ((commandList
[4].cmdf
& OLECMDF_ENABLED
) == 0)
1703 DeleteMenu(toolbarMenu
, IDM_TOOLBARS_CUSTOMIZE
, MF_BYCOMMAND
);
1704 DeleteMenu(toolbarMenu
, IDM_TOOLBARS_TEXTLABELS
, MF_BYCOMMAND
);
1705 DeleteMenu(toolbarMenu
, IDM_TOOLBARS_GOBUTTON
, MF_BYCOMMAND
);
1707 menuItemInfo
.cbSize
= sizeof(menuItemInfo
);
1708 menuItemInfo
.fMask
= MIIM_SUBMENU
;
1709 menuItemInfo
.hSubMenu
= toolbarMenu
;
1710 SetMenuItemInfo(theMenu
, IDM_VIEW_TOOLBARS
, FALSE
, &menuItemInfo
);
1712 SHCheckMenuItem(theMenu
, IDM_VIEW_STATUSBAR
, fStatusBarVisible
? TRUE
: FALSE
);
1715 HRESULT
CShellBrowser::BuildExplorerBandMenu()
1720 hBandsMenu
= SHGetMenuFromID(fCurrentMenuBar
, IDM_VIEW_EXPLORERBAR
);
1723 OutputDebugString(L
"No menu !\n");
1726 DSA_DeleteAllItems(menuDsa
);
1727 BuildExplorerBandCategory(hBandsMenu
, CATID_InfoBand
, 4, NULL
);
1728 BuildExplorerBandCategory(hBandsMenu
, CATID_CommBand
, 20, &nbFound
);
1732 DeleteMenu(hBandsMenu
, IDM_EXPLORERBAR_SEPARATOR
, MF_BYCOMMAND
);
1734 // Remove media menu since XP does it (according to API Monitor)
1735 DeleteMenu(hBandsMenu
, IDM_EXPLORERBAR_MEDIA
, MF_BYCOMMAND
);
1739 HRESULT
CShellBrowser::BuildExplorerBandCategory(HMENU hBandsMenu
, CATID category
, DWORD dwPos
, UINT
*nbFound
)
1742 CComPtr
<IEnumGUID
> pEnumGUID
;
1743 WCHAR wszBandName
[MAX_PATH
];
1744 WCHAR wszBandGUID
[MAX_PATH
];
1745 WCHAR wRegKey
[MAX_PATH
];
1752 mbi
.fVertical
= IsEqualGUID(category
, CATID_InfoBand
);
1754 hr
= SHEnumClassesOfCategories(1, &category
, 0, NULL
, &pEnumGUID
);
1755 if (FAILED_UNEXPECTEDLY(hr
))
1761 pEnumGUID
->Next(1, &iter
, &dwRead
);
1764 // Get the band name
1765 if (IsBuiltinBand(iter
))
1767 if (!StringFromGUID2(iter
, wszBandGUID
, MAX_PATH
))
1769 StringCchPrintfW(wRegKey
, MAX_PATH
, L
"CLSID\\%s", wszBandGUID
);
1770 dwDataSize
= MAX_PATH
;
1771 SHGetValue(HKEY_CLASSES_ROOT
, wRegKey
, NULL
, NULL
, wszBandName
, &dwDataSize
);
1774 InsertMenu(hBandsMenu
, dwPos
+ cBands
, MF_BYPOSITION
, IDM_EXPLORERBAND_BEGINCUSTOM
+ DSA_GetItemCount(menuDsa
), wszBandName
);
1775 DSA_AppendItem(menuDsa
, &mbi
);
1785 BOOL
CShellBrowser::IsBuiltinBand(CLSID
&bandID
)
1787 if (IsEqualCLSID(bandID
, CLSID_ExplorerBand
))
1789 if (IsEqualCLSID(bandID
, CLSID_SH_SearchBand
) || IsEqualCLSID(bandID
, CLSID_SearchBand
))
1791 if (IsEqualCLSID(bandID
, CLSID_IE_SearchBand
) || IsEqualCLSID(bandID
, CLSID_FileSearchBand
))
1793 if (IsEqualCLSID(bandID
, CLSID_SH_HistBand
))
1795 if (IsEqualCLSID(bandID
, CLSID_SH_FavBand
))
1797 if (IsEqualCLSID(bandID
, CLSID_ChannelsBand
))
1802 HRESULT
CShellBrowser::OnSearch()
1804 CComPtr
<IObjectWithSite
> objectWithSite
;
1805 CComPtr
<IContextMenu
> contextMenu
;
1806 CMINVOKECOMMANDINFO commandInfo
;
1807 const char *searchGUID
= "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}";
1810 // TODO: Query shell if this command is enabled first
1812 memset(&commandInfo
, 0, sizeof(commandInfo
));
1813 commandInfo
.cbSize
= sizeof(commandInfo
);
1814 commandInfo
.hwnd
= m_hWnd
;
1815 commandInfo
.lpParameters
= searchGUID
;
1816 commandInfo
.nShow
= SW_SHOWNORMAL
;
1818 hResult
= CoCreateInstance(CLSID_ShellSearchExt
, NULL
, CLSCTX_INPROC_SERVER
,
1819 IID_PPV_ARG(IContextMenu
, &contextMenu
));
1820 if (FAILED_UNEXPECTEDLY(hResult
))
1822 hResult
= contextMenu
->QueryInterface(IID_PPV_ARG(IObjectWithSite
, &objectWithSite
));
1823 if (FAILED_UNEXPECTEDLY(hResult
))
1825 hResult
= objectWithSite
->SetSite(dynamic_cast<IShellBrowser
*>(this));
1826 if (FAILED_UNEXPECTEDLY(hResult
))
1828 hResult
= contextMenu
->InvokeCommand(&commandInfo
);
1829 hResult
= objectWithSite
->SetSite(NULL
);
1833 bool IUnknownIsEqual(IUnknown
*int1
, IUnknown
*int2
)
1835 CComPtr
<IUnknown
> int1Retry
;
1836 CComPtr
<IUnknown
> int2Retry
;
1841 if (int1
== NULL
|| int2
== NULL
)
1843 hResult
= int1
->QueryInterface(IID_PPV_ARG(IUnknown
, &int1Retry
));
1844 if (FAILED_UNEXPECTEDLY(hResult
))
1846 hResult
= int2
->QueryInterface(IID_PPV_ARG(IUnknown
, &int2Retry
));
1847 if (FAILED_UNEXPECTEDLY(hResult
))
1849 if (int1Retry
== int2Retry
)
1854 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetBorderDW(IUnknown
*punkObj
, LPRECT prcBorder
)
1856 static const INT excludeItems
[] = { 1, 1, 1, 0xa001, 0, 0 };
1858 RECT availableBounds
;
1860 GetEffectiveClientRect(m_hWnd
, &availableBounds
, excludeItems
);
1861 for (INT x
= 0; x
< 3; x
++)
1863 if (fClientBars
[x
].clientBar
.p
!= NULL
&& !IUnknownIsEqual(fClientBars
[x
].clientBar
, punkObj
))
1865 availableBounds
.top
+= fClientBars
[x
].borderSpace
.top
;
1866 availableBounds
.left
+= fClientBars
[x
].borderSpace
.left
;
1867 availableBounds
.bottom
-= fClientBars
[x
].borderSpace
.bottom
;
1868 availableBounds
.right
-= fClientBars
[x
].borderSpace
.right
;
1871 *prcBorder
= availableBounds
;
1875 HRESULT STDMETHODCALLTYPE
CShellBrowser::RequestBorderSpaceDW(IUnknown
* punkObj
, LPCBORDERWIDTHS pbw
)
1880 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetBorderSpaceDW(IUnknown
* punkObj
, LPCBORDERWIDTHS pbw
)
1882 for (INT x
= 0; x
< 3; x
++)
1884 if (IUnknownIsEqual(fClientBars
[x
].clientBar
, punkObj
))
1886 fClientBars
[x
].borderSpace
= *pbw
;
1887 // if this bar changed size, it cascades and forces all subsequent bars to resize
1892 return E_INVALIDARG
;
1895 HRESULT STDMETHODCALLTYPE
CShellBrowser::QueryStatus(const GUID
*pguidCmdGroup
,
1896 ULONG cCmds
, OLECMD prgCmds
[ ], OLECMDTEXT
*pCmdText
)
1898 CComPtr
<IOleCommandTarget
> commandTarget
;
1901 if (prgCmds
== NULL
)
1902 return E_INVALIDARG
;
1903 if (pguidCmdGroup
== NULL
)
1905 if (fCurrentShellView
.p
!= NULL
)
1907 hResult
= fCurrentShellView
->QueryInterface(IID_PPV_ARG(IOleCommandTarget
, &commandTarget
));
1908 if (SUCCEEDED(hResult
) && commandTarget
.p
!= NULL
)
1909 return commandTarget
->QueryStatus(NULL
, 1, prgCmds
, pCmdText
);
1918 else if (IsEqualIID(*pguidCmdGroup
, CGID_Explorer
))
1922 switch (prgCmds
->cmdID
)
1924 case 0x1c: // search
1925 prgCmds
->cmdf
= OLECMDF_SUPPORTED
| OLECMDF_ENABLED
;
1927 case 0x1d: // history
1928 prgCmds
->cmdf
= OLECMDF_SUPPORTED
| OLECMDF_ENABLED
;
1930 case 0x1e: // favorites
1931 prgCmds
->cmdf
= OLECMDF_SUPPORTED
| OLECMDF_ENABLED
;
1933 case 0x23: // folders
1934 prgCmds
->cmdf
= OLECMDF_SUPPORTED
| OLECMDF_ENABLED
| OLECMDF_LATCHED
;
1944 else if (IsEqualIID(*pguidCmdGroup
, CGID_ShellBrowser
))
1948 switch (prgCmds
->cmdID
)
1950 case 0xa022: // up level
1951 prgCmds
->cmdf
= OLECMDF_SUPPORTED
;
1952 if (fCurrentDirectoryPIDL
->mkid
.cb
!= 0)
1953 prgCmds
->cmdf
|= OLECMDF_ENABLED
;
1963 HRESULT STDMETHODCALLTYPE
CShellBrowser::Exec(const GUID
*pguidCmdGroup
, DWORD nCmdID
,
1964 DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
1970 TRACE("Unhandled null CGID %d %d %p %p\n", nCmdID
, nCmdexecopt
, pvaIn
, pvaOut
);
1973 if (IsEqualIID(*pguidCmdGroup
, CGID_Explorer
))
1978 hResult
= ShowBand(CLSID_ExplorerBand
, true);
1981 if (nCmdexecopt
== 1)
1983 // pvaIn is a VT_UNKNOWN with a band that is being hidden
1987 // update zones part of the status bar
1990 case 0x35: // don't do this, and the internet toolbar doesn't create a menu band
1991 V_VT(pvaOut
) = VT_INT_PTR
;
1992 V_INTREF(pvaOut
) = reinterpret_cast<INT
*>(
1993 LoadMenu(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU
)));
1996 // indicate if this cabinet was opened as a browser
2002 else if (IsEqualIID(*pguidCmdGroup
, CGID_InternetButtons
))
2011 else if (IsEqualIID(*pguidCmdGroup
, CGID_Theater
))
2016 // what is theater mode and why do we receive this?
2020 else if (IsEqualIID(*pguidCmdGroup
, CGID_MenuBand
))
2025 // initialize favorites menu
2029 else if (IsEqualIID(*pguidCmdGroup
, CGID_ShellDocView
))
2034 // refresh on toolbar clicked
2037 // called for unknown bands ?
2040 // tell the view if it should hide the task pane or not
2041 return (fClientBars
[BIVerticalBaseBar
].clientBar
.p
== NULL
) ? S_FALSE
: S_OK
;
2044 else if (IsEqualIID(*pguidCmdGroup
, CGID_ShellBrowser
))
2049 return NavigateToParent();
2052 else if (IsEqualIID(*pguidCmdGroup
, CGID_IExplorerToolbar
))
2057 return DoFolderOptions();
2060 else if (IsEqualIID(*pguidCmdGroup
, CGID_DefView
))
2065 // Reset All Folders option in Folder Options
2069 else if (IsEqualIID(*pguidCmdGroup
, CLSID_CommonButtons
))
2071 // Windows seems to use this as proxy for toolbar buttons.
2072 // We use it for search band for now to remove code duplication,
2073 // let's see if it could be useful in the future.
2077 // Show search band from toolbar
2090 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetWindow(HWND
*lphwnd
)
2098 HRESULT STDMETHODCALLTYPE
CShellBrowser::ContextSensitiveHelp(BOOL fEnterMode
)
2103 HRESULT STDMETHODCALLTYPE
CShellBrowser::InsertMenusSB(HMENU hmenuShared
, LPOLEMENUGROUPWIDTHS lpMenuWidths
)
2105 HMENU mainMenu
= LoadMenu(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU
));
2107 Shell_MergeMenus(hmenuShared
, mainMenu
, 0, 0, FCIDM_BROWSERLAST
, MM_SUBMENUSHAVEIDS
);
2109 int GCCU(itemCount3
) = GetMenuItemCount(hmenuShared
);
2112 DestroyMenu(mainMenu
);
2114 lpMenuWidths
->width
[0] = 2;
2115 lpMenuWidths
->width
[2] = 3;
2116 lpMenuWidths
->width
[4] = 1;
2120 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetMenuSB(HMENU hmenuShared
, HOLEMENU holemenuRes
, HWND hwndActiveObject
)
2122 CComPtr
<IShellMenu
> shellMenu
;
2125 if (hmenuShared
&& IsMenu(hmenuShared
) == FALSE
)
2127 hResult
= GetMenuBand(IID_PPV_ARG(IShellMenu
, &shellMenu
));
2128 if (FAILED_UNEXPECTEDLY(hResult
))
2133 hmenuShared
= LoadMenu(_AtlBaseModule
.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU
));
2135 // FIXME: Figure out the proper way to do this.
2136 HMENU hMenuFavs
= GetSubMenu(hmenuShared
, 3);
2139 DeleteMenu(hMenuFavs
, IDM_FAVORITES_EMPTY
, MF_BYCOMMAND
);
2142 hResult
= shellMenu
->SetMenu(hmenuShared
, m_hWnd
, SMSET_DONTOWN
);
2143 if (FAILED_UNEXPECTEDLY(hResult
))
2145 fCurrentMenuBar
= hmenuShared
;
2146 BuildExplorerBandMenu();
2150 HRESULT STDMETHODCALLTYPE
CShellBrowser::RemoveMenusSB(HMENU hmenuShared
)
2152 if (hmenuShared
== fCurrentMenuBar
)
2154 //DestroyMenu(fCurrentMenuBar);
2155 SetMenuSB(NULL
, NULL
, NULL
);
2160 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetStatusTextSB(LPCOLESTR pszStatusText
)
2165 ::SetWindowText(fStatusBar
, pszStatusText
);
2174 HRESULT STDMETHODCALLTYPE
CShellBrowser::EnableModelessSB(BOOL fEnable
)
2179 HRESULT STDMETHODCALLTYPE
CShellBrowser::TranslateAcceleratorSB(MSG
*pmsg
, WORD wID
)
2181 if (!::TranslateAcceleratorW(m_hWnd
, m_hAccel
, pmsg
))
2186 HRESULT STDMETHODCALLTYPE
CShellBrowser::BrowseObject(LPCITEMIDLIST pidl
, UINT wFlags
)
2188 if ((wFlags
& SBSP_EXPLOREMODE
) != NULL
)
2189 ShowBand(CLSID_ExplorerBand
, true);
2191 return BrowseToPIDL(pidl
, BTP_UPDATE_CUR_HISTORY
| BTP_UPDATE_NEXT_HISTORY
);
2194 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetViewStateStream(DWORD grfMode
, IStream
**ppStrm
)
2199 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetControlWindow(UINT id
, HWND
*lphwnd
)
2207 *lphwnd
= fToolbarProxy
.m_hWnd
;
2210 *lphwnd
= fStatusBar
;
2213 // find the directory browser and return it
2214 // this should be used only to determine if a tree is present
2217 // is this a progress dialog?
2223 HRESULT STDMETHODCALLTYPE
CShellBrowser::SendControlMsg(
2224 UINT id
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*pret
)
2233 result
= fToolbarProxy
.SendMessage(uMsg
, wParam
, lParam
);
2238 result
= SendMessage(fStatusBar
, uMsg
, wParam
, lParam
);
2246 HRESULT STDMETHODCALLTYPE
CShellBrowser::QueryActiveShellView(IShellView
**ppshv
)
2250 *ppshv
= fCurrentShellView
;
2251 if (fCurrentShellView
.p
!= NULL
)
2252 fCurrentShellView
.p
->AddRef();
2256 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnViewWindowActive(IShellView
*ppshv
)
2261 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetToolbarItems(LPTBBUTTON lpButtons
, UINT nButtons
, UINT uFlags
)
2266 HRESULT STDMETHODCALLTYPE
CShellBrowser::DragEnter(
2267 IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
)
2272 HRESULT STDMETHODCALLTYPE
CShellBrowser::DragOver(DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
)
2277 HRESULT STDMETHODCALLTYPE
CShellBrowser::DragLeave()
2282 HRESULT STDMETHODCALLTYPE
CShellBrowser::Drop(
2283 IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
)
2288 HRESULT STDMETHODCALLTYPE
CShellBrowser::QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
)
2290 // view does a query for SID_STopLevelBrowser, IID_IShellBrowserService
2291 // the returned interface has a method GetPropertyBag on it
2292 if (IsEqualIID(guidService
, SID_STopLevelBrowser
))
2293 return this->QueryInterface(riid
, ppvObject
);
2294 if (IsEqualIID(guidService
, SID_SShellBrowser
))
2295 return this->QueryInterface(riid
, ppvObject
);
2296 if (IsEqualIID(guidService
, SID_ITargetFrame2
))
2297 return this->QueryInterface(riid
, ppvObject
);
2298 if (IsEqualIID(guidService
, SID_IWebBrowserApp
)) // without this, the internet toolbar won't reflect notifications
2299 return this->QueryInterface(riid
, ppvObject
);
2300 if (IsEqualIID(guidService
, SID_SProxyBrowser
))
2301 return this->QueryInterface(riid
, ppvObject
);
2302 if (IsEqualIID(guidService
, SID_IExplorerToolbar
))
2303 return fClientBars
[BIInternetToolbar
].clientBar
->QueryInterface(riid
, ppvObject
);
2304 if (IsEqualIID(riid
, IID_IShellBrowser
))
2305 return this->QueryInterface(riid
, ppvObject
);
2306 return E_NOINTERFACE
;
2309 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetPropertyBag(long flags
, REFIID riid
, void **ppvObject
)
2311 if (ppvObject
== NULL
)
2317 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetTypeInfoCount(UINT
*pctinfo
)
2322 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetTypeInfo(UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
)
2327 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetIDsOfNames(REFIID riid
, LPOLESTR
*rgszNames
,
2328 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
2333 HRESULT STDMETHODCALLTYPE
CShellBrowser::Invoke(DISPID dispIdMember
, REFIID riid
, LCID lcid
,
2334 WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2339 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetParentSite(IOleInPlaceSite
**ppipsite
)
2344 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetTitle(IShellView
*psv
, LPCWSTR pszName
)
2349 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetTitle(IShellView
*psv
, LPWSTR pszName
, DWORD cchName
)
2354 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetOleObject(IOleObject
**ppobjv
)
2359 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetTravelLog(ITravelLog
**pptl
)
2363 // called by toolbar when displaying tooltips
2368 if (fTravelLog
.p
== NULL
)
2370 hResult
= CTravelLog_CreateInstance(IID_PPV_ARG(ITravelLog
, &fTravelLog
));
2371 if (FAILED_UNEXPECTEDLY(hResult
))
2374 *pptl
= fTravelLog
.p
;
2375 fTravelLog
.p
->AddRef();
2379 HRESULT STDMETHODCALLTYPE
CShellBrowser::ShowControlWindow(UINT id
, BOOL fShow
)
2384 HRESULT STDMETHODCALLTYPE
CShellBrowser::IsControlWindowShown(UINT id
, BOOL
*pfShown
)
2389 HRESULT STDMETHODCALLTYPE
CShellBrowser::IEGetDisplayName(LPCITEMIDLIST pidl
, LPWSTR pwszName
, UINT uFlags
)
2394 HRESULT STDMETHODCALLTYPE
CShellBrowser::IEParseDisplayName(UINT uiCP
, LPCWSTR pwszPath
, LPITEMIDLIST
*ppidlOut
)
2399 HRESULT STDMETHODCALLTYPE
CShellBrowser::DisplayParseError(HRESULT hres
, LPCWSTR pwszPath
)
2404 HRESULT STDMETHODCALLTYPE
CShellBrowser::NavigateToPidl(LPCITEMIDLIST pidl
, DWORD grfHLNF
)
2409 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetNavigateState(BNSTATE bnstate
)
2414 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetNavigateState(BNSTATE
*pbnstate
)
2419 HRESULT STDMETHODCALLTYPE
CShellBrowser::NotifyRedirect(IShellView
*psv
, LPCITEMIDLIST pidl
, BOOL
*pfDidBrowse
)
2424 HRESULT STDMETHODCALLTYPE
CShellBrowser::UpdateWindowList()
2429 HRESULT STDMETHODCALLTYPE
CShellBrowser::UpdateBackForwardState()
2434 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetFlags(DWORD dwFlags
, DWORD dwFlagMask
)
2439 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetFlags(DWORD
*pdwFlags
)
2444 HRESULT STDMETHODCALLTYPE
CShellBrowser::CanNavigateNow()
2449 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetPidl(LPITEMIDLIST
*ppidl
)
2451 // called by explorer bar to get current pidl
2454 *ppidl
= ILClone(fCurrentDirectoryPIDL
);
2458 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetReferrer(LPCITEMIDLIST pidl
)
2463 DWORD STDMETHODCALLTYPE
CShellBrowser::GetBrowserIndex()
2468 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetBrowserByIndex(DWORD dwID
, IUnknown
**ppunk
)
2473 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetHistoryObject(IOleObject
**ppole
, IStream
**pstm
, IBindCtx
**ppbc
)
2475 if (ppole
== NULL
|| pstm
== NULL
|| ppbc
== NULL
)
2476 return E_INVALIDARG
;
2477 *ppole
= fHistoryObject
;
2478 if (fHistoryObject
!= NULL
)
2479 fHistoryObject
->AddRef();
2480 *pstm
= fHistoryStream
;
2481 if (fHistoryStream
!= NULL
)
2482 fHistoryStream
->AddRef();
2483 *ppbc
= fHistoryBindContext
;
2484 if (fHistoryBindContext
!= NULL
)
2485 fHistoryBindContext
->AddRef();
2486 fHistoryObject
= NULL
;
2487 fHistoryStream
= NULL
;
2488 fHistoryBindContext
= NULL
;
2494 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetHistoryObject(IOleObject
*pole
, BOOL fIsLocalAnchor
)
2499 HRESULT STDMETHODCALLTYPE
CShellBrowser::CacheOLEServer(IOleObject
*pole
)
2504 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetSetCodePage(VARIANT
*pvarIn
, VARIANT
*pvarOut
)
2509 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnHttpEquiv(
2510 IShellView
*psv
, BOOL fDone
, VARIANT
*pvarargIn
, VARIANT
*pvarargOut
)
2515 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetPalette(HPALETTE
*hpal
)
2520 HRESULT STDMETHODCALLTYPE
CShellBrowser::RegisterWindow(BOOL fForceRegister
, int swc
)
2525 LRESULT STDMETHODCALLTYPE
CShellBrowser::WndProcBS(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
2530 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetAsDefFolderSettings()
2535 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetViewRect(RECT
*prc
)
2540 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnSize(WPARAM wParam
)
2545 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnCreate(struct tagCREATESTRUCTW
*pcs
)
2547 m_hAccel
= LoadAcceleratorsW(GetModuleHandle(L
"browseui.dll"), MAKEINTRESOURCEW(256));
2551 LRESULT STDMETHODCALLTYPE
CShellBrowser::OnCommand(WPARAM wParam
, LPARAM lParam
)
2556 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnDestroy()
2561 LRESULT STDMETHODCALLTYPE
CShellBrowser::OnNotify(struct tagNMHDR
*pnm
)
2566 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnSetFocus()
2571 HRESULT STDMETHODCALLTYPE
CShellBrowser::OnFrameWindowActivateBS(BOOL fActive
)
2576 HRESULT STDMETHODCALLTYPE
CShellBrowser::ReleaseShellView()
2581 HRESULT STDMETHODCALLTYPE
CShellBrowser::ActivatePendingView()
2586 HRESULT STDMETHODCALLTYPE
CShellBrowser::CreateViewWindow(
2587 IShellView
*psvNew
, IShellView
*psvOld
, LPRECT prcView
, HWND
*phwnd
)
2592 HRESULT STDMETHODCALLTYPE
CShellBrowser::CreateBrowserPropSheetExt(REFIID riid
, void **ppv
)
2597 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetViewWindow(HWND
*phwndView
)
2602 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetBaseBrowserData(LPCBASEBROWSERDATA
*pbbd
)
2607 LPBASEBROWSERDATA STDMETHODCALLTYPE
CShellBrowser::PutBaseBrowserData()
2612 HRESULT STDMETHODCALLTYPE
CShellBrowser::InitializeTravelLog(ITravelLog
*ptl
, DWORD dw
)
2617 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetTopBrowser()
2622 HRESULT STDMETHODCALLTYPE
CShellBrowser::Offline(int iCmd
)
2627 HRESULT STDMETHODCALLTYPE
CShellBrowser::AllowViewResize(BOOL f
)
2632 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetActivateState(UINT u
)
2637 HRESULT STDMETHODCALLTYPE
CShellBrowser::UpdateSecureLockIcon(int eSecureLock
)
2642 HRESULT STDMETHODCALLTYPE
CShellBrowser::InitializeDownloadManager()
2647 HRESULT STDMETHODCALLTYPE
CShellBrowser::InitializeTransitionSite()
2652 HRESULT STDMETHODCALLTYPE
CShellBrowser::_Initialize(HWND hwnd
, IUnknown
*pauto
)
2657 HRESULT STDMETHODCALLTYPE
CShellBrowser::_CancelPendingNavigationAsync()
2662 HRESULT STDMETHODCALLTYPE
CShellBrowser::_CancelPendingView()
2667 HRESULT STDMETHODCALLTYPE
CShellBrowser::_MaySaveChanges()
2672 HRESULT STDMETHODCALLTYPE
CShellBrowser::_PauseOrResumeView(BOOL fPaused
)
2677 HRESULT STDMETHODCALLTYPE
CShellBrowser::_DisableModeless()
2682 HRESULT STDMETHODCALLTYPE
CShellBrowser::_NavigateToPidl(LPCITEMIDLIST pidl
, DWORD grfHLNF
, DWORD dwFlags
)
2687 HRESULT STDMETHODCALLTYPE
CShellBrowser::_TryShell2Rename(IShellView
*psv
, LPCITEMIDLIST pidlNew
)
2692 HRESULT STDMETHODCALLTYPE
CShellBrowser::_SwitchActivationNow()
2697 HRESULT STDMETHODCALLTYPE
CShellBrowser::_ExecChildren(IUnknown
*punkBar
, BOOL fBroadcast
,
2698 const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANTARG
*pvarargIn
, VARIANTARG
*pvarargOut
)
2703 HRESULT STDMETHODCALLTYPE
CShellBrowser::_SendChildren(
2704 HWND hwndBar
, BOOL fBroadcast
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
2709 HRESULT STDMETHODCALLTYPE
CShellBrowser::GetFolderSetData(struct tagFolderSetData
*pfsd
)
2714 HRESULT STDMETHODCALLTYPE
CShellBrowser::_OnFocusChange(UINT itb
)
2719 HRESULT STDMETHODCALLTYPE
CShellBrowser::v_ShowHideChildWindows(BOOL fChildOnly
)
2724 UINT STDMETHODCALLTYPE
CShellBrowser::_get_itbLastFocus()
2729 HRESULT STDMETHODCALLTYPE
CShellBrowser::_put_itbLastFocus(UINT itbLastFocus
)
2734 HRESULT STDMETHODCALLTYPE
CShellBrowser::_UIActivateView(UINT uState
)
2739 HRESULT STDMETHODCALLTYPE
CShellBrowser::_GetViewBorderRect(RECT
*prc
)
2744 HRESULT STDMETHODCALLTYPE
CShellBrowser::_UpdateViewRectSize()
2749 HRESULT STDMETHODCALLTYPE
CShellBrowser::_ResizeNextBorder(UINT itb
)
2754 HRESULT STDMETHODCALLTYPE
CShellBrowser::_ResizeView()
2759 HRESULT STDMETHODCALLTYPE
CShellBrowser::_GetEffectiveClientArea(LPRECT lprectBorder
, HMONITOR hmon
)
2764 IStream
*STDMETHODCALLTYPE
CShellBrowser::v_GetViewStream(LPCITEMIDLIST pidl
, DWORD grfMode
, LPCWSTR pwszName
)
2769 LRESULT STDMETHODCALLTYPE
CShellBrowser::ForwardViewMsg(UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
2774 HRESULT STDMETHODCALLTYPE
CShellBrowser::SetAcceleratorMenu(HACCEL hacc
)
2779 int STDMETHODCALLTYPE
CShellBrowser::_GetToolbarCount()
2784 LPTOOLBARITEM STDMETHODCALLTYPE
CShellBrowser::_GetToolbarItem(int itb
)
2789 HRESULT STDMETHODCALLTYPE
CShellBrowser::_SaveToolbars(IStream
*pstm
)
2794 HRESULT STDMETHODCALLTYPE
CShellBrowser::_LoadToolbars(IStream
*pstm
)
2799 HRESULT STDMETHODCALLTYPE
CShellBrowser::_CloseAndReleaseToolbars(BOOL fClose
)
2804 HRESULT STDMETHODCALLTYPE
CShellBrowser::v_MayGetNextToolbarFocus(
2805 LPMSG lpMsg
, UINT itbNext
, int citb
, LPTOOLBARITEM
*pptbi
, HWND
*phwnd
)
2810 HRESULT STDMETHODCALLTYPE
CShellBrowser::_ResizeNextBorderHelper(UINT itb
, BOOL bUseHmonitor
)
2815 UINT STDMETHODCALLTYPE
CShellBrowser::_FindTBar(IUnknown
*punkSrc
)
2820 HRESULT STDMETHODCALLTYPE
CShellBrowser::_SetFocus(LPTOOLBARITEM ptbi
, HWND hwnd
, LPMSG lpMsg
)
2825 HRESULT STDMETHODCALLTYPE
CShellBrowser::v_MayTranslateAccelerator(MSG
*pmsg
)
2827 for (int i
= 0; i
< 3; i
++)
2829 if (IUnknown_TranslateAcceleratorIO(fClientBars
[i
].clientBar
, pmsg
) == S_OK
)
2833 if (!fCurrentShellView
)
2836 return fCurrentShellView
->TranslateAcceleratorW(pmsg
);
2839 HRESULT STDMETHODCALLTYPE
CShellBrowser::_GetBorderDWHelper(IUnknown
*punkSrc
, LPRECT lprectBorder
, BOOL bUseHmonitor
)
2844 HRESULT STDMETHODCALLTYPE
CShellBrowser::v_CheckZoneCrossing(LPCITEMIDLIST pidl
)
2849 HRESULT STDMETHODCALLTYPE
CShellBrowser::GoBack()
2851 CComPtr
<ITravelLog
> travelLog
;
2852 HRESULT hResult
= GetTravelLog(&travelLog
);
2853 if (FAILED_UNEXPECTEDLY(hResult
))
2855 return travelLog
->Travel(static_cast<IDropTarget
*>(this), TLOG_BACK
);
2858 HRESULT STDMETHODCALLTYPE
CShellBrowser::GoForward()
2860 CComPtr
<ITravelLog
> travelLog
;
2861 HRESULT hResult
= GetTravelLog(&travelLog
);
2862 if (FAILED_UNEXPECTEDLY(hResult
))
2864 return travelLog
->Travel(static_cast<IDropTarget
*>(this), TLOG_FORE
);
2867 HRESULT STDMETHODCALLTYPE
CShellBrowser::GoHome()
2872 HRESULT STDMETHODCALLTYPE
CShellBrowser::GoSearch()
2877 HRESULT STDMETHODCALLTYPE
CShellBrowser::Navigate(BSTR URL
, VARIANT
*Flags
,
2878 VARIANT
*TargetFrameName
, VARIANT
*PostData
, VARIANT
*Headers
)
2880 CComHeapPtr
<ITEMIDLIST
> pidl
;
2882 CComPtr
<IShellFolder
> pDesktop
;
2884 hResult
= SHGetDesktopFolder(&pDesktop
);
2885 if (FAILED_UNEXPECTEDLY(hResult
))
2887 hResult
= pDesktop
->ParseDisplayName(NULL
, NULL
, URL
, NULL
, &pidl
, NULL
);
2888 if (FAILED_UNEXPECTEDLY(hResult
))
2890 return BrowseObject(pidl
, 1);
2893 HRESULT STDMETHODCALLTYPE
CShellBrowser::Refresh()
2897 V_VT(&level
) = VT_I4
;
2899 return Refresh2(&level
);
2902 HRESULT STDMETHODCALLTYPE
CShellBrowser::Refresh2(VARIANT
*Level
)
2904 CComPtr
<IOleCommandTarget
> oleCommandTarget
;
2907 hResult
= fCurrentShellView
->QueryInterface(IID_PPV_ARG(IOleCommandTarget
, &oleCommandTarget
));
2908 if (FAILED_UNEXPECTEDLY(hResult
))
2910 return oleCommandTarget
->Exec(NULL
, 22, 1, Level
, NULL
);
2913 HRESULT STDMETHODCALLTYPE
CShellBrowser::Stop()
2918 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Application(IDispatch
**ppDisp
)
2923 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Parent(IDispatch
**ppDisp
)
2928 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Container(IDispatch
**ppDisp
)
2933 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Document(IDispatch
**ppDisp
)
2938 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_TopLevelContainer(VARIANT_BOOL
*pBool
)
2943 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Type(BSTR
*Type
)
2950 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Left(long *pl
)
2955 HRESULT STDMETHODCALLTYPE
CShellBrowser::put_Left(long Left
)
2960 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Top(long *pl
)
2965 HRESULT STDMETHODCALLTYPE
CShellBrowser::put_Top(long Top
)
2970 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Width(long *pl
)
2975 HRESULT STDMETHODCALLTYPE
CShellBrowser::put_Width(long Width
)
2980 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Height(long *pl
)
2985 HRESULT STDMETHODCALLTYPE
CShellBrowser::put_Height(long Height
)
2992 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_LocationName(BSTR
*LocationName
)
2997 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_LocationURL(BSTR
*LocationURL
)
3002 HRESULT STDMETHODCALLTYPE
CShellBrowser::get_Busy(VARIANT_BOOL
*pBool
)
3007 HRESULT STDMETHODCALLTYPE
CShellBrowser::Quit()
3012 HRESULT STDMETHODCALLTYPE
CShellBrowser::ClientToWindow(int *pcx
, int *pcy
)