ReactOS 0.4.15-dev-6073-g59e7458
internettoolbar.cpp
Go to the documentation of this file.
1/*
2 * ReactOS Explorer
3 *
4 * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
5 *
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.
10 *
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.
15 *
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
19 */
20
21/*
22Implements a class that knows how to hold and manage the menu band, brand band,
23toolbar, and address band for an explorer window
24*/
25
26#include "precomp.h"
27
28#if 1
29
30interface IAugmentedShellFolder : public IShellFolder
31{
36};
37
38#endif
39
40// navigation controls and menubar just send a message to parent window
41/*
42TODO:
43****Implement BandProxy methods
44****Add QueryStatus handler for built-in bands
45****Enable/Disable up, search, and folders commands appropriately
46 **Why are explorer toolbar separators a nonstandard width?
47 **Remove "(Empty)" item from Favorites menu. Probably something missing in CMenuCallback::CallbackSM
48 **Chevron menu on menuband doesn't work
49 **Fix CInternetToolbar::QueryBand to be generic
50
51****Fix context menu to strip divider when menu shown for menu band
52****Fix context menu to have items checked appropriately
53****Implement -1 command id update
54****When bands are rearranged, resize the internet toolbar and fix height of brand band
55****Right clicking on the browse back and forward toolbar buttons displays the same as pulldown menus
56 Implement show/hide of bands
57 Why is the background color of my toolbars different from explorer?
58 Internet Toolbar command handler should get the target for the command and call Exec on the target.
59 For commands built in to the Internet Toolbar, its Exec handles the command
60 When window width is changed, brand band flashes badly
61 Add all bands with correct ids (system bands now add with correct ids)
62 Implement IBandSite
63 Implement remaining IExplorerToolbar methods
64 Fix toolbar buttons to enable/disable correctly
65 After toolbar is customized, it may be necessary to patch the widths of separators
66 Add theme support
67 Check sizes and spacing of toolbars against Explorer
68 Implement resizing of the dock bar
69 Add missing icons for toolbar items
70 Draw History item in forward/back dropdown menus with icon
71 Fix toolbar customize dialog to not include separators as possible selections
72 Implement save/restore of toolbar state
73 Refactor drop down menu code to use a common function since code is so similar
74*/
75
77
79{
80 CComPtr<IWinEventHandler> menuWinEventHandler;
81 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
82 if (FAILED_UNEXPECTEDLY(hResult))
83 return hResult;
84 hResult = menuWinEventHandler->IsWindowOwner(hWnd);
85 if (FAILED_UNEXPECTEDLY(hResult))
86 return hResult;
87 if (hResult == S_OK)
88 return menuWinEventHandler->OnWinEvent(hWnd, uMsg, wParam, lParam, theResult);
89 return S_FALSE;
90}
91
93{
94 CComPtr<IDockingWindow> dockingWindow;
95 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
96 if (FAILED_UNEXPECTEDLY(hResult))
97 return hResult;
98 hResult = dockingWindow->ShowDW(fShow);
99 if (FAILED_UNEXPECTEDLY(hResult))
100 return hResult;
101 return S_OK;
102}
103
105{
106 CComPtr<IDockingWindow> dockingWindow;
107 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
108 if (FAILED_UNEXPECTEDLY(hResult))
109 return hResult;
110 hResult = dockingWindow->CloseDW(dwReserved);
111 if (FAILED_UNEXPECTEDLY(hResult))
112 return hResult;
113 return S_OK;
114}
115
116class CInternetToolbar;
117
119 public CComObjectRootEx<CComMultiThreadModelNoCS>,
120 public IDockingWindowSite,
121 public IInputObjectSite,
122 public IOleCommandTarget,
123 public IServiceProvider
124{
125public:
126 enum {
131 ITF_FIXEDSIZE = 16
132 };
133private:
134 CComPtr<IUnknown> fContainedBand; // the band inside us
135 CInternetToolbar *fToolbar; // our browser
139public:
141private:
143 // fields of DESKBANDINFO must be preserved between calls to GetBandInfo
145public:
146 CDockSite();
147 ~CDockSite();
148 HRESULT Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags);
150private:
151
152 // *** IOleWindow methods ***
153 virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd);
155
156 // *** IDockingWindow methods ***
157 virtual HRESULT STDMETHODCALLTYPE GetBorderDW(IUnknown* punkObj, LPRECT prcBorder);
158 virtual HRESULT STDMETHODCALLTYPE RequestBorderSpaceDW(IUnknown* punkObj, LPCBORDERWIDTHS pbw);
159 virtual HRESULT STDMETHODCALLTYPE SetBorderSpaceDW(IUnknown* punkObj, LPCBORDERWIDTHS pbw);
160
161 // *** IInputObjectSite specific methods ***
162 virtual HRESULT STDMETHODCALLTYPE OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus);
163
164 // *** IOleCommandTarget specific methods ***
165 virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds,
166 OLECMD prgCmds[ ], OLECMDTEXT *pCmdText);
167 virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID,
168 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
169
170 // *** IServiceProvider methods ***
171 virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
172
175 COM_INTERFACE_ENTRY_IID(IID_IDockingWindowSite, IDockingWindowSite)
176 COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite, IInputObjectSite)
177 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
178 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
180};
181
183{
184 fToolbar = NULL;
187 fBandID = 0;
188 fFlags = 0;
189 fInitialized = false;
190 memset(&fDeskBandInfo, 0, sizeof(fDeskBandInfo));
191}
192
194{
195}
196
197HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags)
198{
199 TCHAR textBuffer[40];
201 HRESULT hResult;
202
203 fContainedBand = containedBand;
204 fToolbar = browser;
206 fBandID = bandID;
207 fFlags = flags;
208 hResult = IUnknown_SetSite(containedBand, static_cast<IOleWindow *>(this));
209 if (FAILED_UNEXPECTEDLY(hResult))
210 return hResult;
211 hResult = IUnknown_GetWindow(containedBand, &fChildWindow);
212 if (FAILED_UNEXPECTEDLY(hResult))
213 return hResult;
214
215 memset(&bandInfo, 0, sizeof(bandInfo));
216 bandInfo.cbSize = sizeof(bandInfo);
217 bandInfo.lpText = textBuffer;
218 bandInfo.cch = sizeof(textBuffer) / sizeof(TCHAR);
219 hResult = GetRBBandInfo(bandInfo);
220
223 fInitialized = true;
224 return S_OK;
225}
226
228{
229 CComPtr<IDeskBand> deskBand;
230 HRESULT hResult;
231
232 hResult = fContainedBand->QueryInterface(IID_PPV_ARG(IDeskBand, &deskBand));
233 if (FAILED_UNEXPECTEDLY(hResult))
234 return hResult;
235
236 fDeskBandInfo.dwMask = DBIM_BKCOLOR | DBIM_MODEFLAGS | DBIM_TITLE | DBIM_ACTUAL |
237 DBIM_INTEGRAL | DBIM_MAXSIZE | DBIM_MINSIZE;
238 hResult = deskBand->GetBandInfo(fBandID, 0, &fDeskBandInfo);
239 // result of call is ignored
240
243
244 bandInfo.fStyle = RBBS_FIXEDBMP;
245 if (fDeskBandInfo.dwModeFlags & DBIMF_VARIABLEHEIGHT)
247 if (fDeskBandInfo.dwModeFlags & DBIMF_USECHEVRON)
248 bandInfo.fStyle |= RBBS_USECHEVRON;
249 if (fDeskBandInfo.dwModeFlags & DBIMF_BREAK)
250 bandInfo.fStyle |= RBBS_BREAK;
251 if (fDeskBandInfo.dwModeFlags & DBIMF_TOPALIGN)
252 bandInfo.fStyle |= RBBS_TOPALIGN;
254 bandInfo.fStyle |= RBBS_NOGRIPPER;
255 if (fFlags & ITF_NOTITLE)
256 bandInfo.fStyle |= RBBS_HIDETITLE;
259 if (fFlags & ITF_FIXEDSIZE)
260 bandInfo.fStyle |= RBBS_FIXEDSIZE;
261
262 if (fDeskBandInfo.dwModeFlags & DBIMF_BKCOLOR)
263 {
264 bandInfo.fMask |= RBBIM_COLORS;
265 bandInfo.clrFore = CLR_DEFAULT;
267 }
269 bandInfo.hwndChild = fChildWindow;
270 bandInfo.cxMinChild = fDeskBandInfo.ptMinSize.x;
271 bandInfo.cyMinChild = fDeskBandInfo.ptMinSize.y;
272 bandInfo.wID = fBandID;
274 bandInfo.cyMaxChild = fDeskBandInfo.ptMaxSize.y;
275 bandInfo.cyIntegral = fDeskBandInfo.ptIntegral.y;
277 bandInfo.lParam = reinterpret_cast<LPARAM>(this);
278 return S_OK;
279}
280
282{
283 if (lphwnd == NULL)
284 return E_POINTER;
285 *lphwnd = fRebarWindow;
286 return S_OK;
287}
288
290{
291 return E_NOTIMPL;
292}
293
295{
296 return E_NOTIMPL;
297}
298
300{
301 return E_NOTIMPL;
302}
303
305{
306 return E_NOTIMPL;
307}
308
310{
311 return E_NOTIMPL;
312}
313
315 OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
316{
317 return E_NOTIMPL;
318}
319
320HRESULT STDMETHODCALLTYPE CDockSite::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt,
321 VARIANT *pvaIn, VARIANT *pvaOut)
322{
323 TCHAR textBuffer[40];
325 int index;
326 HRESULT hResult;
327
328 if (IsEqualIID(*pguidCmdGroup, CGID_DeskBand))
329 {
330 switch (nCmdID)
331 {
333 if (fInitialized == false)
334 return S_OK;
335 if (V_VT(pvaIn) != VT_I4)
336 return E_INVALIDARG;
337 if (V_I4(pvaIn) != fBandID)
338 return E_FAIL;
339 // deskband information changed
340 // call GetBandInfo and refresh information in rebar
341 memset(&bandInfo, 0, sizeof(bandInfo));
342 bandInfo.cbSize = sizeof(bandInfo);
343 bandInfo.lpText = textBuffer;
344 bandInfo.cch = sizeof(textBuffer) / sizeof(TCHAR);
345 hResult = GetRBBandInfo(bandInfo);
346 if (FAILED_UNEXPECTEDLY(hResult))
347 return hResult;
350 return S_OK;
351 }
352 }
353 return E_FAIL;
354}
355
357{
358 if (IsEqualIID(guidService, SID_SMenuBandParent))
359 return this->QueryInterface(riid, ppvObject);
360
361 return fToolbar->QueryService(guidService, riid, ppvObject);
362}
363
365{
366}
367
369{
370}
371
373{
374 HRESULT hr;
375 CComPtr<IShellFolder> psfDesktop;
376
377 *ppsfResult = NULL;
378
379 hr = SHGetDesktopFolder(&psfDesktop);
380 if (FAILED(hr))
381 return hr;
382
383 hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, ppsfResult));
384
385 return hr;
386}
387
388static HRESULT GetFavoritesFolder(IShellFolder ** ppsfFavorites, LPITEMIDLIST * ppidl)
389{
390 HRESULT hr;
391 LPITEMIDLIST pidlUserFavorites;
392 LPITEMIDLIST pidlCommonFavorites;
393 CComPtr<IShellFolder> psfUserFavorites;
394 CComPtr<IShellFolder> psfCommonFavorites;
396
397 if (ppsfFavorites)
398 *ppsfFavorites = NULL;
399
400 if (ppidl)
401 *ppidl = NULL;
402
403 hr = SHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &pidlUserFavorites);
404 if (FAILED(hr))
405 {
406 WARN("Failed to get the USER favorites folder. Trying to run with just the COMMON one.\n");
407
410 return hr;
411
412 TRACE("COMMON favorites obtained.\n");
413 *ppidl = pidlCommonFavorites;
414 hr = BindToDesktop(pidlCommonFavorites, ppsfFavorites);
415 return hr;
416 }
417
420 {
421 WARN("Failed to get the COMMON favorites folder. Will use only the USER contents.\n");
422 *ppidl = pidlCommonFavorites;
423 hr = BindToDesktop(pidlUserFavorites, ppsfFavorites);
424 return hr;
425 }
426
427 TRACE("Both COMMON and USER favorites folders obtained, merging them...\n");
428
429 hr = BindToDesktop(pidlUserFavorites, &psfUserFavorites);
431 return hr;
432
433 hr = BindToDesktop(pidlCommonFavorites, &psfCommonFavorites);
435 return hr;
436
437 hr = CMergedFolder_CreateInstance(IID_PPV_ARG(IAugmentedShellFolder, &pasf));
439 {
440 *ppsfFavorites = psfUserFavorites.Detach();
441 *ppidl = pidlUserFavorites;
442 ILFree(pidlCommonFavorites);
443 return hr;
444 }
445
446 hr = pasf->AddNameSpace(NULL, psfUserFavorites, pidlUserFavorites, 0xFF00);
448 return hr;
449
450 hr = pasf->AddNameSpace(NULL, psfCommonFavorites, pidlCommonFavorites, 0);
452 return hr;
453
454 hr = pasf->QueryInterface(IID_PPV_ARG(IShellFolder, ppsfFavorites));
455 pasf.Release();
456
457 // TODO: obtain the folder's PIDL
458
459 ILFree(pidlCommonFavorites);
460 ILFree(pidlUserFavorites);
461
462 return hr;
463}
464
466{
467 CComPtr<IShellMenu> parentMenu;
468 CComPtr<IShellMenu> newMenu;
469 CComPtr<IShellFolder> favoritesFolder;
470 LPITEMIDLIST favoritesPIDL;
471 HWND ownerWindow;
472 HMENU parentHMenu;
473 HMENU favoritesHMenu;
474 HKEY orderRegKey;
475 DWORD disposition;
476 HRESULT hResult;
477 static const TCHAR szFavoritesKey[] =
478 _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MenuOrder\\Favorites");
479
480 if (!IsEqualIID(riid, IID_IShellMenu))
481 return E_FAIL;
482 if (psmd->uId != FCIDM_MENU_FAVORITES)
483 return E_FAIL;
484
485 // create favorites menu
486 hResult = psmd->punk->QueryInterface(IID_PPV_ARG(IShellMenu, &parentMenu));
487 if (FAILED_UNEXPECTEDLY(hResult))
488 return hResult;
489 hResult = parentMenu->GetMenu(&parentHMenu, &ownerWindow, NULL);
490 if (FAILED_UNEXPECTEDLY(hResult))
491 return hResult;
492 favoritesHMenu = GetSubMenu(parentHMenu, 3);
493 if (favoritesHMenu == NULL)
494 return E_FAIL;
495
496 if (fFavoritesMenu.p == NULL)
497 {
498 hResult = CMenuBand_CreateInstance(IID_PPV_ARG(IShellMenu, &newMenu));
499 if (FAILED_UNEXPECTEDLY(hResult))
500 return hResult;
501 hResult = newMenu->Initialize(this, FCIDM_MENU_FAVORITES, -1, SMINIT_VERTICAL | SMINIT_CACHED);
502 if (FAILED_UNEXPECTEDLY(hResult))
503 return hResult;
504
505 RegCreateKeyEx(HKEY_CURRENT_USER, szFavoritesKey,
506 0, NULL, 0, KEY_READ | KEY_WRITE, NULL, &orderRegKey, &disposition);
507
508 hResult = GetFavoritesFolder(&favoritesFolder, &favoritesPIDL);
509 if (FAILED_UNEXPECTEDLY(hResult))
510 return hResult;
511
512 hResult = newMenu->SetShellFolder(favoritesFolder, favoritesPIDL, orderRegKey, SMSET_BOTTOM | SMINIT_CACHED | SMINV_ID);
513 if (favoritesPIDL)
514 ILFree(favoritesPIDL);
515
516 if (FAILED(hResult))
517 return hResult;
518
519 fFavoritesMenu = newMenu;
520 }
521
522 hResult = fFavoritesMenu->SetMenu(favoritesHMenu, ownerWindow, SMSET_TOP | SMSET_DONTOWN);
523 if (FAILED_UNEXPECTEDLY(hResult))
524 return hResult;
525
526 return fFavoritesMenu->QueryInterface(riid, ppvObject);
527}
528
530{
531 switch (uMsg)
532 {
533 case SMC_INITMENU:
534 break;
535 case SMC_CREATE:
536 break;
537 case SMC_EXITMENU:
538 break;
539 case SMC_GETINFO:
540 {
541 SMINFO *infoPtr = reinterpret_cast<SMINFO *>(lParam);
542 if ((infoPtr->dwMask & SMIM_FLAGS) != 0)
543 {
544 if (psmd->uId == FCIDM_MENU_FAVORITES)
545 {
546 infoPtr->dwFlags |= SMIF_DROPCASCADE;
547 }
548 else
549 {
550 infoPtr->dwFlags |= SMIF_TRACKPOPUP;
551 }
552 }
553 if ((infoPtr->dwMask & SMIM_ICON) != 0)
554 infoPtr->iIcon = -1;
555 return S_OK;
556 }
557 case SMC_GETSFINFO:
558 break;
559 case SMC_GETOBJECT:
560 return GetObject(psmd, *reinterpret_cast<IID *>(wParam), reinterpret_cast<void **>(lParam));
561 case SMC_GETSFOBJECT:
562 break;
563 case SMC_EXEC:
564 PostMessageW(psmd->hwnd, WM_COMMAND, psmd->uId, 0);
565 break;
566 case SMC_SFEXEC:
567 SHInvokeDefaultCommand(psmd->hwnd, psmd->psf, psmd->pidlItem);
568 break;
569 case SMC_SFSELECTITEM:
570 break;
571 case 13:
572 // return tooltip
573 break;
574 case SMC_REFRESH:
575 break;
576 case SMC_DEMOTE:
577 break;
578 case SMC_PROMOTE:
579 break;
580 case 0x13:
581 break;
582 case SMC_DEFAULTICON:
583 break;
584 case SMC_NEWITEM:
585 break;
586 case SMC_CHEVRONEXPAND:
587 break;
588 case SMC_DISPLAYCHEVRONTIP:
589 break;
590 case SMC_SETSFOBJECT:
591 break;
592 case SMC_SHCHANGENOTIFY:
593 break;
594 case SMC_CHEVRONGETTIP:
595 break;
596 case SMC_SFDDRESTRICTED:
597 break;
598 case 0x35:
599 break;
600 case 49:
601 break;
602 case 0x10000000:
603 break;
604 }
605 return S_FALSE;
606}
607
609{
611 fLocked = false;
616 fAdviseCookie = 0;
617}
618
620{
621}
622
623void CInternetToolbar::AddDockItem(IUnknown *newItem, int bandID, int flags)
624{
625 CComPtr<CDockSite> newSite;
626
627 newSite = new CComObject<CDockSite>;
628 newSite->Initialize(newItem, this, fMainReBar, bandID, flags);
629}
630
632{
633 CComPtr<IDockingWindowSite> dockingWindowSite;
634 RECT availableBorderSpace;
635
636 HRESULT hResult = fSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &dockingWindowSite));
637 if (FAILED_UNEXPECTEDLY(hResult))
638 return hResult;
639 hResult = dockingWindowSite->GetBorderDW(static_cast<IDockingWindow *>(this), &availableBorderSpace);
640 if (FAILED_UNEXPECTEDLY(hResult))
641 return hResult;
642
643 if (maxHeight && availableBorderSpace.bottom - availableBorderSpace.top > maxHeight)
644 {
645 availableBorderSpace.bottom = availableBorderSpace.top + maxHeight;
646 }
647
648 return ResizeBorderDW(&availableBorderSpace, fSite, FALSE);
649}
650
652{
653 CComPtr<IShellMenu> menubar;
655 VARIANT menuOut;
656 HWND ownerWindow;
657 HRESULT hResult;
658
659 if (!pMenuBar)
660 return E_POINTER;
661
662 *pMenuBar = NULL;
663
664 hResult = CMenuBand_CreateInstance(IID_PPV_ARG(IShellMenu, &menubar));
665 if (FAILED_UNEXPECTEDLY(hResult))
666 return hResult;
667
668 hResult = fMenuCallback->QueryInterface(IID_PPV_ARG(IShellMenuCallback, &callback));
669 if (FAILED_UNEXPECTEDLY(hResult))
670 return hResult;
671
672 hResult = menubar->Initialize(callback, -1, ANCESTORDEFAULT, SMINIT_HORIZONTAL | SMINIT_TOPLEVEL);
673 if (FAILED_UNEXPECTEDLY(hResult))
674 return hResult;
675
676 // Set Menu
677 {
678 hResult = IUnknown_Exec(fSite, CGID_Explorer, 0x35, 0, NULL, &menuOut);
679 if (FAILED_UNEXPECTEDLY(hResult))
680 return hResult;
681
682 if (V_VT(&menuOut) != VT_INT_PTR || V_INTREF(&menuOut) == NULL)
683 return E_FAIL;
684
685 hResult = IUnknown_GetWindow(fSite, &ownerWindow);
686 if (FAILED_UNEXPECTEDLY(hResult))
687 return hResult;
688
689 HMENU hMenuBar = (HMENU) V_INTREF(&menuOut);
690
691 // FIXME: Figure out the proper way to do this.
692 HMENU hMenuFavs = GetSubMenu(hMenuBar, 3);
693 if (hMenuFavs)
694 {
696 }
697
698 hResult = menubar->SetMenu(hMenuBar, ownerWindow, SMSET_DONTOWN);
699 if (FAILED_UNEXPECTEDLY(hResult))
700 return hResult;
701 }
702
703 hResult = IUnknown_Exec(menubar, CGID_MenuBand, 3, 1, NULL, NULL);
704 if (FAILED_UNEXPECTEDLY(hResult))
705 return hResult;
706
707 *pMenuBar = menubar.Detach();
708
709 return S_OK;
710}
711
713{
714 REBARBANDINFOW rebarBandInfo;
715 int bandCount;
716 CDockSite *dockSite;
717 HRESULT hResult;
718
719 if (locked != fLocked)
720 {
721 fLocked = locked;
722 rebarBandInfo.cbSize = sizeof(rebarBandInfo);
723 rebarBandInfo.fMask = RBBIM_STYLE | RBBIM_LPARAM;
724 bandCount = (int)SendMessage(fMainReBar, RB_GETBANDCOUNT, 0, 0);
725 for (INT x = 0; x < bandCount; x++)
726 {
727 SendMessage(fMainReBar, RB_GETBANDINFOW, x, (LPARAM)&rebarBandInfo);
728 dockSite = reinterpret_cast<CDockSite *>(rebarBandInfo.lParam);
729 if (dockSite != NULL)
730 {
731 rebarBandInfo.fStyle &= ~(RBBS_NOGRIPPER | RBBS_GRIPPERALWAYS);
732 if (dockSite->fFlags & CDockSite::ITF_NOGRIPPER || fLocked)
733 rebarBandInfo.fStyle |= RBBS_NOGRIPPER;
734 if (dockSite->fFlags & CDockSite::ITF_GRIPPERALWAYS && !fLocked)
735 rebarBandInfo.fStyle |= RBBS_GRIPPERALWAYS;
736 SendMessage(fMainReBar, RB_SETBANDINFOW, x, (LPARAM)&rebarBandInfo);
737 }
738 }
739 hResult = ReserveBorderSpace(0);
740
741 // TODO: refresh view menu?
742 }
743 return S_OK;
744}
745
746HRESULT CInternetToolbar::SetState(const GUID *pguidCmdGroup, long commandID, OLECMD* pcmd)
747{
748 long state = 0;
749 if (pcmd->cmdf & OLECMDF_ENABLED)
751 if (pcmd->cmdf & OLECMDF_LATCHED)
753 return SetState(pguidCmdGroup, commandID, state);
754}
755
757{
758 HRESULT hResult;
759
760 hResult = S_OK;
761 switch (commandID)
762 {
763 case -1:
764 // loop through buttons
765 //for buttons in CLSID_CommonButtons
766 // if up, QueryStatus for up state and update it
767 //
768 //for buttons in fCommandCategory, update with QueryStatus of fCommandTarget
769
770 OLECMD commandList[4];
771 commandList[0].cmdID = 0x1c;
772 commandList[1].cmdID = 0x1d;
773 commandList[2].cmdID = 0x1e;
774 commandList[3].cmdID = 0x23;
775 IUnknown_QueryStatus(fSite, CGID_Explorer, 4, commandList, NULL);
776 SetState(&CLSID_CommonButtons, gSearchCommandID, &commandList[0]);
777 SetState(&CLSID_CommonButtons, gFoldersCommandID, &commandList[3]);
778 //SetState(&CLSID_CommonButtons, gFavoritesCommandID, &commandList[2]);
779 //SetState(&CLSID_CommonButtons, gHistoryCommandID, &commandList[1]);
780
781 break;
782 case 1:
783 // forward
784 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_FORWARD, newValue ? TBSTATE_ENABLED : 0);
785 break;
786 case 2:
787 // back
788 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_BACK, newValue ? TBSTATE_ENABLED : 0);
789 break;
790 case 3:
791 // up
792 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_UPONELEVEL, newValue ? TBSTATE_ENABLED : 0);
793 break;
794 }
795 return hResult;
796}
797
799{
800 CComPtr<IServiceProvider> serviceProvider;
801 HRESULT hResult;
802
803 hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider));
804 if (FAILED_UNEXPECTEDLY(hResult))
805 return hResult;
806 hResult = serviceProvider->QueryService(SID_IBandProxy, IID_PPV_ARG(IBandProxy, &fBandProxy));
807 if (FAILED_UNEXPECTEDLY(hResult))
808 {
809 hResult = CBandProxy_CreateInstance(IID_PPV_ARG(IBandProxy, &fBandProxy));
810 if (FAILED_UNEXPECTEDLY(hResult))
811 return hResult;
812 hResult = fBandProxy->SetSite(fSite);
813 if (FAILED_UNEXPECTEDLY(hResult))
814 return hResult;
815 }
816 return S_OK;
817}
818
820{
821 return E_NOTIMPL;
822}
823
825{
827
828 if (fMenuBar)
830 if (hr != S_FALSE)
831 return hr;
832
833 if (fControlsBar)
835 if (hr != S_FALSE)
836 return hr;
837
838 if (fNavigationBar)
840 if (hr != S_FALSE)
841 return hr;
842
843 return S_FALSE;
844}
845
847{
849
850 if (fMenuBar)
852 if (hr == S_OK)
853 return hr;
854
855 if (fControlsBar)
857 if (hr == S_OK)
858 return hr;
859
860 if (fNavigationBar)
862 if (hr == S_OK)
863 return hr;
864
865 return S_FALSE;
866}
867
869{
870 if (lphwnd == NULL)
871 return E_POINTER;
872 *lphwnd = m_hWnd;
873 return S_OK;
874}
875
877{
878 return E_NOTIMPL;
879}
880
882{
883 HRESULT hResult;
884
885 // show the bar here
886 if (fShow)
887 {
888 hResult = ReserveBorderSpace();
889 if (FAILED_UNEXPECTEDLY(hResult))
890 return hResult;
891 }
892
893 if (fMenuBar)
894 {
895 hResult = IUnknown_ShowDW(fMenuBar, fShow);
896 if (FAILED_UNEXPECTEDLY(hResult))
897 return hResult;
898 }
899
900 if (fControlsBar)
901 {
902 hResult = IUnknown_ShowDW(fControlsBar, fShow);
903 if (FAILED_UNEXPECTEDLY(hResult))
904 return hResult;
905 }
906 if (fNavigationBar)
907 {
908 hResult = IUnknown_ShowDW(fNavigationBar, fShow);
909 if (FAILED_UNEXPECTEDLY(hResult))
910 return hResult;
911 }
912 if (fLogoBar)
913 {
914 hResult = IUnknown_ShowDW(fLogoBar, fShow);
915 if (FAILED_UNEXPECTEDLY(hResult))
916 return hResult;
917 }
918 return S_OK;
919}
920
922{
923 HRESULT hResult;
924
925 if (fMenuBar)
926 {
928 if (FAILED_UNEXPECTEDLY(hResult))
929 return hResult;
930 ReleaseCComPtrExpectZero(fMenuBar);
931 }
932 if (fControlsBar)
933 {
935 if (FAILED_UNEXPECTEDLY(hResult))
936 return hResult;
937 ReleaseCComPtrExpectZero(fControlsBar);
938 }
939 if (fNavigationBar)
940 {
942 if (FAILED_UNEXPECTEDLY(hResult))
943 return hResult;
944 ReleaseCComPtrExpectZero(fNavigationBar);
945 }
946 if (fLogoBar)
947 {
949 if (FAILED_UNEXPECTEDLY(hResult))
950 return hResult;
951 ReleaseCComPtrExpectZero(fLogoBar);
952 }
953
954 SetSite(NULL);
955 return S_OK;
956}
957
959 IUnknown *punkToolbarSite, BOOL fReserved)
960{
961 RECT neededBorderSpace;
962 RECT availableBorderSpace = *prcBorder;
963
964 SendMessage(fMainReBar, RB_SIZETORECT, RBSTR_CHANGERECT, reinterpret_cast<LPARAM>(&availableBorderSpace));
965
966 // RBSTR_CHANGERECT does not seem to set the proper size in the rect.
967 // Let's make sure we fetch the actual size properly.
968 ::GetWindowRect(fMainReBar, &availableBorderSpace);
969 neededBorderSpace.left = 0;
970 neededBorderSpace.top = availableBorderSpace.bottom - availableBorderSpace.top;
971 if (!fLocked)
972 neededBorderSpace.top += 3;
973 neededBorderSpace.right = 0;
974 neededBorderSpace.bottom = 0;
975
976 CComPtr<IDockingWindowSite> dockingWindowSite;
977
978 HRESULT hResult = fSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &dockingWindowSite));
979 if (FAILED_UNEXPECTEDLY(hResult))
980 return hResult;
981
982 hResult = dockingWindowSite->RequestBorderSpaceDW(static_cast<IDockingWindow *>(this), &neededBorderSpace);
983 if (FAILED_UNEXPECTEDLY(hResult))
984 return hResult;
985
986 hResult = dockingWindowSite->SetBorderSpaceDW(static_cast<IDockingWindow *>(this), &neededBorderSpace);
987 if (FAILED_UNEXPECTEDLY(hResult))
988 return hResult;
989
990 return S_OK;
991}
992
994{
995 if (pClassID == NULL)
996 return E_POINTER;
997 *pClassID = CLSID_InternetToolbar;
998 return S_OK;
999}
1000
1002{
1003 return E_NOTIMPL;
1004}
1005
1007{
1008 return E_NOTIMPL;
1009}
1010
1012{
1013 return E_NOTIMPL;
1014}
1015
1017{
1018 return E_NOTIMPL;
1019}
1020
1022{
1023 CComPtr<IShellMenu> menuBar;
1024 CComPtr<IUnknown> logoBar;
1025 CComPtr<IUnknown> toolsBar;
1026 CComPtr<IUnknown> navigationBar;
1027 HRESULT hResult;
1028
1029 /* Create and attach the menubar to the rebar */
1030 hResult = CreateMenuBar(&menuBar);
1031 if (FAILED_UNEXPECTEDLY(hResult))
1032 return hResult;
1034
1035 hResult = IUnknown_GetWindow(menuBar, &fMenuBandWindow);
1036 fMenuBar.Attach(menuBar.Detach()); // transfer the ref count
1037
1038 // FIXME: The ROS Rebar does not properly support fixed-size items such as the brandband,
1039 // and it will put them in their own row, sized to take up the whole row.
1040#if 0
1041 /* Create and attach the brand/logo to the rebar */
1042 hResult = CBrandBand_CreateInstance(IID_PPV_ARG(IUnknown, &logoBar));
1043 if (FAILED_UNEXPECTEDLY(hResult))
1044 return hResult;
1046 fLogoBar.Attach(logoBar.Detach()); // transfer the ref count
1047#endif
1048
1049 /* Create and attach the standard toolbar to the rebar */
1050 hResult = CToolsBand_CreateInstance(IID_PPV_ARG(IUnknown, &toolsBar));
1051 if (FAILED_UNEXPECTEDLY(hResult))
1052 return hResult;
1054 fControlsBar.Attach(toolsBar.Detach()); // transfer the ref count
1056 if (FAILED_UNEXPECTEDLY(hResult))
1057 return hResult;
1058
1059 /* Create and attach the address/navigation toolbar to the rebar */
1060 hResult = CAddressBand_CreateInstance(IID_PPV_ARG(IUnknown, &navigationBar));
1061 if (FAILED_UNEXPECTEDLY(hResult))
1062 return hResult;
1064 fNavigationBar.Attach(navigationBar.Detach());
1066
1067 return S_OK;
1068}
1069
1071{
1072 int index = (int)SendMessage(fMainReBar, RB_IDTOINDEX, BandID, 0);
1073
1076
1077 return (bandInfo.fStyle & RBBS_HIDDEN) ? S_FALSE : S_OK;
1078}
1079
1081{
1082 int index = (int)SendMessage(fMainReBar, RB_IDTOINDEX, BandID, 0);
1083
1086
1087 if (bandInfo.fStyle & RBBS_HIDDEN)
1088 bandInfo.fStyle &= ~RBBS_HIDDEN;
1089 else
1090 bandInfo.fStyle |= RBBS_HIDDEN;
1091
1093
1095 return S_OK;
1096}
1097
1099 ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
1100{
1101 if (IsEqualIID(*pguidCmdGroup, CGID_PrivCITCommands))
1102 {
1103 while (cCmds != 0)
1104 {
1105 switch (prgCmds->cmdID)
1106 {
1107 case ITID_TEXTLABELS: // Text Labels state
1108 prgCmds->cmdf = OLECMDF_SUPPORTED;
1109 break;
1110 case ITID_TOOLBARBANDSHOWN: // toolbar visibility
1113 prgCmds->cmdf |= OLECMDF_LATCHED;
1114 break;
1115 case ITID_ADDRESSBANDSHOWN: // address bar visibility
1118 prgCmds->cmdf |= OLECMDF_LATCHED;
1119 break;
1120 case ITID_LINKSBANDSHOWN: // links bar visibility
1121 prgCmds->cmdf = 0;
1122 break;
1123 case ITID_MENUBANDSHOWN: // Menubar band visibility
1124 prgCmds->cmdf = OLECMDF_SUPPORTED;
1125 if (fMenuBar)
1126 prgCmds->cmdf |= OLECMDF_LATCHED;
1127 break;
1128 case ITID_AUTOHIDEENABLED: // Auto hide enabled/disabled
1129 prgCmds->cmdf = 0;
1130 break;
1131 case ITID_CUSTOMIZEENABLED: // customize enabled
1132 prgCmds->cmdf = OLECMDF_SUPPORTED;
1133 break;
1134 case ITID_TOOLBARLOCKED: // lock toolbars
1136 if (fLocked)
1137 prgCmds->cmdf |= OLECMDF_LATCHED;
1138 break;
1139 default:
1140 prgCmds->cmdf = 0;
1141 break;
1142 }
1143 prgCmds++;
1144 cCmds--;
1145 }
1146 return S_OK;
1147 }
1148 return E_FAIL;
1149}
1150
1152 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
1153{
1154 if (IsEqualIID(*pguidCmdGroup, CGID_PrivCITCommands))
1155 {
1156 switch (nCmdID)
1157 {
1158 case 1:
1159 // what do I do here?
1160 return S_OK;
1161 case ITID_TEXTLABELS:
1162 // toggle text labels
1163 return S_OK;
1169 // toggle links band visibility
1170 return S_OK;
1172 // run customize
1173 return S_OK;
1174 case ITID_TOOLBARLOCKED:
1175 return LockUnlockToolbars(!fLocked);
1176 }
1177 }
1178 return E_FAIL;
1179}
1180
1182{
1183 return E_NOTIMPL;
1184}
1185
1187{
1188 return E_NOTIMPL;
1189}
1190
1192 LCID lcid, DISPID *rgDispId)
1193{
1194 return E_NOTIMPL;
1195}
1196
1198 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
1199{
1200 HRESULT hResult;
1201
1202 switch(dispIdMember)
1203 {
1205 hResult = S_OK;
1206 break;
1208 hResult = S_OK;
1209 break;
1211 if (pDispParams->cArgs != 2)
1212 return E_INVALIDARG;
1213 if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL || V_VT(&pDispParams->rgvarg[1]) != VT_I4)
1214 return E_INVALIDARG;
1215 return CommandStateChanged(V_BOOL(&pDispParams->rgvarg[0]) != VARIANT_FALSE,
1216 V_I4(&pDispParams->rgvarg[1]));
1218 hResult = S_OK;
1219 break;
1221 hResult = S_OK;
1222 break;
1224 hResult = S_OK;
1225 break;
1226 }
1227 return S_OK;
1228}
1229
1231{
1232 HRESULT hResult;
1233
1234 TRACE("SetCommandTarget %p category %s param %d\n", theTarget, wine_dbgstr_guid(category), param14);
1235
1236 fCommandTarget.Release();
1238 if (FAILED_UNEXPECTEDLY(hResult))
1239 return hResult;
1241 return S_OK;
1242}
1243
1245{
1246 return E_NOTIMPL;
1247}
1248
1250{
1251 return E_NOTIMPL;
1252}
1253
1255 HINSTANCE param10, LPCTSTR param14, long *param18)
1256{
1257 long result;
1258
1260 reinterpret_cast<WPARAM>(param10), reinterpret_cast<LPARAM>(param14));
1261 *param18 = result;
1262 if (result == -1)
1263 return E_FAIL;
1264 return S_OK;
1265}
1266
1267HRESULT STDMETHODCALLTYPE CInternetToolbar::GetButton(const GUID *pguidCmdGroup, long param10, long param14)
1268{
1269 return E_NOTIMPL;
1270}
1271
1272HRESULT STDMETHODCALLTYPE CInternetToolbar::GetState(const GUID *pguidCmdGroup, long commandID, long *theState)
1273{
1274 if (theState == NULL)
1275 return E_POINTER;
1276 // map the command id
1277 *theState = (long)::SendMessage(fToolbarWindow, TB_GETSTATE, commandID, 0);
1278 return S_OK;
1279}
1280
1281HRESULT STDMETHODCALLTYPE CInternetToolbar::SetState(const GUID *pguidCmdGroup, long commandID, long theState)
1282{
1283 // map the command id
1284 ::SendMessage(fToolbarWindow, TB_SETSTATE, commandID, MAKELONG(theState, 0));
1285 return S_OK;
1286}
1287
1288HRESULT STDMETHODCALLTYPE CInternetToolbar::AddBitmap(const GUID *pguidCmdGroup, long param10, long buttonCount,
1289 TBADDBITMAP *lParam, long *newIndex, COLORREF param20)
1290{
1291 return E_NOTIMPL;
1292}
1293
1295{
1296 if (paramC == NULL)
1297 return E_POINTER;
1298 *paramC = MAKELONG(24, 24);
1299 return S_OK;
1300}
1301
1304{
1305 return E_NOTIMPL;
1306}
1307
1309 HIMAGELIST param14, HIMAGELIST param18)
1310{
1311 return E_NOTIMPL;
1312}
1313
1314HRESULT STDMETHODCALLTYPE CInternetToolbar::ModifyButton(const GUID *pguidCmdGroup, long param10, long param14)
1315{
1316 return E_NOTIMPL;
1317}
1318
1320{
1321 return E_NOTIMPL;
1322}
1323
1325{
1326 CComPtr<IBrowserService> browserService;
1327 HWND ownerWindow;
1328 HWND dockContainer;
1329 HRESULT hResult;
1330
1331 if (pUnkSite == NULL)
1332 {
1333 hResult = AtlUnadvise(fSite, DIID_DWebBrowserEvents, fAdviseCookie);
1335 DestroyWindow();
1336 fSite.Release();
1337 }
1338 else
1339 {
1340 // get window handle of owner
1341 hResult = IUnknown_GetWindow(pUnkSite, &ownerWindow);
1342 if (FAILED_UNEXPECTEDLY(hResult))
1343 return hResult;
1344 if (ownerWindow == NULL)
1345 return E_FAIL;
1346
1347 // create dock container
1348 fSite = pUnkSite;
1349 dockContainer = SHCreateWorkerWindowW(0, ownerWindow, 0,
1351 if (dockContainer == NULL)
1352 return E_FAIL;
1353 SubclassWindow(dockContainer);
1354
1355 // create rebar in dock container
1361 0, 0, 700, 60, dockContainer, NULL, _AtlBaseModule.GetModuleInstance(), NULL);
1362 if (fMainReBar == NULL)
1363 return E_FAIL;
1364
1365 // take advice to watch events
1366 hResult = IUnknown_QueryService(pUnkSite, SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService));
1367 hResult = AtlAdvise(browserService, static_cast<IDispatch *>(this), DIID_DWebBrowserEvents, &fAdviseCookie);
1368 }
1369 return S_OK;
1370}
1371
1373{
1374 if (ppvSite == NULL)
1375 return E_POINTER;
1376 if (fSite.p != NULL)
1377 return fSite->QueryInterface(riid, ppvSite);
1378 *ppvSite = NULL;
1379 return S_OK;
1380}
1381
1383{
1384 HRESULT hResult;
1385
1386 if (IsEqualIID(guidService, IID_IBandSite))
1387 return this->QueryInterface(riid, ppvObject);
1388 if (IsEqualIID(guidService, SID_IBandProxy))
1389 {
1390 if (fBandProxy.p == NULL)
1391 {
1392 hResult = CreateAndInitBandProxy();
1393 if (FAILED_UNEXPECTEDLY(hResult))
1394 return hResult;
1395 }
1396 return fBandProxy->QueryInterface(riid, ppvObject);
1397 }
1398 return IUnknown_QueryService(fSite, guidService, riid, ppvObject);
1399}
1400
1402 HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
1403{
1404 HRESULT hResult;
1405
1406 if (fMenuBar)
1407 {
1408 hResult = IUnknown_RelayWinEvent(fMenuBar, hWnd, uMsg, wParam, lParam, theResult);
1409 if (hResult != S_FALSE)
1410 return hResult;
1411 }
1412
1413 if (fNavigationBar)
1414 {
1415 hResult = IUnknown_RelayWinEvent(fNavigationBar, hWnd, uMsg, wParam, lParam, theResult);
1416 if (hResult != S_FALSE)
1417 return hResult;
1418 }
1419
1420 if (fLogoBar)
1421 {
1422 hResult = IUnknown_RelayWinEvent(fLogoBar, hWnd, uMsg, wParam, lParam, theResult);
1423 if (hResult != S_FALSE)
1424 return hResult;
1425 }
1426
1427 return S_FALSE;
1428}
1429
1431{
1433 return E_NOTIMPL;
1434}
1435
1437{
1439 return E_NOTIMPL;
1440}
1441
1443{
1445 return E_NOTIMPL;
1446}
1447
1449 IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName)
1450{
1451 if (ppstb == NULL)
1452 return E_POINTER;
1453 if (dwBandID == ITBBID_MENUBAND && fMenuBar.p != NULL)
1454 return fMenuBar->QueryInterface(IID_PPV_ARG(IDeskBand, ppstb));
1455 //if (dwBandID == ITBBID_BRANDBAND && fLogoBar.p != NULL)
1456 // return fLogoBar->QueryInterface(IID_PPV_ARG(IDeskBand, ppstb));
1457 *ppstb = NULL;
1458 return E_FAIL;
1459}
1460
1462{
1464 return E_NOTIMPL;
1465}
1466
1468{
1470 return E_NOTIMPL;
1471}
1472
1474{
1476 return E_NOTIMPL;
1477}
1478
1480{
1482 return E_NOTIMPL;
1483}
1484
1486{
1488 return E_NOTIMPL;
1489}
1490
1491LRESULT CInternetToolbar::OnTravelBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1492{
1493 CComPtr<IWebBrowser> webBrowser;
1494 HRESULT hResult;
1495
1496 hResult = IUnknown_QueryService(fSite, SID_SShellBrowser, IID_PPV_ARG(IWebBrowser, &webBrowser));
1497 if (FAILED_UNEXPECTEDLY(hResult))
1498 return 0;
1499 hResult = webBrowser->GoBack();
1500 return 1;
1501}
1502
1503LRESULT CInternetToolbar::OnTravelForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1504{
1505 CComPtr<IWebBrowser> webBrowser;
1506 HRESULT hResult;
1507
1508 hResult = IUnknown_QueryService(fSite, SID_SShellBrowser, IID_PPV_ARG(IWebBrowser, &webBrowser));
1509 if (FAILED_UNEXPECTEDLY(hResult))
1510 return 0;
1511 hResult = webBrowser->GoForward();
1512 return 1;
1513}
1514
1515LRESULT CInternetToolbar::OnUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1516{
1517 IUnknown_Exec(fSite, CGID_ShellBrowser, IDM_GOTO_UPONELEVEL, 0, NULL, NULL);
1518 return 1;
1519}
1520
1521LRESULT CInternetToolbar::OnSearch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1522{
1523 IUnknown_Exec(fSite, CGID_Explorer, 0x1c, 1, NULL, NULL);
1524 return 1;
1525}
1526
1527LRESULT CInternetToolbar::OnFolders(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1528{
1529 IUnknown_Exec(fSite, CGID_Explorer, 0x23, 0, NULL, NULL);
1530 return 1;
1531}
1532
1534{
1535 HRESULT hResult;
1536
1537 if (fCommandTarget.p != NULL)
1538 {
1539 hResult = fCommandTarget->Exec(&fCommandCategory, wID, 0, NULL, NULL);
1540 if (FAILED(hResult))
1541 {
1542 ::SendMessageW(::GetParent(m_hWnd), WM_COMMAND, wID, 0);
1543 }
1544 }
1545 return 1;
1546}
1547
1549{
1550 CComPtr<IBrowserService> browserService;
1551 CComPtr<IOleCommandTarget> commandTarget;
1552 CComPtr<ITravelLog> travelLog;
1553 NMTOOLBARW *notifyInfo;
1554 RECT bounds;
1555 HMENU newMenu;
1557 int selectedItem;
1558 VARIANT parmIn;
1559 OLECMD commandInfo;
1560 HRESULT hResult;
1561 wchar_t templateString[200];
1562
1563 notifyInfo = (NMTOOLBARW *)pNMHDR;
1564 if (notifyInfo->hdr.hwndFrom != fToolbarWindow)
1565 {
1566 // not from the toolbar, keep looking for a message handler
1567 bHandled = FALSE;
1568 return 0;
1569 }
1570 SendMessage(fToolbarWindow, TB_GETRECT, notifyInfo->iItem, reinterpret_cast<LPARAM>(&bounds));
1571 ::MapWindowPoints(fToolbarWindow, NULL, reinterpret_cast<POINT *>(&bounds), 2);
1572 switch (notifyInfo->iItem)
1573 {
1574 case IDM_GOTO_BACK:
1575 newMenu = CreatePopupMenu();
1577 hResult = browserService->GetTravelLog(&travelLog);
1578 hResult = travelLog->InsertMenuEntries(browserService, newMenu, 0, 1, 9, TLMENUF_BACK);
1579 commandInfo.cmdID = 0x1d;
1580 hResult = IUnknown_QueryStatus(browserService, CGID_Explorer, 1, &commandInfo, NULL);
1581 if ((commandInfo.cmdf & (OLECMDF_ENABLED | OLECMDF_LATCHED)) == OLECMDF_ENABLED &&
1582 travelLog->CountEntries(browserService) > 1)
1583 {
1584 AppendMenuW(newMenu, MF_SEPARATOR, -1, L"");
1585
1586 if (LoadStringW(_AtlBaseModule.GetResourceInstance(),
1587 IDS_HISTORYTEXT, templateString, sizeof(templateString) / sizeof(wchar_t)) == 0)
1588 StringCbCopyW(templateString, sizeof(templateString), L"&History\tCtrl+H");
1589
1590 AppendMenuW(newMenu, MF_STRING /* | MF_OWNERDRAW */, IDM_EXPLORERBAR_HISTORY, templateString);
1591 }
1592 params.cbSize = sizeof(params);
1593 params.rcExclude = bounds;
1594 selectedItem = TrackPopupMenuEx(newMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD,
1595 bounds.left, bounds.bottom, m_hWnd, &params);
1596 if (selectedItem == IDM_EXPLORERBAR_HISTORY)
1597 {
1598 V_VT(&parmIn) = VT_I4;
1599 V_I4(&parmIn) = 1;
1600 Exec(&CGID_Explorer, 0x1d, 2, &parmIn, NULL);
1601 }
1602 else if (selectedItem != 0)
1603 hResult = travelLog->Travel(browserService, -selectedItem);
1604 DestroyMenu(newMenu);
1605 break;
1606 case IDM_GOTO_FORWARD:
1607 newMenu = CreatePopupMenu();
1609 hResult = browserService->GetTravelLog(&travelLog);
1610 hResult = travelLog->InsertMenuEntries(browserService, newMenu, 0, 1, 9, TLMENUF_FORE);
1611 commandInfo.cmdID = 0x1d;
1612 hResult = IUnknown_QueryStatus(browserService, CGID_Explorer, 1, &commandInfo, NULL);
1613 if ((commandInfo.cmdf & (OLECMDF_ENABLED | OLECMDF_LATCHED)) == OLECMDF_ENABLED &&
1614 travelLog->CountEntries(browserService) > 1)
1615 {
1616 AppendMenuW(newMenu, MF_SEPARATOR, -1, L"");
1617
1618 if (LoadStringW(_AtlBaseModule.GetResourceInstance(),
1619 IDS_HISTORYTEXT, templateString, sizeof(templateString) / sizeof(wchar_t)) == 0)
1620 StringCbCopyW(templateString, sizeof(templateString), L"&History\tCtrl+H");
1621
1622 AppendMenuW(newMenu, MF_STRING /* | MF_OWNERDRAW */, IDM_EXPLORERBAR_HISTORY, templateString);
1623 }
1624 params.cbSize = sizeof(params);
1625 params.rcExclude = bounds;
1626 selectedItem = TrackPopupMenuEx(newMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD,
1627 bounds.left, bounds.bottom, m_hWnd, &params);
1628 if (selectedItem == IDM_EXPLORERBAR_HISTORY)
1629 {
1630 V_VT(&parmIn) = VT_I4;
1631 V_I4(&parmIn) = 1;
1632 Exec(&CGID_Explorer, 0x1d, 2, &parmIn, NULL);
1633 }
1634 else if (selectedItem != 0)
1635 hResult = travelLog->Travel(browserService, selectedItem);
1636 DestroyMenu(newMenu);
1637 break;
1638 case gViewsCommandID:
1639 VARIANT inValue;
1640 CComVariant outValue;
1641 HRESULT hResult;
1642
1643 V_VT(&inValue) = VT_INT_PTR;
1644 V_INTREF(&inValue) = reinterpret_cast<INT *>(&bounds);
1645
1646 if (fCommandTarget.p != NULL)
1647 hResult = fCommandTarget->Exec(&fCommandCategory, FCIDM_SHVIEW_AUTOARRANGE, 1, &inValue, &outValue);
1648 // pvaOut is VT_I4 with value 0x403
1649 break;
1650 }
1651 return TBDDRET_DEFAULT;
1652}
1653
1655{
1656 return 1;
1657}
1658
1660{
1661 return 1;
1662}
1663
1665{
1666 HMENU contextMenuBar;
1667 HMENU contextMenu;
1668 POINT clickLocation;
1669 int command;
1670 RBHITTESTINFO hitTestInfo;
1671 REBARBANDINFOW rebarBandInfo;
1672 int bandID;
1673 BOOL goButtonChecked;
1674
1675 clickLocation.x = LOWORD(lParam);
1676 clickLocation.y = HIWORD(lParam);
1677 hitTestInfo.pt = clickLocation;
1678 ScreenToClient(&hitTestInfo.pt);
1679 SendMessage(fMainReBar, RB_HITTEST, 0, (LPARAM)&hitTestInfo);
1680 if (hitTestInfo.iBand == -1)
1681 return 0;
1682 rebarBandInfo.cbSize = sizeof(rebarBandInfo);
1683 rebarBandInfo.fMask = RBBIM_ID;
1684 SendMessage(fMainReBar, RB_GETBANDINFOW, hitTestInfo.iBand, (LPARAM)&rebarBandInfo);
1685 bandID = rebarBandInfo.wID;
1686 contextMenuBar = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU));
1687 contextMenu = GetSubMenu(contextMenuBar, 0);
1688 switch (bandID)
1689 {
1690 case ITBBID_MENUBAND: // menu band
1694 break;
1695 case ITBBID_BRANDBAND: // brand band
1699 break;
1700 case ITBBID_TOOLSBAND: // tools band
1703 break;
1704 case ITBBID_ADDRESSBAND: // navigation band
1707 break;
1708 default:
1709 break;
1710 }
1711
1713
1719 goButtonChecked = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main", L"ShowGoButton", FALSE, TRUE);
1720 SHCheckMenuItem(contextMenu, IDM_TOOLBARS_GOBUTTON, goButtonChecked);
1721
1722 // TODO: use GetSystemMetrics(SM_MENUDROPALIGNMENT) to determine menu alignment
1724 clickLocation.x, clickLocation.y, 0, m_hWnd, NULL);
1725 switch (command)
1726 {
1727 case IDM_TOOLBARS_STANDARDBUTTONS: // standard buttons
1729 break;
1730 case IDM_TOOLBARS_ADDRESSBAR: // address bar
1732 break;
1733 case IDM_TOOLBARS_LINKSBAR: // links
1734 break;
1735 case IDM_TOOLBARS_LOCKTOOLBARS: // lock the toolbars
1737 break;
1738 case IDM_TOOLBARS_CUSTOMIZE: // customize
1740 break;
1743 break;
1744 }
1745
1746 DestroyMenu(contextMenuBar);
1747 return 1;
1748}
1749
1751{
1752 if (wParam != SIZE_MINIMIZED)
1753 {
1756 }
1757 return 1;
1758}
1759
1761{
1762 if ((short)lParam != HTCLIENT || (HWND)wParam != m_hWnd)
1763 {
1764 bHandled = FALSE;
1765 return 0;
1766 }
1768 return 1;
1769}
1770
1771LRESULT CInternetToolbar::OnTipText(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
1772{
1773 CComPtr<IBrowserService> browserService;
1774 CComPtr<ITravelLog> travelLog;
1775 TOOLTIPTEXTW *pTTTW;
1776 UINT nID;
1777 HRESULT hResult;
1778 wchar_t tempString[300];
1779
1780 pTTTW = reinterpret_cast<TOOLTIPTEXTW *>(pNMHDR);
1781 if ((pTTTW->uFlags & TTF_IDISHWND) != 0)
1782 nID = ::GetDlgCtrlID((HWND)pNMHDR->idFrom);
1783 else
1784 nID = (UINT)pNMHDR->idFrom;
1785
1786 if (nID != 0)
1787 {
1788 if (nID == (UINT)IDM_GOTO_BACK || nID == (UINT)IDM_GOTO_FORWARD)
1789 {
1790 // TODO: Should this call QueryService?
1791 hResult = fSite->QueryInterface(IID_PPV_ARG(IBrowserService, &browserService));
1792 hResult = browserService->GetTravelLog(&travelLog);
1793 hResult = travelLog->GetToolTipText(browserService,
1794 (nID == (UINT)IDM_GOTO_BACK) ? TLOG_BACK : TLOG_FORE,
1795 0, tempString, 299);
1796 if (FAILED_UNEXPECTEDLY(hResult))
1797 {
1798 bHandled = FALSE;
1799 return 0;
1800 }
1801 }
1802 else
1803 tempString[0] = 0;
1804 wcsncpy (pTTTW->szText, tempString, sizeof(pTTTW->szText) / sizeof(wchar_t));
1805 ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
1807 return 0;
1808 }
1809 return 0;
1810}
1811
1813{
1814 LRESULT theResult;
1815 HRESULT hResult;
1816
1817 hResult = OnWinEvent((HWND) lParam, uMsg, wParam, lParam, &theResult);
1818
1819 bHandled = hResult == S_OK;
1820
1821 return FAILED_UNEXPECTEDLY(hResult) ? 0 : theResult;
1822}
1824{
1825 NMHDR *notifyHeader;
1826 LRESULT theResult;
1827 HRESULT hResult;
1828
1829 notifyHeader = reinterpret_cast<NMHDR *>(lParam);
1830
1831 hResult = OnWinEvent(notifyHeader->hwndFrom, uMsg, wParam, lParam, &theResult);
1832
1833 bHandled = hResult == S_OK;
1834
1835 return FAILED_UNEXPECTEDLY(hResult) ? 0 : theResult;
1836}
1837
1839{
1840 bHandled = FALSE;
1841 if (fLocked)
1842 return 0;
1843
1844 if (wParam & MK_CONTROL)
1845 return 0;
1846
1847 fSizing = TRUE;
1848
1849 DWORD msgp = GetMessagePos();
1850
1853
1854 RECT rc;
1855 GetWindowRect(&rc);
1856
1857 fStartHeight = rc.bottom - rc.top;
1858
1859 SetCapture();
1860
1861 bHandled = TRUE;
1862 return 0;
1863}
1864
1866{
1867 bHandled = FALSE;
1868 if (!fSizing)
1869 return 0;
1870
1871 DWORD msgp = GetMessagePos();
1872
1873 POINT pt;
1874 pt.x = GET_X_LPARAM(msgp);
1875 pt.y = GET_Y_LPARAM(msgp);
1876
1878
1879 bHandled = TRUE;
1880 return 0;
1881}
1882
1884{
1885 bHandled = FALSE;
1886 if (!fSizing)
1887 return 0;
1888
1889 OnMouseMove(uMsg, wParam, lParam, bHandled);
1890
1891 fSizing = FALSE;
1892
1894
1895 return 0;
1896}
1897
1899{
1900 HRESULT hr;
1901 HWND hwndMenu;
1902
1903 hr = IUnknown_GetWindow(fMenuBar, &hwndMenu);
1905 return 0;
1906
1907 CComPtr<IWinEventHandler> menuWinEventHandler;
1908 hr = fMenuBar->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
1910 return 0;
1911
1912 LRESULT lres;
1913 hr = menuWinEventHandler->OnWinEvent(hwndMenu, uMsg, wParam, lParam, &lres);
1915 return 0;
1916
1917 return lres;
1918}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
Arabic default style
Definition: afstyles.h:94
static int state
Definition: maze.c:121
HWND hWnd
Definition: settings.c:17
#define index(s, c)
Definition: various.h:29
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
#define UNIMPLEMENTED
Definition: debug.h:115
#define WARN(fmt,...)
Definition: debug.h:112
HRESULT CAddressBand_CreateInstance(REFIID riid, void **ppv)
Definition: browseui.cpp:24
HRESULT CBrandBand_CreateInstance(REFIID riid, void **ppv)
Definition: browseui.cpp:51
HRESULT CBandProxy_CreateInstance(REFIID riid, void **ppv)
Definition: browseui.cpp:42
HRESULT CToolsBand_CreateInstance(REFIID riid, void **ppv)
Definition: toolsband.cpp:419
void Release()
Definition: atlcomcli.h:147
void Attach(T *lp)
Definition: atlcomcli.h:156
T * Detach()
Definition: atlcomcli.h:163
CInternetToolbar * fToolbar
virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd)
CComPtr< IUnknown > fContainedBand
virtual HRESULT STDMETHODCALLTYPE OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus)
HRESULT GetRBBandInfo(REBARBANDINFOW &bandInfo)
virtual HRESULT STDMETHODCALLTYPE SetBorderSpaceDW(IUnknown *punkObj, LPCBORDERWIDTHS pbw)
virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
virtual HRESULT STDMETHODCALLTYPE GetBorderDW(IUnknown *punkObj, LPRECT prcBorder)
HRESULT Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags)
DESKBANDINFO fDeskBandInfo
virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode)
virtual HRESULT STDMETHODCALLTYPE RequestBorderSpaceDW(IUnknown *punkObj, LPCBORDERWIDTHS pbw)
HRESULT CommandStateChanged(bool newValue, int commandID)
HRESULT SetState(const GUID *pguidCmdGroup, long commandID, OLECMD *pcmd)
LRESULT OnSetCursor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
HRESULT IsBandVisible(int BandID)
virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd)
CComPtr< IUnknown > fNavigationBar
virtual HRESULT STDMETHODCALLTYPE SetCommandTarget(IUnknown *theTarget, GUID *category, long param14)
virtual HRESULT STDMETHODCALLTYPE OnChange(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
CComPtr< IUnknown > fLogoBar
LRESULT OnTipText(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
HRESULT ReserveBorderSpace(LONG maxHeight=-1)
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
virtual HRESULT STDMETHODCALLTYPE Save(IStream *pStm, BOOL fClearDirty)
virtual HRESULT STDMETHODCALLTYPE Load(IStream *pStm)
virtual HRESULT STDMETHODCALLTYPE InitNew()
virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID)
virtual HRESULT STDMETHODCALLTYPE GetBandSiteInfo(BANDSITEINFO *pbsinfo)
HRESULT LockUnlockToolbars(bool locked)
LRESULT OnQueryDelete(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
CComPtr< IUnknown > fControlsBar
virtual HRESULT STDMETHODCALLTYPE AddBitmap(const GUID *pguidCmdGroup, long param10, long buttonCount, TBADDBITMAP *lParam, long *newIndex, COLORREF param20)
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE ResizeBorderDW(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved)
virtual HRESULT STDMETHODCALLTYPE AddBand(IUnknown *punk)
virtual HRESULT STDMETHODCALLTYPE SendToolbarMsg(const GUID *pguidCmdGroup, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *result)
HRESULT CreateMenuBar(IShellMenu **menuBar)
LRESULT OnForwardToCommandTarget(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE Unknown1()
virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite)
void AddDockItem(IUnknown *newItem, int bandID, int flags)
LRESULT OnLDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE SetBandState(DWORD dwBandID, DWORD dwMask, DWORD dwState)
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo)
CComPtr< IBandProxy > fBandProxy
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
virtual HRESULT STDMETHODCALLTYPE GetBandObject(DWORD dwBandID, REFIID riid, void **ppv)
virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE GetState(const GUID *pguidCmdGroup, long commandID, long *theState)
virtual HRESULT STDMETHODCALLTYPE SetBandSiteInfo(const BANDSITEINFO *pbsinfo)
HRESULT CreateAndInitBandProxy()
virtual HRESULT STDMETHODCALLTYPE GetBitmapSize(long *paramC)
HRESULT ToggleBandVisibility(int BandID)
virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite)
virtual ~CInternetToolbar()
virtual HRESULT STDMETHODCALLTYPE GetButton(const GUID *pguidCmdGroup, long param10, long param14)
LRESULT OnTravelBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
CComPtr< CMenuCallback > fMenuCallback
virtual HRESULT STDMETHODCALLTYPE OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
virtual HRESULT STDMETHODCALLTYPE IsWindowOwner(HWND hWnd)
virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE AddString(const GUID *pguidCmdGroup, HINSTANCE param10, LPCTSTR param14, long *param18)
virtual HRESULT STDMETHODCALLTYPE ShowDW(BOOL fShow)
LRESULT OnUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnWinIniChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnLUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
virtual HRESULT STDMETHODCALLTYPE SetImageList(const GUID *pguidCmdGroup, HIMAGELIST param10, HIMAGELIST param14, HIMAGELIST param18)
virtual HRESULT STDMETHODCALLTYPE AddButtons(const GUID *pguidCmdGroup, long buttonCount, TBBUTTON *buttons)
LRESULT OnQueryInsert(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg)
virtual HRESULT STDMETHODCALLTYPE QueryBand(DWORD dwBandID, IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName)
virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode)
virtual HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize)
LRESULT OnFolders(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE HasFocusIO()
virtual HRESULT STDMETHODCALLTYPE ModifyButton(const GUID *pguidCmdGroup, long param10, long param14)
CComPtr< IShellMenu > fMenuBar
CComPtr< IOleCommandTarget > fCommandTarget
LRESULT OnMenuDropDown(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg)
virtual HRESULT STDMETHODCALLTYPE IsDirty()
CComPtr< IUnknown > fSite
virtual HRESULT STDMETHODCALLTYPE CloseDW(DWORD dwReserved)
LRESULT OnTravelForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnSearch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE RemoveBand(DWORD dwBandID)
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE EnumBands(UINT uBand, DWORD *pdwBandID)
virtual HRESULT STDMETHODCALLTYPE CallbackSM(LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam)
virtual ~CMenuCallback()
HRESULT STDMETHODCALLTYPE GetObject(LPSMDATA psmd, REFIID riid, void **ppvObject)
CComPtr< IShellMenu > fFavoritesMenu
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID *iid, DWORD *pdw)
Definition: atl.c:45
HRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID *iid, DWORD dw)
Definition: atl.c:73
#define IDM_TOOLBARS_LOCKTOOLBARS
Definition: resource.h:33
#define IDM_GOTO_UPONELEVEL
Definition: resource.h:47
#define IDM_TOOLBARS_TEXTLABELS
Definition: resource.h:35
#define IDM_TOOLBARS_STANDARDBUTTONS
Definition: resource.h:30
#define IDM_GOTO_FORWARD
Definition: resource.h:46
#define IDS_HISTORYTEXT
Definition: resource.h:129
#define IDM_EXPLORERBAR_HISTORY
Definition: resource.h:42
#define IDM_CABINET_CONTEXTMENU
Definition: resource.h:87
#define IDM_TOOLBARS_GOBUTTON
Definition: resource.h:36
#define IDM_FAVORITES_EMPTY
Definition: resource.h:52
#define IDM_TOOLBARS_CUSTOMIZE
Definition: resource.h:34
#define IDM_GOTO_BACK
Definition: resource.h:45
#define IDM_TOOLBARS_ADDRESSBAR
Definition: resource.h:31
#define IDM_TOOLBARS_LINKSBAR
Definition: resource.h:32
@ VT_I4
Definition: compat.h:2298
@ VT_INT_PTR
Definition: compat.h:2327
@ VT_BOOL
Definition: compat.h:2306
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3194
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
Definition: ordinal.c:4177
HRESULT WINAPI IUnknown_QueryStatus(IUnknown *lpUnknown, REFGUID pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
Definition: ordinal.c:1041
DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck)
Definition: ordinal.c:1793
HRESULT WINAPI IUnknown_HasFocusIO(IUnknown *lpUnknown)
Definition: ordinal.c:4209
UINT WINAPI SHEnableMenuItem(HMENU hMenu, UINT wItemID, BOOL bEnable)
Definition: ordinal.c:1774
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1494
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1080
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:2974
HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:2918
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1329
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1404
BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR pszSubKey, LPCWSTR pszValue, BOOL fIgnoreHKCU, BOOL fDefault)
Definition: reg.c:770
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define pt(x, y)
Definition: drawing.c:79
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint index
Definition: glext.h:6031
GLenum const GLfloat * params
Definition: glext.h:5645
GLbitfield flags
Definition: glext.h:7161
GLuint64EXT * result
Definition: glext.h:11304
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
virtual HRESULT STDMETHODCALLTYPE EnumNameSpace(ULONG, PULONG)=0
virtual HRESULT STDMETHODCALLTYPE QueryNameSpace(ULONG, LPGUID, IShellFolder **)=0
static HRESULT BindToDesktop(LPCITEMIDLIST pidl, IShellFolder **ppsfResult)
virtual HRESULT STDMETHODCALLTYPE GetNameSpaceID(LPCITEMIDLIST, LPGUID)=0
HRESULT WINAPI SHBindToFolder(LPCITEMIDLIST path, IShellFolder **newFolder)
HRESULT IUnknown_RelayWinEvent(IUnknown *punk, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
HRESULT IUnknown_CloseDW(IUnknown *punk, DWORD dwReserved)
static HRESULT GetFavoritesFolder(IShellFolder **ppsfFavorites, LPITEMIDLIST *ppidl)
HRESULT IUnknown_ShowDW(IUnknown *punk, BOOL fShow)
static const int gFoldersCommandID
static const int gViewsCommandID
static const int gSearchCommandID
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
static const struct bandInfoStruct bandInfo[9]
Definition: layer3.c:95
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define END_COM_MAP()
Definition: atlcom.h:592
if(dx< 0)
Definition: linetemp.h:194
#define RBBS_HIDETITLE
static char * textBuffer
Definition: combo.c:52
static IPrintDialogCallback callback
Definition: printdlg.c:326
static LPOLESTR
Definition: stg_prop.c:27
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static VARIANTARG static DISPID
Definition: ordinal.c:49
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_WRITE
Definition: nt_native.h:1031
#define L(x)
Definition: ntvdm.h:50
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
#define V_INTREF(A)
Definition: oleauto.h:252
const GUID IID_IOleWindow
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_BORDER
Definition: pedump.c:625
#define WS_VISIBLE
Definition: pedump.c:620
long LONG
Definition: pedump.c:60
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:929
#define RBBS_TOPALIGN
Definition: commctrl.h:1500
#define RBSTR_CHANGERECT
Definition: commctrl.h:1596
#define RB_SETBANDINFOW
Definition: commctrl.h:1584
#define RBBS_BREAK
Definition: commctrl.h:1489
struct tagREBARBANDINFOW REBARBANDINFOW
#define RBS_REGISTERDROP
Definition: commctrl.h:1474
#define REBARCLASSNAMEW
Definition: commctrl.h:1463
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1507
#define RB_INSERTBANDW
Definition: commctrl.h:1583
#define RBBS_FIXEDBMP
Definition: commctrl.h:1494
#define TB_SETSTATE
Definition: commctrl.h:1054
#define TBDDRET_DEFAULT
Definition: commctrl.h:1424
#define RBS_BANDBORDERS
Definition: commctrl.h:1472
#define RBBIM_CHILD
Definition: commctrl.h:1506
#define TB_ADDSTRINGW
Definition: commctrl.h:1132
#define RBS_AUTOSIZE
Definition: commctrl.h:1475
#define RBBS_FIXEDSIZE
Definition: commctrl.h:1490
#define RBBS_NOGRIPPER
Definition: commctrl.h:1497
#define RB_GETBANDINFOW
Definition: commctrl.h:1609
#define TOOLTIPTEXTW
Definition: commctrl.h:1884
#define TB_GETRECT
Definition: commctrl.h:1153
#define TTF_IDISHWND
Definition: commctrl.h:1764
#define CCS_NODIVIDER
Definition: commctrl.h:2248
#define CCS_TOP
Definition: commctrl.h:2242
#define TB_CUSTOMIZE
Definition: commctrl.h:1130
#define CLR_DEFAULT
Definition: commctrl.h:320
#define RB_IDTOINDEX
Definition: commctrl.h:1588
#define RBBS_HIDDEN
Definition: commctrl.h:1492
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define RBBIM_ID
Definition: commctrl.h:1510
#define RBBIM_LPARAM
Definition: commctrl.h:1512
#define RB_SIZETORECT
Definition: commctrl.h:1598
#define RBS_VARHEIGHT
Definition: commctrl.h:1471
#define CCS_NOPARENTALIGN
Definition: commctrl.h:2246
#define TB_GETSTATE
Definition: commctrl.h:1055
#define RBBIM_STYLE
Definition: commctrl.h:1502
#define RB_HITTEST
Definition: commctrl.h:1581
#define RBBIM_TEXT
Definition: commctrl.h:1504
#define RBBIM_COLORS
Definition: commctrl.h:1503
#define RBBS_USECHEVRON
Definition: commctrl.h:1498
#define RBS_DBLCLKTOGGLE
Definition: commctrl.h:1477
#define RB_GETBANDCOUNT
Definition: commctrl.h:1585
#define TBSTATE_CHECKED
Definition: commctrl.h:972
#define RBBS_GRIPPERALWAYS
Definition: commctrl.h:1496
#define RBBS_VARIABLEHEIGHT
Definition: commctrl.h:1495
#define RBBIM_IDEALSIZE
Definition: commctrl.h:1511
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define long
Definition: qsort.c:33
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
DWORD LCID
Definition: nls.h:13
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:197
#define memset(x, y, z)
Definition: compat.h:39
#define CMergedFolder_CreateInstance
Definition: shellmenu.h:93
#define CMenuBand_CreateInstance
Definition: shellmenu.h:81
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
HRESULT hr
Definition: shlfolder.c:183
#define SID_SShellBrowser
Definition: shlguid.h:128
#define CGID_MenuBand
#define CSIDL_FAVORITES
Definition: shlobj.h:2031
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2055
#define FCIDM_MENU_FAVORITES
Definition: shlobj.h:566
#define TLOG_FORE
Definition: shlobj.h:2590
#define TLMENUF_BACK
Definition: shlobj.h:2594
#define TLMENUF_FORE
Definition: shlobj.h:2595
#define TLOG_BACK
Definition: shlobj.h:2589
@ SMIM_ICON
Definition: shobjidl.idl:2661
@ SMIM_FLAGS
Definition: shobjidl.idl:2660
@ DBID_BANDINFOCHANGED
Definition: shobjidl.idl:2410
@ SMIF_DROPCASCADE
Definition: shobjidl.idl:2677
@ SMIF_TRACKPOPUP
Definition: shobjidl.idl:2680
#define FCIDM_SHVIEW_AUTOARRANGE
Definition: shresdef.h:818
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
HWND buttons[5]
Definition: sndrec32.cpp:40
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
Definition: scsiwmi.h:51
LONG y
Definition: windef.h:330
LONG x
Definition: windef.h:329
COLORREF crBkgnd
Definition: shobjidl.idl:2382
WCHAR wszTitle[256]
Definition: shobjidl.idl:2380
UINT_PTR idFrom
Definition: winuser.h:3148
HWND hwndFrom
Definition: winuser.h:3147
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
IUnknown * punk
Definition: shobjidl.idl:2629
PUITEMID_CHILD pidlItem
Definition: shobjidl.idl:2631
IShellFolder * psf
Definition: shobjidl.idl:2632
DWORD dwMask
Definition: shobjidl.idl:2642
DWORD dwFlags
Definition: shobjidl.idl:2644
HANDLE lEvent
Definition: tftpd.cpp:56
uint32_t * PULONG
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
#define MAKELONG(a, b)
Definition: typedefs.h:249
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define ITID_LINKSBANDSHOWN
Definition: undocshell.h:673
#define ITID_TOOLBARBANDSHOWN
Definition: undocshell.h:671
#define ITBBID_ADDRESSBAND
Definition: undocshell.h:665
#define SMC_EXEC
Definition: undocshell.h:644
#define ITBBID_TOOLSBAND
Definition: undocshell.h:664
#define ITBBID_BRANDBAND
Definition: undocshell.h:663
#define ITID_AUTOHIDEENABLED
Definition: undocshell.h:675
#define ITID_TEXTLABELS
Definition: undocshell.h:670
#define ITID_MENUBANDSHOWN
Definition: undocshell.h:674
#define ITID_CUSTOMIZEENABLED
Definition: undocshell.h:676
#define ITID_ADDRESSBANDSHOWN
Definition: undocshell.h:672
#define ITID_TOOLBARLOCKED
Definition: undocshell.h:677
#define ITBBID_MENUBAND
Definition: undocshell.h:662
#define _T(x)
Definition: vfdio.h:22
#define DISPID_NAVIGATECOMPLETE2
Definition: webchild.h:54
#define DISPID_BEFORENAVIGATE
Definition: webchild.h:35
#define DISPID_COMMANDSTATECHANGE
Definition: webchild.h:40
#define DISPID_DOWNLOADCOMPLETE
Definition: webchild.h:39
#define DISPID_DOWNLOADBEGIN
Definition: webchild.h:41
#define DISPID_DOCUMENTCOMPLETE
Definition: webchild.h:61
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2754
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
#define SubclassWindow(hwnd, lpfn)
Definition: windowsx.h:542
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
#define S_FALSE
Definition: winerror.h:2357
#define E_POINTER
Definition: winerror.h:2365
#define GetObject
Definition: wingdi.h:4468
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegCreateKeyEx
Definition: winreg.h:501
HWND WINAPI SetCapture(_In_ HWND hWnd)
#define CreateWindowEx
Definition: winuser.h:5745
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:846
#define SWP_NOACTIVATE
Definition: winuser.h:1232
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
DWORD WINAPI GetMessagePos(void)
Definition: message.c:1351
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WS_EX_RIGHTSCROLLBAR
Definition: winuser.h:401
#define TPM_RIGHTBUTTON
Definition: winuser.h:2370
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOMOVE
Definition: winuser.h:1234
#define WM_COMMAND
Definition: winuser.h:1730
#define MF_STRING
Definition: winuser.h:138
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define SWP_NOSIZE
Definition: winuser.h:1235
#define SIZE_MINIMIZED
Definition: winuser.h:2496
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define TPM_TOPALIGN
Definition: winuser.h:2373
#define IDC_SIZENS
Definition: winuser.h:690
#define HWND_TOP
Definition: winuser.h:1197
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MK_CONTROL
Definition: winuser.h:2360
#define MF_SEPARATOR
Definition: winuser.h:137
#define TPM_LEFTALIGN
Definition: winuser.h:2367
#define HTCLIENT
Definition: winuser.h:2465
#define SendMessage
Definition: winuser.h:5833
#define LoadCursor
Definition: winuser.h:5802
#define LoadMenu
Definition: winuser.h:5807
#define WS_EX_LTRREADING
Definition: winuser.h:393
HWND WINAPI GetParent(_In_ HWND)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define SWP_NOOWNERZORDER
Definition: winuser.h:1239
int WINAPI GetDlgCtrlID(_In_ HWND)
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define TPM_RETURNCMD
Definition: winuser.h:2377
#define SWP_NOZORDER
Definition: winuser.h:1237
BOOL WINAPI DestroyWindow(_In_ HWND)
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define WS_EX_LEFT
Definition: winuser.h:391
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI AppendMenuW(_In_ HMENU, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
char TCHAR
Definition: xmlstorage.h:189
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const CHAR * LPCTSTR
Definition: xmlstorage.h:193