ReactOS 0.4.15-dev-8434-g155a7c7
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 static const UINT SIG = ('R' << 0) | ('O' << 8) | ('S' << 16) | (('i' ^ 't' ^ 'b') << 24);
82 UINT Signature; // Note: Windows has something else here (12 bytes)
86 UINT Throbber : 1; // toastytech.com/files/throboff.html
87 UINT Menubar : 1; // ..\Explorer\Advanced\AlwaysShowMenus for NT6?
88 // Note: Windows 8/10 stores the Ribbon state in ..\Explorer\Ribbon
89};
90
92{
93 CComPtr<IWinEventHandler> menuWinEventHandler;
94 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
95 if (FAILED_UNEXPECTEDLY(hResult))
96 return hResult;
97 hResult = menuWinEventHandler->IsWindowOwner(hWnd);
98 if (FAILED_UNEXPECTEDLY(hResult))
99 return hResult;
100 if (hResult == S_OK)
101 return menuWinEventHandler->OnWinEvent(hWnd, uMsg, wParam, lParam, theResult);
102 return S_FALSE;
103}
104
106{
107 CComPtr<IDockingWindow> dockingWindow;
108 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
109 if (FAILED_UNEXPECTEDLY(hResult))
110 return hResult;
111 hResult = dockingWindow->ShowDW(fShow);
112 if (FAILED_UNEXPECTEDLY(hResult))
113 return hResult;
114 return S_OK;
115}
116
118{
119 CComPtr<IDockingWindow> dockingWindow;
120 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
121 if (FAILED_UNEXPECTEDLY(hResult))
122 return hResult;
123 hResult = dockingWindow->CloseDW(dwReserved);
124 if (FAILED_UNEXPECTEDLY(hResult))
125 return hResult;
126 return S_OK;
127}
128
129class CInternetToolbar;
130
132 public CComObjectRootEx<CComMultiThreadModelNoCS>,
133 public IDockingWindowSite,
134 public IInputObjectSite,
135 public IOleCommandTarget,
136 public IServiceProvider
137{
138public:
139 enum {
144 ITF_FIXEDSIZE = 16
145 };
146private:
147 CComPtr<IUnknown> fContainedBand; // the band inside us
148 CInternetToolbar *fToolbar; // our browser
152public:
154private:
156 // fields of DESKBANDINFO must be preserved between calls to GetBandInfo
158public:
159 CDockSite();
160 ~CDockSite();
161 HRESULT Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags);
163 IUnknown* GetContainedBand() const { return fContainedBand.p; } // Not ref. counted
164private:
165
166 // *** IOleWindow methods ***
167 STDMETHOD(GetWindow)(HWND *lphwnd) override;
168 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override;
169
170 // *** IDockingWindow methods ***
171 STDMETHOD(GetBorderDW)(IUnknown* punkObj, LPRECT prcBorder) override;
172 STDMETHOD(RequestBorderSpaceDW)(IUnknown* punkObj, LPCBORDERWIDTHS pbw) override;
173 STDMETHOD(SetBorderSpaceDW)(IUnknown* punkObj, LPCBORDERWIDTHS pbw) override;
174
175 // *** IInputObjectSite specific methods ***
176 STDMETHOD(OnFocusChangeIS)(IUnknown *punkObj, BOOL fSetFocus) override;
177
178 // *** IOleCommandTarget specific methods ***
179 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds,
180 OLECMD prgCmds[ ], OLECMDTEXT *pCmdText) override;
181 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID,
182 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override;
183
184 // *** IServiceProvider methods ***
185 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override;
186
189 COM_INTERFACE_ENTRY_IID(IID_IDockingWindowSite, IDockingWindowSite)
190 COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite, IInputObjectSite)
191 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
192 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
194};
195
197{
198 fToolbar = NULL;
201 fBandID = 0;
202 fFlags = 0;
203 fInitialized = false;
204 memset(&fDeskBandInfo, 0, sizeof(fDeskBandInfo));
205}
206
208{
209}
210
211HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags)
212{
213 TCHAR textBuffer[40];
215 HRESULT hResult;
216
217 fContainedBand = containedBand;
218 fToolbar = browser;
220 fBandID = bandID;
221 fFlags = flags;
222 hResult = IUnknown_SetSite(containedBand, static_cast<IOleWindow *>(this));
223 if (FAILED_UNEXPECTEDLY(hResult))
224 return hResult;
225 hResult = IUnknown_GetWindow(containedBand, &fChildWindow);
226 if (FAILED_UNEXPECTEDLY(hResult))
227 return hResult;
228
229 memset(&bandInfo, 0, sizeof(bandInfo));
230 bandInfo.cbSize = sizeof(bandInfo);
231 bandInfo.lpText = textBuffer;
232 bandInfo.cch = sizeof(textBuffer) / sizeof(TCHAR);
233 hResult = GetRBBandInfo(bandInfo);
234
237 fInitialized = true;
238 return S_OK;
239}
240
242{
243 CComPtr<IDeskBand> deskBand;
244 HRESULT hResult;
245
246 hResult = fContainedBand->QueryInterface(IID_PPV_ARG(IDeskBand, &deskBand));
247 if (FAILED_UNEXPECTEDLY(hResult))
248 return hResult;
249
250 fDeskBandInfo.dwMask = DBIM_BKCOLOR | DBIM_MODEFLAGS | DBIM_TITLE | DBIM_ACTUAL |
251 DBIM_INTEGRAL | DBIM_MAXSIZE | DBIM_MINSIZE;
252 hResult = deskBand->GetBandInfo(fBandID, 0, &fDeskBandInfo);
253 // result of call is ignored
254
257
258 bandInfo.fStyle = RBBS_FIXEDBMP;
259 if (fDeskBandInfo.dwModeFlags & DBIMF_VARIABLEHEIGHT)
261 if (fDeskBandInfo.dwModeFlags & DBIMF_USECHEVRON)
262 bandInfo.fStyle |= RBBS_USECHEVRON;
263 if (fDeskBandInfo.dwModeFlags & DBIMF_BREAK)
264 bandInfo.fStyle |= RBBS_BREAK;
265 if (fDeskBandInfo.dwModeFlags & DBIMF_TOPALIGN)
266 bandInfo.fStyle |= RBBS_TOPALIGN;
268 bandInfo.fStyle |= RBBS_NOGRIPPER;
269 if (fFlags & ITF_NOTITLE)
270 bandInfo.fStyle |= RBBS_HIDETITLE;
273 if (fFlags & ITF_FIXEDSIZE)
274 bandInfo.fStyle |= RBBS_FIXEDSIZE;
275
276 if (fDeskBandInfo.dwModeFlags & DBIMF_BKCOLOR)
277 {
278 bandInfo.fMask |= RBBIM_COLORS;
279 bandInfo.clrFore = CLR_DEFAULT;
281 }
283 bandInfo.hwndChild = fChildWindow;
284 bandInfo.cxMinChild = fDeskBandInfo.ptMinSize.x;
285 bandInfo.cyMinChild = fDeskBandInfo.ptMinSize.y;
286 bandInfo.wID = fBandID;
288 bandInfo.cyMaxChild = fDeskBandInfo.ptMaxSize.y;
289 bandInfo.cyIntegral = fDeskBandInfo.ptIntegral.y;
291 bandInfo.lParam = reinterpret_cast<LPARAM>(static_cast<CDockSite*>(this));
292 return S_OK;
293}
294
296{
297 if (lphwnd == NULL)
298 return E_POINTER;
299 *lphwnd = fRebarWindow;
300 return S_OK;
301}
302
304{
305 return E_NOTIMPL;
306}
307
309{
310 return E_NOTIMPL;
311}
312
314{
315 return E_NOTIMPL;
316}
317
319{
320 return E_NOTIMPL;
321}
322
324{
325 return E_NOTIMPL;
326}
327
329 OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
330{
331 return E_NOTIMPL;
332}
333
334HRESULT STDMETHODCALLTYPE CDockSite::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt,
335 VARIANT *pvaIn, VARIANT *pvaOut)
336{
337 TCHAR textBuffer[40];
339 int index;
340 HRESULT hResult;
341
342 if (IsEqualIID(*pguidCmdGroup, CGID_DeskBand))
343 {
344 switch (nCmdID)
345 {
347 if (fInitialized == false)
348 return S_OK;
349 if (V_VT(pvaIn) != VT_I4)
350 return E_INVALIDARG;
351 if (V_I4(pvaIn) != fBandID)
352 return E_FAIL;
353 // deskband information changed
354 // call GetBandInfo and refresh information in rebar
355 memset(&bandInfo, 0, sizeof(bandInfo));
356 bandInfo.cbSize = sizeof(bandInfo);
357 bandInfo.lpText = textBuffer;
358 bandInfo.cch = sizeof(textBuffer) / sizeof(TCHAR);
359 hResult = GetRBBandInfo(bandInfo);
360 if (FAILED_UNEXPECTEDLY(hResult))
361 return hResult;
364 return S_OK;
365 }
366 }
367 return E_FAIL;
368}
369
371{
372 if (IsEqualIID(guidService, SID_SMenuBandParent))
373 return this->QueryInterface(riid, ppvObject);
374
375 return fToolbar->QueryService(guidService, riid, ppvObject);
376}
377
379{
380}
381
383{
384}
385
387{
388 HRESULT hr;
389 CComPtr<IShellFolder> psfDesktop;
390
391 *ppsfResult = NULL;
392
393 hr = SHGetDesktopFolder(&psfDesktop);
394 if (FAILED(hr))
395 return hr;
396
397 hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, ppsfResult));
398
399 return hr;
400}
401
402static HRESULT GetFavoritesFolder(IShellFolder ** ppsfFavorites, LPITEMIDLIST * ppidl)
403{
404 HRESULT hr;
405 LPITEMIDLIST pidlUserFavorites;
406 LPITEMIDLIST pidlCommonFavorites;
407 CComPtr<IShellFolder> psfUserFavorites;
408 CComPtr<IShellFolder> psfCommonFavorites;
410
411 if (ppsfFavorites)
412 *ppsfFavorites = NULL;
413
414 if (ppidl)
415 *ppidl = NULL;
416
417 hr = SHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &pidlUserFavorites);
418 if (FAILED(hr))
419 {
420 WARN("Failed to get the USER favorites folder. Trying to run with just the COMMON one.\n");
421
424 return hr;
425
426 TRACE("COMMON favorites obtained.\n");
427 *ppidl = pidlCommonFavorites;
428 hr = BindToDesktop(pidlCommonFavorites, ppsfFavorites);
429 return hr;
430 }
431
434 {
435 WARN("Failed to get the COMMON favorites folder. Will use only the USER contents.\n");
436 *ppidl = pidlCommonFavorites;
437 hr = BindToDesktop(pidlUserFavorites, ppsfFavorites);
438 return hr;
439 }
440
441 TRACE("Both COMMON and USER favorites folders obtained, merging them...\n");
442
443 hr = BindToDesktop(pidlUserFavorites, &psfUserFavorites);
445 return hr;
446
447 hr = BindToDesktop(pidlCommonFavorites, &psfCommonFavorites);
449 return hr;
450
451 hr = CMergedFolder_CreateInstance(IID_PPV_ARG(IAugmentedShellFolder, &pasf));
453 {
454 *ppsfFavorites = psfUserFavorites.Detach();
455 *ppidl = pidlUserFavorites;
456 ILFree(pidlCommonFavorites);
457 return hr;
458 }
459
460 hr = pasf->AddNameSpace(NULL, psfUserFavorites, pidlUserFavorites, 0xFF00);
462 return hr;
463
464 hr = pasf->AddNameSpace(NULL, psfCommonFavorites, pidlCommonFavorites, 0);
466 return hr;
467
468 hr = pasf->QueryInterface(IID_PPV_ARG(IShellFolder, ppsfFavorites));
469 pasf.Release();
470
471 // TODO: obtain the folder's PIDL
472
473 ILFree(pidlCommonFavorites);
474 ILFree(pidlUserFavorites);
475
476 return hr;
477}
478
480{
481 CComPtr<IShellMenu> parentMenu;
482 CComPtr<IShellMenu> newMenu;
483 CComPtr<IShellFolder> favoritesFolder;
484 LPITEMIDLIST favoritesPIDL;
485 HWND ownerWindow;
486 HMENU parentHMenu;
487 HMENU favoritesHMenu;
488 HKEY orderRegKey;
489 DWORD disposition;
490 HRESULT hResult;
491 static const TCHAR szFavoritesKey[] =
492 _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MenuOrder\\Favorites");
493
494 if (!IsEqualIID(riid, IID_IShellMenu))
495 return E_FAIL;
496 if (psmd->uId != FCIDM_MENU_FAVORITES)
497 return E_FAIL;
498
499 // create favorites menu
500 hResult = psmd->punk->QueryInterface(IID_PPV_ARG(IShellMenu, &parentMenu));
501 if (FAILED_UNEXPECTEDLY(hResult))
502 return hResult;
503 hResult = parentMenu->GetMenu(&parentHMenu, &ownerWindow, NULL);
504 if (FAILED_UNEXPECTEDLY(hResult))
505 return hResult;
506 favoritesHMenu = GetSubMenu(parentHMenu, 3);
507 if (favoritesHMenu == NULL)
508 return E_FAIL;
509
510 if (fFavoritesMenu.p == NULL)
511 {
512 hResult = CMenuBand_CreateInstance(IID_PPV_ARG(IShellMenu, &newMenu));
513 if (FAILED_UNEXPECTEDLY(hResult))
514 return hResult;
515 hResult = newMenu->Initialize(this, FCIDM_MENU_FAVORITES, -1, SMINIT_VERTICAL | SMINIT_CACHED);
516 if (FAILED_UNEXPECTEDLY(hResult))
517 return hResult;
518
519 RegCreateKeyEx(HKEY_CURRENT_USER, szFavoritesKey,
520 0, NULL, 0, KEY_READ | KEY_WRITE, NULL, &orderRegKey, &disposition);
521
522 hResult = GetFavoritesFolder(&favoritesFolder, &favoritesPIDL);
523 if (FAILED_UNEXPECTEDLY(hResult))
524 return hResult;
525
526 hResult = newMenu->SetShellFolder(favoritesFolder, favoritesPIDL, orderRegKey, SMSET_BOTTOM | SMINIT_CACHED | SMINV_ID);
527 if (favoritesPIDL)
528 ILFree(favoritesPIDL);
529
530 if (FAILED(hResult))
531 return hResult;
532
533 fFavoritesMenu = newMenu;
534 }
535
536 hResult = fFavoritesMenu->SetMenu(favoritesHMenu, ownerWindow, SMSET_TOP | SMSET_DONTOWN);
537 if (FAILED_UNEXPECTEDLY(hResult))
538 return hResult;
539
540 return fFavoritesMenu->QueryInterface(riid, ppvObject);
541}
542
544{
545 switch (uMsg)
546 {
547 case SMC_INITMENU:
548 break;
549 case SMC_CREATE:
550 break;
551 case SMC_EXITMENU:
552 break;
553 case SMC_GETINFO:
554 {
555 SMINFO *infoPtr = reinterpret_cast<SMINFO *>(lParam);
556 if ((infoPtr->dwMask & SMIM_FLAGS) != 0)
557 {
558 if (psmd->uId == FCIDM_MENU_FAVORITES)
559 {
560 infoPtr->dwFlags |= SMIF_DROPCASCADE;
561 }
562 else
563 {
564 infoPtr->dwFlags |= SMIF_TRACKPOPUP;
565 }
566 }
567 if ((infoPtr->dwMask & SMIM_ICON) != 0)
568 infoPtr->iIcon = -1;
569 return S_OK;
570 }
571 case SMC_GETSFINFO:
572 break;
573 case SMC_GETOBJECT:
574 return GetObject(psmd, *reinterpret_cast<IID *>(wParam), reinterpret_cast<void **>(lParam));
575 case SMC_GETSFOBJECT:
576 break;
577 case SMC_EXEC:
578 PostMessageW(psmd->hwnd, WM_COMMAND, psmd->uId, 0);
579 break;
580 case SMC_SFEXEC:
581 SHInvokeDefaultCommand(psmd->hwnd, psmd->psf, psmd->pidlItem);
582 break;
583 case SMC_SFSELECTITEM:
584 break;
585 case 13:
586 // return tooltip
587 break;
588 case SMC_REFRESH:
589 break;
590 case SMC_DEMOTE:
591 break;
592 case SMC_PROMOTE:
593 break;
594 case 0x13:
595 break;
596 case SMC_DEFAULTICON:
597 break;
598 case SMC_NEWITEM:
599 break;
600 case SMC_CHEVRONEXPAND:
601 break;
602 case SMC_DISPLAYCHEVRONTIP:
603 break;
604 case SMC_SETSFOBJECT:
605 break;
606 case SMC_SHCHANGENOTIFY:
607 break;
608 case SMC_CHEVRONGETTIP:
609 break;
610 case SMC_SFDDRESTRICTED:
611 break;
612 case 0x35:
613 break;
614 case 49:
615 break;
616 case 0x10000000:
617 break;
618 }
619 return S_FALSE;
620}
621
623{
629 fAdviseCookie = 0;
630 pSettings = NULL;
632}
633
635{
636}
637
638void CInternetToolbar::AddDockItem(IUnknown *newItem, int bandID, int flags)
639{
640 CComPtr<CDockSite> newSite;
641
642 newSite = new CComObject<CDockSite>;
643 newSite->Initialize(newItem, this, fMainReBar, bandID, flags);
644}
645
647{
648 REBARBANDINFOW rbbi;
649 rbbi.cbSize = sizeof(rbbi);
650 rbbi.fMask = RBBIM_ID | RBBIM_LPARAM;
651 rbbi.cch = 0;
654 *pBandId = rbbi.wID;
655 if (!rbbi.lParam)
656 return E_UNEXPECTED;
657 *ppUnkBand = ((CDockSite*)(rbbi.lParam))->GetContainedBand(); // Not ref. counted
658 return *ppUnkBand ? S_OK : S_FALSE;
659}
660
662{
663 CComPtr<IDockingWindowSite> dockingWindowSite;
664 RECT availableBorderSpace;
665
666 HRESULT hResult = fSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &dockingWindowSite));
667 if (FAILED_UNEXPECTEDLY(hResult))
668 return hResult;
669 hResult = dockingWindowSite->GetBorderDW(static_cast<IDockingWindow *>(this), &availableBorderSpace);
670 if (FAILED_UNEXPECTEDLY(hResult))
671 return hResult;
672
673 if (maxHeight && availableBorderSpace.bottom - availableBorderSpace.top > maxHeight)
674 {
675 availableBorderSpace.bottom = availableBorderSpace.top + maxHeight;
676 }
677
678 return ResizeBorderDW(&availableBorderSpace, fSite, FALSE);
679}
680
682{
683 CComPtr<IShellMenu> menubar;
685 VARIANT menuOut;
686 HWND ownerWindow;
687 HRESULT hResult;
688
689 if (!pMenuBar)
690 return E_POINTER;
691
692 *pMenuBar = NULL;
693
694 hResult = CMenuBand_CreateInstance(IID_PPV_ARG(IShellMenu, &menubar));
695 if (FAILED_UNEXPECTEDLY(hResult))
696 return hResult;
697
698 hResult = fMenuCallback->QueryInterface(IID_PPV_ARG(IShellMenuCallback, &callback));
699 if (FAILED_UNEXPECTEDLY(hResult))
700 return hResult;
701
702 hResult = menubar->Initialize(callback, -1, ANCESTORDEFAULT, SMINIT_HORIZONTAL | SMINIT_TOPLEVEL);
703 if (FAILED_UNEXPECTEDLY(hResult))
704 return hResult;
705
706 // Set Menu
707 {
708 hResult = IUnknown_Exec(fSite, CGID_Explorer, 0x35, 0, NULL, &menuOut);
709 if (FAILED_UNEXPECTEDLY(hResult))
710 return hResult;
711
712 if (V_VT(&menuOut) != VT_INT_PTR || V_INTREF(&menuOut) == NULL)
713 return E_FAIL;
714
715 hResult = IUnknown_GetWindow(fSite, &ownerWindow);
716 if (FAILED_UNEXPECTEDLY(hResult))
717 return hResult;
718
719 HMENU hMenuBar = (HMENU) V_INTREF(&menuOut);
720
721 // FIXME: Figure out the proper way to do this.
722 HMENU hMenuFavs = GetSubMenu(hMenuBar, 3);
723 if (hMenuFavs)
724 {
726 }
727
728 hResult = menubar->SetMenu(hMenuBar, ownerWindow, SMSET_DONTOWN);
729 if (FAILED_UNEXPECTEDLY(hResult))
730 return hResult;
731 }
732
733 hResult = IUnknown_Exec(menubar, CGID_MenuBand, 3, 1, NULL, NULL);
734 if (FAILED_UNEXPECTEDLY(hResult))
735 return hResult;
736
737 *pMenuBar = menubar.Detach();
738
739 return S_OK;
740}
741
743{
744 if (locked != !!pSettings->fLocked)
745 {
746 pSettings->fLocked = (BOOL)locked;
747 pSettings->Save();
749 }
750 return S_OK;
751}
752
754{
755 REBARBANDINFOW rebarBandInfo;
756 int bandCount;
757 CDockSite *dockSite;
758
759 rebarBandInfo.cbSize = sizeof(rebarBandInfo);
760 rebarBandInfo.fMask = RBBIM_STYLE | RBBIM_LPARAM;
761 bandCount = (int)SendMessage(fMainReBar, RB_GETBANDCOUNT, 0, 0);
762 for (INT x = 0; x < bandCount; x++)
763 {
764 SendMessage(fMainReBar, RB_GETBANDINFOW, x, (LPARAM)&rebarBandInfo);
765 dockSite = reinterpret_cast<CDockSite *>(rebarBandInfo.lParam);
766 if (dockSite != NULL)
767 {
768 rebarBandInfo.fStyle &= ~(RBBS_NOGRIPPER | RBBS_GRIPPERALWAYS);
769 if ((dockSite->fFlags & CDockSite::ITF_NOGRIPPER) || pSettings->fLocked)
770 rebarBandInfo.fStyle |= RBBS_NOGRIPPER;
772 rebarBandInfo.fStyle |= RBBS_GRIPPERALWAYS;
773 SendMessage(fMainReBar, RB_SETBANDINFOW, x, (LPARAM)&rebarBandInfo);
774 }
775 }
777}
778
779HRESULT CInternetToolbar::SetState(const GUID *pguidCmdGroup, long commandID, OLECMD* pcmd)
780{
781 long state = 0;
782 if (pcmd->cmdf & OLECMDF_ENABLED)
784 if (pcmd->cmdf & OLECMDF_LATCHED)
786 return SetState(pguidCmdGroup, commandID, state);
787}
788
790{
791 HRESULT hResult;
792
793 hResult = S_OK;
794 switch (commandID)
795 {
796 case -1:
797 // loop through buttons
798 //for buttons in CLSID_CommonButtons
799 // if up, QueryStatus for up state and update it
800 //
801 //for buttons in fCommandCategory, update with QueryStatus of fCommandTarget
802
803 OLECMD commandList[4];
804 commandList[0].cmdID = 0x1c;
805 commandList[1].cmdID = 0x1d;
806 commandList[2].cmdID = 0x1e;
807 commandList[3].cmdID = 0x23;
808 IUnknown_QueryStatus(fSite, CGID_Explorer, 4, commandList, NULL);
809 SetState(&CLSID_CommonButtons, gSearchCommandID, &commandList[0]);
810 SetState(&CLSID_CommonButtons, gFoldersCommandID, &commandList[3]);
811 //SetState(&CLSID_CommonButtons, gFavoritesCommandID, &commandList[2]);
812 //SetState(&CLSID_CommonButtons, gHistoryCommandID, &commandList[1]);
813
814 break;
815 case 1:
816 // forward
817 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_FORWARD, newValue ? TBSTATE_ENABLED : 0);
818 break;
819 case 2:
820 // back
821 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_BACK, newValue ? TBSTATE_ENABLED : 0);
822 break;
823 case 3:
824 // up
825 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_UPONELEVEL, newValue ? TBSTATE_ENABLED : 0);
826 break;
827 }
828 return hResult;
829}
830
832{
833 CComPtr<IServiceProvider> serviceProvider;
834 HRESULT hResult;
835
836 hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider));
837 if (FAILED_UNEXPECTEDLY(hResult))
838 return hResult;
839 hResult = serviceProvider->QueryService(SID_IBandProxy, IID_PPV_ARG(IBandProxy, &fBandProxy));
840 if (FAILED_UNEXPECTEDLY(hResult))
841 {
842 hResult = CBandProxy_CreateInstance(IID_PPV_ARG(IBandProxy, &fBandProxy));
843 if (FAILED_UNEXPECTEDLY(hResult))
844 return hResult;
845 hResult = fBandProxy->SetSite(fSite);
846 if (FAILED_UNEXPECTEDLY(hResult))
847 return hResult;
848 }
849 return S_OK;
850}
851
853{
854 return E_NOTIMPL;
855}
856
858{
860
861 if (fMenuBar)
863 if (hr != S_FALSE)
864 return hr;
865
866 if (fControlsBar)
868 if (hr != S_FALSE)
869 return hr;
870
871 if (fNavigationBar)
873 if (hr != S_FALSE)
874 return hr;
875
876 return S_FALSE;
877}
878
880{
882
883 if (fMenuBar)
885 if (hr == S_OK)
886 return hr;
887
888 if (fControlsBar)
890 if (hr == S_OK)
891 return hr;
892
893 if (fNavigationBar)
895 if (hr == S_OK)
896 return hr;
897
898 return S_FALSE;
899}
900
902{
903 if (lphwnd == NULL)
904 return E_POINTER;
905 *lphwnd = m_hWnd;
906 return S_OK;
907}
908
910{
911 return E_NOTIMPL;
912}
913
915{
916 HRESULT hResult;
917
918 // show the bar here
919 if (fShow)
920 {
921 hResult = ReserveBorderSpace();
922 if (FAILED_UNEXPECTEDLY(hResult))
923 return hResult;
924 }
925
926 // TODO: Why should showing the IDockingWindow change all bands? Related to CORE-17236 and CORE-19659.
927 int id;
928 IUnknown *pUnk;
929 for (UINT i = 0; SUCCEEDED(EnumBands(i, &id, &pUnk)); ++i)
930 {
931 if (!pUnk)
932 continue;
933 BOOL visible = fShow && IsBandVisible(id) != S_FALSE;
934 hResult = IUnknown_ShowDW(pUnk, visible);
935 FAILED_UNEXPECTEDLY(hResult);
936 }
937 return S_OK;
938}
939
941{
942 HRESULT hResult;
943
944 if (fMenuBar)
945 {
947 if (FAILED_UNEXPECTEDLY(hResult))
948 return hResult;
949 ReleaseCComPtrExpectZero(fMenuBar);
950 }
951 if (fControlsBar)
952 {
954 if (FAILED_UNEXPECTEDLY(hResult))
955 return hResult;
956 ReleaseCComPtrExpectZero(fControlsBar);
957 }
958 if (fNavigationBar)
959 {
961 if (FAILED_UNEXPECTEDLY(hResult))
962 return hResult;
963 ReleaseCComPtrExpectZero(fNavigationBar);
964 }
965 if (fLogoBar)
966 {
968 if (FAILED_UNEXPECTEDLY(hResult))
969 return hResult;
970 ReleaseCComPtrExpectZero(fLogoBar);
971 }
972
973 SetSite(NULL);
974 return S_OK;
975}
976
978 IUnknown *punkToolbarSite, BOOL fReserved)
979{
980 RECT neededBorderSpace;
981 RECT availableBorderSpace = *prcBorder;
982
983 SendMessage(fMainReBar, RB_SIZETORECT, RBSTR_CHANGERECT, reinterpret_cast<LPARAM>(&availableBorderSpace));
984
985 // RBSTR_CHANGERECT does not seem to set the proper size in the rect.
986 // Let's make sure we fetch the actual size properly.
987 ::GetWindowRect(fMainReBar, &availableBorderSpace);
988 neededBorderSpace.left = 0;
989 neededBorderSpace.top = availableBorderSpace.bottom - availableBorderSpace.top;
990 if (!pSettings->fLocked)
991 neededBorderSpace.top += 3;
992 neededBorderSpace.right = 0;
993 neededBorderSpace.bottom = 0;
994
995 CComPtr<IDockingWindowSite> dockingWindowSite;
996
997 HRESULT hResult = fSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &dockingWindowSite));
998 if (FAILED_UNEXPECTEDLY(hResult))
999 return hResult;
1000
1001 hResult = dockingWindowSite->RequestBorderSpaceDW(static_cast<IDockingWindow *>(this), &neededBorderSpace);
1002 if (FAILED_UNEXPECTEDLY(hResult))
1003 return hResult;
1004
1005 hResult = dockingWindowSite->SetBorderSpaceDW(static_cast<IDockingWindow *>(this), &neededBorderSpace);
1006 if (FAILED_UNEXPECTEDLY(hResult))
1007 return hResult;
1008
1009 return S_OK;
1010}
1011
1013{
1014 if (pClassID == NULL)
1015 return E_POINTER;
1016 *pClassID = CLSID_InternetToolbar;
1017 return S_OK;
1018}
1019
1021{
1022 if (fIgnoreChanges)
1023 return S_OK;
1024 IUnknown_Exec(fSite, CGID_ShellBrowser, IDM_NOTIFYITBARDIRTY, 0, NULL, NULL);
1025 return S_OK;
1026}
1027
1029{
1030 return E_NOTIMPL;
1031}
1032
1034{
1036 HRESULT hr = InitNew();
1038 if (SUCCEEDED(hr))
1039 {
1040 hr = S_FALSE;
1041 ULONG cb = sizeof(state);
1042 if (pStm->Read(&state, cb, &cb) == S_OK && state.Signature == state.SIG)
1043 {
1047 //SetBandVisibility(ITBBID_?, state.Linksbar);
1048 //SetBandVisibility(ITBBID_?, state.Throbber);
1049 hr = S_OK;
1050 }
1051 }
1053 return hr;
1054}
1055
1057{
1058 ITBARSTATE state = { sizeof(state), state.SIG };
1060 state.StdToolbar = IsBandVisible(ITBBID_TOOLSBAND) == S_OK;
1061 state.Addressbar = IsBandVisible(ITBBID_ADDRESSBAND) == S_OK;
1062 state.Linksbar = FALSE;
1063 return pStm->Write(&state, sizeof(state), NULL);
1064}
1065
1067{
1068 return E_NOTIMPL;
1069}
1070
1072{
1073 CComPtr<IShellMenu> menuBar;
1074 CComPtr<IUnknown> logoBar;
1075 CComPtr<IUnknown> toolsBar;
1076 CComPtr<IUnknown> navigationBar;
1077 HRESULT hResult;
1078
1079 /* Create and attach the menubar to the rebar */
1080 hResult = CreateMenuBar(&menuBar);
1081 if (FAILED_UNEXPECTEDLY(hResult))
1082 return hResult;
1084
1085 hResult = IUnknown_GetWindow(menuBar, &fMenuBandWindow);
1086 fMenuBar.Attach(menuBar.Detach()); // transfer the ref count
1087
1088 // FIXME: The ROS Rebar does not properly support fixed-size items such as the brandband,
1089 // and it will put them in their own row, sized to take up the whole row.
1090#if 0
1091 /* Create and attach the brand/logo to the rebar */
1092 hResult = CBrandBand_CreateInstance(IID_PPV_ARG(IUnknown, &logoBar));
1093 if (FAILED_UNEXPECTEDLY(hResult))
1094 return hResult;
1096 fLogoBar.Attach(logoBar.Detach()); // transfer the ref count
1097#endif
1098
1099 /* Create and attach the standard toolbar to the rebar */
1100 hResult = CToolsBand_CreateInstance(IID_PPV_ARG(IUnknown, &toolsBar));
1101 if (FAILED_UNEXPECTEDLY(hResult))
1102 return hResult;
1104 fControlsBar.Attach(toolsBar.Detach()); // transfer the ref count
1106 if (FAILED_UNEXPECTEDLY(hResult))
1107 return hResult;
1108
1109 /* Create and attach the address/navigation toolbar to the rebar */
1110 hResult = CAddressBand_CreateInstance(IID_PPV_ARG(IUnknown, &navigationBar));
1111 if (FAILED_UNEXPECTEDLY(hResult))
1112 return hResult;
1114 fNavigationBar.Attach(navigationBar.Detach());
1116
1117 return S_OK;
1118}
1119
1121{
1122 int index = (int)SendMessage(fMainReBar, RB_IDTOINDEX, BandID, 0);
1123
1126
1127 return (bandInfo.fStyle & RBBS_HIDDEN) ? S_FALSE : S_OK;
1128}
1129
1131{
1132 int index = (int)SendMessage(fMainReBar, RB_IDTOINDEX, BandID, 0);
1135 return E_FAIL;
1136
1137 if (Show < 0)
1138 bandInfo.fStyle ^= RBBS_HIDDEN; // Toggle
1139 else if (Show)
1140 bandInfo.fStyle &= ~RBBS_HIDDEN;
1141 else
1142 bandInfo.fStyle |= RBBS_HIDDEN;
1143
1144 bandInfo.fMask &= ~RBBIM_CHILD;
1145 ::ShowWindow(bandInfo.hwndChild, (bandInfo.fStyle & RBBS_HIDDEN) ? SW_HIDE : SW_SHOW); // CORE-17236
1147
1149 SetDirty();
1150 return S_OK;
1151}
1152
1154{
1155 return SetBandVisibility(BandID, -1);
1156}
1157
1159 ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
1160{
1161 if (IsEqualIID(*pguidCmdGroup, CGID_PrivCITCommands))
1162 {
1163 while (cCmds != 0)
1164 {
1165 switch (prgCmds->cmdID)
1166 {
1167 case ITID_TEXTLABELS: // Text Labels state
1168 prgCmds->cmdf = OLECMDF_SUPPORTED;
1169 break;
1170 case ITID_TOOLBARBANDSHOWN: // toolbar visibility
1173 prgCmds->cmdf |= OLECMDF_LATCHED;
1174 break;
1175 case ITID_ADDRESSBANDSHOWN: // address bar visibility
1178 prgCmds->cmdf |= OLECMDF_LATCHED;
1179 break;
1180 case ITID_LINKSBANDSHOWN: // links bar visibility
1181 prgCmds->cmdf = 0;
1182 break;
1183 case ITID_MENUBANDSHOWN: // Menubar band visibility
1184 prgCmds->cmdf = OLECMDF_SUPPORTED;
1185 if (fMenuBar)
1186 prgCmds->cmdf |= OLECMDF_LATCHED;
1187 break;
1188 case ITID_AUTOHIDEENABLED: // Auto hide enabled/disabled
1189 prgCmds->cmdf = 0;
1190 break;
1191 case ITID_CUSTOMIZEENABLED: // customize enabled
1192 prgCmds->cmdf = OLECMDF_SUPPORTED;
1193 break;
1194 case ITID_TOOLBARLOCKED: // lock toolbars
1196 if (pSettings->fLocked)
1197 prgCmds->cmdf |= OLECMDF_LATCHED;
1198 break;
1199 default:
1200 prgCmds->cmdf = 0;
1201 break;
1202 }
1203 prgCmds++;
1204 cCmds--;
1205 }
1206 return S_OK;
1207 }
1208 return E_FAIL;
1209}
1210
1212 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
1213{
1214 if (IsEqualIID(*pguidCmdGroup, CGID_PrivCITCommands))
1215 {
1216 switch (nCmdID)
1217 {
1218 case 1:
1219 // what do I do here?
1220 return S_OK;
1221 case ITID_TEXTLABELS:
1222 // toggle text labels
1223 return S_OK;
1229 // toggle links band visibility
1230 return S_OK;
1232 // run customize
1233 return S_OK;
1234 case ITID_TOOLBARLOCKED:
1236 }
1237 }
1238 return E_FAIL;
1239}
1240
1242{
1243 return E_NOTIMPL;
1244}
1245
1247{
1248 return E_NOTIMPL;
1249}
1250
1252 LCID lcid, DISPID *rgDispId)
1253{
1254 return E_NOTIMPL;
1255}
1256
1258 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
1259{
1260 HRESULT hResult;
1261
1262 switch(dispIdMember)
1263 {
1265 hResult = S_OK;
1266 break;
1268 hResult = S_OK;
1269 break;
1271 if (pDispParams->cArgs != 2)
1272 return E_INVALIDARG;
1273 if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL || V_VT(&pDispParams->rgvarg[1]) != VT_I4)
1274 return E_INVALIDARG;
1275 return CommandStateChanged(V_BOOL(&pDispParams->rgvarg[0]) != VARIANT_FALSE,
1276 V_I4(&pDispParams->rgvarg[1]));
1278 hResult = S_OK;
1279 break;
1281 hResult = S_OK;
1282 break;
1284 hResult = S_OK;
1285 break;
1286 }
1287 return S_OK;
1288}
1289
1291{
1292 HRESULT hResult;
1293
1294 TRACE("SetCommandTarget %p category %s param %d\n", theTarget, wine_dbgstr_guid(category), param14);
1295
1296 fCommandTarget.Release();
1298 if (FAILED_UNEXPECTEDLY(hResult))
1299 return hResult;
1301 return S_OK;
1302}
1303
1305{
1306 return E_NOTIMPL;
1307}
1308
1310{
1311 return E_NOTIMPL;
1312}
1313
1315 HINSTANCE param10, LPCTSTR param14, long *param18)
1316{
1317 long result;
1318
1320 reinterpret_cast<WPARAM>(param10), reinterpret_cast<LPARAM>(param14));
1321 *param18 = result;
1322 if (result == -1)
1323 return E_FAIL;
1324 return S_OK;
1325}
1326
1327HRESULT STDMETHODCALLTYPE CInternetToolbar::GetButton(const GUID *pguidCmdGroup, long param10, long param14)
1328{
1329 return E_NOTIMPL;
1330}
1331
1332HRESULT STDMETHODCALLTYPE CInternetToolbar::GetState(const GUID *pguidCmdGroup, long commandID, long *theState)
1333{
1334 if (theState == NULL)
1335 return E_POINTER;
1336 // map the command id
1337 *theState = (long)::SendMessage(fToolbarWindow, TB_GETSTATE, commandID, 0);
1338 return S_OK;
1339}
1340
1341HRESULT STDMETHODCALLTYPE CInternetToolbar::SetState(const GUID *pguidCmdGroup, long commandID, long theState)
1342{
1343 // map the command id
1344 ::SendMessage(fToolbarWindow, TB_SETSTATE, commandID, MAKELONG(theState, 0));
1345 return S_OK;
1346}
1347
1348HRESULT STDMETHODCALLTYPE CInternetToolbar::AddBitmap(const GUID *pguidCmdGroup, long param10, long buttonCount,
1349 TBADDBITMAP *lParam, long *newIndex, COLORREF param20)
1350{
1351 return E_NOTIMPL;
1352}
1353
1355{
1356 if (paramC == NULL)
1357 return E_POINTER;
1358 *paramC = MAKELONG(24, 24);
1359 return S_OK;
1360}
1361
1364{
1365 if (fToolbarWindow)
1366 {
1368 if (result)
1369 *result = res;
1370 return S_OK;
1371 }
1372 return E_NOTIMPL;
1373}
1374
1376 HIMAGELIST param14, HIMAGELIST param18)
1377{
1378 return E_NOTIMPL;
1379}
1380
1381HRESULT STDMETHODCALLTYPE CInternetToolbar::ModifyButton(const GUID *pguidCmdGroup, long param10, long param14)
1382{
1383 return E_NOTIMPL;
1384}
1385
1387{
1388 return E_NOTIMPL;
1389}
1390
1392{
1393 CComPtr<IBrowserService> browserService;
1394 HWND ownerWindow;
1395 HWND dockContainer;
1396 HRESULT hResult;
1397
1398 if (pUnkSite == NULL)
1399 {
1400 hResult = AtlUnadvise(fSite, DIID_DWebBrowserEvents, fAdviseCookie);
1402 DestroyWindow();
1403 fSite.Release();
1404 }
1405 else
1406 {
1407 // get window handle of owner
1408 hResult = IUnknown_GetWindow(pUnkSite, &ownerWindow);
1409 if (FAILED_UNEXPECTEDLY(hResult))
1410 return hResult;
1411 if (ownerWindow == NULL)
1412 return E_FAIL;
1413
1414 // Get settings from owner window
1416
1417 // create dock container
1418 fSite = pUnkSite;
1419 dockContainer = SHCreateWorkerWindowW(0, ownerWindow, 0,
1421 if (dockContainer == NULL)
1422 return E_FAIL;
1423 SubclassWindow(dockContainer);
1424
1425 // create rebar in dock container
1431 0, 0, 700, 60, dockContainer, NULL, _AtlBaseModule.GetModuleInstance(), NULL);
1432 if (fMainReBar == NULL)
1433 return E_FAIL;
1434
1435 // take advice to watch events
1436 hResult = IUnknown_QueryService(pUnkSite, SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService));
1437 hResult = AtlAdvise(browserService, static_cast<IDispatch *>(this), DIID_DWebBrowserEvents, &fAdviseCookie);
1438 }
1439 return S_OK;
1440}
1441
1443{
1444 if (ppvSite == NULL)
1445 return E_POINTER;
1446 if (fSite.p != NULL)
1447 return fSite->QueryInterface(riid, ppvSite);
1448 *ppvSite = NULL;
1449 return S_OK;
1450}
1451
1453{
1454 HRESULT hResult;
1455
1456 if (IsEqualIID(guidService, IID_IBandSite))
1457 return this->QueryInterface(riid, ppvObject);
1458 if (IsEqualIID(guidService, SID_IBandProxy))
1459 {
1460 if (fBandProxy.p == NULL)
1461 {
1462 hResult = CreateAndInitBandProxy();
1463 if (FAILED_UNEXPECTEDLY(hResult))
1464 return hResult;
1465 }
1466 return fBandProxy->QueryInterface(riid, ppvObject);
1467 }
1468 return IUnknown_QueryService(fSite, guidService, riid, ppvObject);
1469}
1470
1472 HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
1473{
1474 HRESULT hResult;
1475
1476 if (fMenuBar)
1477 {
1478 hResult = IUnknown_RelayWinEvent(fMenuBar, hWnd, uMsg, wParam, lParam, theResult);
1479 if (hResult != S_FALSE)
1480 return hResult;
1481 }
1482
1483 if (fNavigationBar)
1484 {
1485 hResult = IUnknown_RelayWinEvent(fNavigationBar, hWnd, uMsg, wParam, lParam, theResult);
1486 if (hResult != S_FALSE)
1487 return hResult;
1488 }
1489
1490 if (fLogoBar)
1491 {
1492 hResult = IUnknown_RelayWinEvent(fLogoBar, hWnd, uMsg, wParam, lParam, theResult);
1493 if (hResult != S_FALSE)
1494 return hResult;
1495 }
1496
1497 return S_FALSE;
1498}
1499
1501{
1503 return E_NOTIMPL;
1504}
1505
1507{
1509 return E_NOTIMPL;
1510}
1511
1513{
1514 if (uBand == ~0ul)
1515 return ::SendMessage(fMainReBar, RB_GETBANDCOUNT, 0, 0);
1516 int id;
1517 IUnknown *pUnkUnused;
1518 HRESULT hr = EnumBands(uBand, &id, &pUnkUnused);
1519 if (SUCCEEDED(hr))
1520 *pdwBandID = id;
1521 return hr;
1522}
1523
1525 IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName)
1526{
1527 if (ppstb == NULL)
1528 return E_POINTER;
1529 if (dwBandID == ITBBID_MENUBAND && fMenuBar.p != NULL)
1530 return fMenuBar->QueryInterface(IID_PPV_ARG(IDeskBand, ppstb));
1531 //if (dwBandID == ITBBID_BRANDBAND && fLogoBar.p != NULL)
1532 // return fLogoBar->QueryInterface(IID_PPV_ARG(IDeskBand, ppstb));
1533 *ppstb = NULL;
1534 return E_FAIL;
1535}
1536
1538{
1540 return E_NOTIMPL;
1541}
1542
1544{
1546 return E_NOTIMPL;
1547}
1548
1550{
1552 return E_NOTIMPL;
1553}
1554
1556{
1558 return E_NOTIMPL;
1559}
1560
1562{
1564 return E_NOTIMPL;
1565}
1566
1567LRESULT CInternetToolbar::OnTravelBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1568{
1569 CComPtr<IWebBrowser> webBrowser;
1570 HRESULT hResult;
1571
1572 hResult = IUnknown_QueryService(fSite, SID_SShellBrowser, IID_PPV_ARG(IWebBrowser, &webBrowser));
1573 if (FAILED_UNEXPECTEDLY(hResult))
1574 return 0;
1575 hResult = webBrowser->GoBack();
1576 return 1;
1577}
1578
1579LRESULT CInternetToolbar::OnTravelForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1580{
1581 CComPtr<IWebBrowser> webBrowser;
1582 HRESULT hResult;
1583
1584 hResult = IUnknown_QueryService(fSite, SID_SShellBrowser, IID_PPV_ARG(IWebBrowser, &webBrowser));
1585 if (FAILED_UNEXPECTEDLY(hResult))
1586 return 0;
1587 hResult = webBrowser->GoForward();
1588 return 1;
1589}
1590
1591LRESULT CInternetToolbar::OnUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1592{
1593 IUnknown_Exec(fSite, CGID_ShellBrowser, IDM_GOTO_UPONELEVEL, 0, NULL, NULL);
1594 return 1;
1595}
1596
1597LRESULT CInternetToolbar::OnSearch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1598{
1599 IUnknown_Exec(fSite, CGID_Explorer, 0x1c, 1, NULL, NULL);
1600 return 1;
1601}
1602
1603LRESULT CInternetToolbar::OnFolders(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1604{
1605 IUnknown_Exec(fSite, CGID_Explorer, 0x23, 0, NULL, NULL);
1606 return 1;
1607}
1608
1610{
1611 HRESULT hResult;
1612
1613 if (fCommandTarget.p != NULL)
1614 {
1615 hResult = fCommandTarget->Exec(&fCommandCategory, wID, 0, NULL, NULL);
1616 if (FAILED(hResult))
1617 {
1618 ::SendMessageW(::GetParent(m_hWnd), WM_COMMAND, wID, 0);
1619 }
1620 }
1621 return 1;
1622}
1623
1625{
1626 CComPtr<IBrowserService> browserService;
1627 CComPtr<IOleCommandTarget> commandTarget;
1628 CComPtr<ITravelLog> travelLog;
1629 NMTOOLBARW *notifyInfo;
1630 RECT bounds;
1631 HMENU newMenu;
1633 int selectedItem;
1634 VARIANT parmIn;
1635 OLECMD commandInfo;
1636 HRESULT hResult;
1637 wchar_t templateString[200];
1638
1639 notifyInfo = (NMTOOLBARW *)pNMHDR;
1640 if (notifyInfo->hdr.hwndFrom != fToolbarWindow)
1641 {
1642 // not from the toolbar, keep looking for a message handler
1643 bHandled = FALSE;
1644 return 0;
1645 }
1646 SendMessage(fToolbarWindow, TB_GETRECT, notifyInfo->iItem, reinterpret_cast<LPARAM>(&bounds));
1647 ::MapWindowPoints(fToolbarWindow, NULL, reinterpret_cast<POINT *>(&bounds), 2);
1648 switch (notifyInfo->iItem)
1649 {
1650 case IDM_GOTO_BACK:
1651 newMenu = CreatePopupMenu();
1653 hResult = browserService->GetTravelLog(&travelLog);
1654 hResult = travelLog->InsertMenuEntries(browserService, newMenu, 0, 1, 9, TLMENUF_BACK);
1655 commandInfo.cmdID = 0x1d;
1656 hResult = IUnknown_QueryStatus(browserService, CGID_Explorer, 1, &commandInfo, NULL);
1657 if ((commandInfo.cmdf & (OLECMDF_ENABLED | OLECMDF_LATCHED)) == OLECMDF_ENABLED &&
1658 travelLog->CountEntries(browserService) > 1)
1659 {
1660 AppendMenuW(newMenu, MF_SEPARATOR, -1, L"");
1661
1662 if (LoadStringW(_AtlBaseModule.GetResourceInstance(),
1663 IDS_HISTORYTEXT, templateString, sizeof(templateString) / sizeof(wchar_t)) == 0)
1664 StringCbCopyW(templateString, sizeof(templateString), L"&History\tCtrl+H");
1665
1666 AppendMenuW(newMenu, MF_STRING /* | MF_OWNERDRAW */, IDM_EXPLORERBAR_HISTORY, templateString);
1667 }
1668 params.cbSize = sizeof(params);
1669 params.rcExclude = bounds;
1670 selectedItem = TrackPopupMenuEx(newMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD,
1671 bounds.left, bounds.bottom, m_hWnd, &params);
1672 if (selectedItem == IDM_EXPLORERBAR_HISTORY)
1673 {
1674 V_VT(&parmIn) = VT_I4;
1675 V_I4(&parmIn) = 1;
1676 Exec(&CGID_Explorer, 0x1d, 2, &parmIn, NULL);
1677 }
1678 else if (selectedItem != 0)
1679 hResult = travelLog->Travel(browserService, -selectedItem);
1680 DestroyMenu(newMenu);
1681 break;
1682 case IDM_GOTO_FORWARD:
1683 newMenu = CreatePopupMenu();
1685 hResult = browserService->GetTravelLog(&travelLog);
1686 hResult = travelLog->InsertMenuEntries(browserService, newMenu, 0, 1, 9, TLMENUF_FORE);
1687 commandInfo.cmdID = 0x1d;
1688 hResult = IUnknown_QueryStatus(browserService, CGID_Explorer, 1, &commandInfo, NULL);
1689 if ((commandInfo.cmdf & (OLECMDF_ENABLED | OLECMDF_LATCHED)) == OLECMDF_ENABLED &&
1690 travelLog->CountEntries(browserService) > 1)
1691 {
1692 AppendMenuW(newMenu, MF_SEPARATOR, -1, L"");
1693
1694 if (LoadStringW(_AtlBaseModule.GetResourceInstance(),
1695 IDS_HISTORYTEXT, templateString, sizeof(templateString) / sizeof(wchar_t)) == 0)
1696 StringCbCopyW(templateString, sizeof(templateString), L"&History\tCtrl+H");
1697
1698 AppendMenuW(newMenu, MF_STRING /* | MF_OWNERDRAW */, IDM_EXPLORERBAR_HISTORY, templateString);
1699 }
1700 params.cbSize = sizeof(params);
1701 params.rcExclude = bounds;
1702 selectedItem = TrackPopupMenuEx(newMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD,
1703 bounds.left, bounds.bottom, m_hWnd, &params);
1704 if (selectedItem == IDM_EXPLORERBAR_HISTORY)
1705 {
1706 V_VT(&parmIn) = VT_I4;
1707 V_I4(&parmIn) = 1;
1708 Exec(&CGID_Explorer, 0x1d, 2, &parmIn, NULL);
1709 }
1710 else if (selectedItem != 0)
1711 hResult = travelLog->Travel(browserService, selectedItem);
1712 DestroyMenu(newMenu);
1713 break;
1714 case gViewsCommandID:
1715 VARIANT inValue;
1716 CComVariant outValue;
1717 HRESULT hResult;
1718
1719 V_VT(&inValue) = VT_INT_PTR;
1720 V_INTREF(&inValue) = reinterpret_cast<INT *>(&bounds);
1721
1722 if (fCommandTarget.p != NULL)
1723 hResult = fCommandTarget->Exec(&fCommandCategory, FCIDM_SHVIEW_AUTOARRANGE, 1, &inValue, &outValue);
1724 // pvaOut is VT_I4 with value 0x403
1725 break;
1726 }
1727 return TBDDRET_DEFAULT;
1728}
1729
1731{
1732 return 1;
1733}
1734
1736{
1737 return 1;
1738}
1739
1741{
1742 HMENU contextMenuBar;
1743 HMENU contextMenu;
1744 POINT clickLocation;
1745 int command;
1746 RBHITTESTINFO hitTestInfo;
1747 REBARBANDINFOW rebarBandInfo;
1748 int bandID;
1749
1750 clickLocation.x = LOWORD(lParam);
1751 clickLocation.y = HIWORD(lParam);
1752 hitTestInfo.pt = clickLocation;
1753 ScreenToClient(&hitTestInfo.pt);
1754 SendMessage(fMainReBar, RB_HITTEST, 0, (LPARAM)&hitTestInfo);
1755 if (hitTestInfo.iBand == -1)
1756 return 0;
1757
1758 rebarBandInfo.cbSize = sizeof(rebarBandInfo);
1759 rebarBandInfo.fMask = RBBIM_ID;
1760 SendMessage(fMainReBar, RB_GETBANDINFOW, hitTestInfo.iBand, (LPARAM)&rebarBandInfo);
1761 bandID = rebarBandInfo.wID;
1762 contextMenuBar = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU));
1763 contextMenu = GetSubMenu(contextMenuBar, 0);
1764 switch (bandID)
1765 {
1766 case ITBBID_MENUBAND: // menu band
1770 break;
1771 case ITBBID_BRANDBAND: // brand band
1775 break;
1776 case ITBBID_TOOLSBAND: // tools band
1779 break;
1780 case ITBBID_ADDRESSBAND: // navigation band
1783 break;
1784 default:
1785 break;
1786 }
1787
1789
1796
1797 // TODO: use GetSystemMetrics(SM_MENUDROPALIGNMENT) to determine menu alignment
1799 clickLocation.x, clickLocation.y, 0, m_hWnd, NULL);
1800 switch (command)
1801 {
1802 case IDM_TOOLBARS_STANDARDBUTTONS: // standard buttons
1804 break;
1805 case IDM_TOOLBARS_ADDRESSBAR: // address bar
1807 break;
1808 case IDM_TOOLBARS_LINKSBAR: // links
1809 break;
1810 case IDM_TOOLBARS_LOCKTOOLBARS: // lock the toolbars
1812 break;
1813 case IDM_TOOLBARS_CUSTOMIZE: // customize
1815 break;
1818 break;
1819 }
1820
1821 DestroyMenu(contextMenuBar);
1822 return 1;
1823}
1824
1826{
1827 if (wParam != SIZE_MINIMIZED)
1828 {
1831 }
1832 return 1;
1833}
1834
1836{
1837 if ((short)lParam != HTCLIENT || (HWND)wParam != m_hWnd)
1838 {
1839 bHandled = FALSE;
1840 return 0;
1841 }
1843 return 1;
1844}
1845
1846LRESULT CInternetToolbar::OnTipText(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
1847{
1848 CComPtr<IBrowserService> browserService;
1849 CComPtr<ITravelLog> travelLog;
1850 TOOLTIPTEXTW *pTTTW;
1851 UINT nID;
1852 HRESULT hResult;
1853 wchar_t tempString[300];
1854
1855 pTTTW = reinterpret_cast<TOOLTIPTEXTW *>(pNMHDR);
1856 if ((pTTTW->uFlags & TTF_IDISHWND) != 0)
1857 nID = ::GetDlgCtrlID((HWND)pNMHDR->idFrom);
1858 else
1859 nID = (UINT)pNMHDR->idFrom;
1860
1861 if (nID != 0)
1862 {
1863 if (nID == (UINT)IDM_GOTO_BACK || nID == (UINT)IDM_GOTO_FORWARD)
1864 {
1865 // TODO: Should this call QueryService?
1866 hResult = fSite->QueryInterface(IID_PPV_ARG(IBrowserService, &browserService));
1867 hResult = browserService->GetTravelLog(&travelLog);
1868 hResult = travelLog->GetToolTipText(browserService,
1869 (nID == (UINT)IDM_GOTO_BACK) ? TLOG_BACK : TLOG_FORE,
1870 0, tempString, 299);
1871 if (FAILED_UNEXPECTEDLY(hResult))
1872 {
1873 bHandled = FALSE;
1874 return 0;
1875 }
1876 }
1877 else
1878 tempString[0] = 0;
1879 wcsncpy (pTTTW->szText, tempString, sizeof(pTTTW->szText) / sizeof(wchar_t));
1880 ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
1882 return 0;
1883 }
1884 return 0;
1885}
1886
1888{
1889 LRESULT theResult;
1890 HRESULT hResult;
1891
1892 hResult = OnWinEvent((HWND) lParam, uMsg, wParam, lParam, &theResult);
1893
1894 bHandled = hResult == S_OK;
1895
1896 return FAILED_UNEXPECTEDLY(hResult) ? 0 : theResult;
1897}
1899{
1900 NMHDR *notifyHeader;
1901 LRESULT theResult;
1902 HRESULT hResult;
1903
1904 notifyHeader = reinterpret_cast<NMHDR *>(lParam);
1905
1906 hResult = OnWinEvent(notifyHeader->hwndFrom, uMsg, wParam, lParam, &theResult);
1907
1908 bHandled = hResult == S_OK;
1909
1910 return FAILED_UNEXPECTEDLY(hResult) ? 0 : theResult;
1911}
1912
1914{
1915 bHandled = FALSE;
1916 if (pSettings->fLocked)
1917 return 0;
1918
1919 if (wParam & MK_CONTROL)
1920 return 0;
1921
1922 fSizing = TRUE;
1923
1924 DWORD msgp = GetMessagePos();
1925
1928
1929 RECT rc;
1930 GetWindowRect(&rc);
1931
1932 fStartHeight = rc.bottom - rc.top;
1933
1934 SetCapture();
1935
1936 bHandled = TRUE;
1937 return 0;
1938}
1939
1941{
1942 bHandled = FALSE;
1943 if (!fSizing)
1944 return 0;
1945
1946 DWORD msgp = GetMessagePos();
1947
1948 POINT pt;
1949 pt.x = GET_X_LPARAM(msgp);
1950 pt.y = GET_Y_LPARAM(msgp);
1951
1953
1954 bHandled = TRUE;
1955 return 0;
1956}
1957
1959{
1960 bHandled = FALSE;
1961 if (!fSizing)
1962 return 0;
1963
1964 OnMouseMove(uMsg, wParam, lParam, bHandled);
1965
1966 fSizing = FALSE;
1967
1969
1970 return 0;
1971}
1972
1974{
1975 HRESULT hr;
1976 HWND hwndMenu;
1977
1978 hr = IUnknown_GetWindow(fMenuBar, &hwndMenu);
1980 return 0;
1981
1982 CComPtr<IWinEventHandler> menuWinEventHandler;
1983 hr = fMenuBar->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
1985 return 0;
1986
1987 LRESULT lres;
1988 hr = menuWinEventHandler->OnWinEvent(hwndMenu, uMsg, wParam, lParam, &lres);
1990 return 0;
1991
1992 return lres;
1993}
1994
1996{
1997 /* Refresh toolbar locked state */
1999
2000 return 0;
2001}
2002
2004{
2006 LPCWSTR subkey = NULL;
2007 switch (StreamFor)
2008 {
2009 case ITBARSTREAM_SHELLBROWSER: subkey = L"ShellBrowser"; break;
2010 case ITBARSTREAM_WEBBROWSER: subkey = L"WebBrowser"; break;
2011 case ITBARSTREAM_EXPLORER: subkey = L"Explorer"; break;
2012 default: return E_INVALIDARG;
2013 }
2014 wsprintfW(path, L"Software\\Microsoft\\Internet Explorer\\Toolbar\\%s", subkey);
2015 *ppS = SHOpenRegStream2W(HKEY_CURRENT_USER, path, L"RosITBarLayout", Stgm); // ROS prefix until we figure out the correct format
2016 return *ppS ? S_OK : E_FAIL;
2017}
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 WARN(fmt,...)
Definition: precomp.h:61
#define PURE
Definition: basetyps.h:64
#define STDMETHOD(m)
Definition: basetyps.h:62
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
#define UNIMPLEMENTED
Definition: debug.h:118
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:170
void Attach(T *lp)
Definition: atlcomcli.h:179
T * Detach()
Definition: atlcomcli.h:186
CInternetToolbar * fToolbar
CComPtr< IUnknown > fContainedBand
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
STDMETHOD() GetBorderDW(IUnknown *punkObj, LPRECT prcBorder) override
HRESULT GetRBBandInfo(REBARBANDINFOW &bandInfo)
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
STDMETHOD() OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus) override
STDMETHOD() GetWindow(HWND *lphwnd) override
STDMETHOD() SetBorderSpaceDW(IUnknown *punkObj, LPCBORDERWIDTHS pbw) override
IUnknown * GetContainedBand() const
HRESULT Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags)
DESKBANDINFO fDeskBandInfo
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
STDMETHOD() RequestBorderSpaceDW(IUnknown *punkObj, LPCBORDERWIDTHS pbw) override
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
HRESULT CommandStateChanged(bool newValue, int commandID)
STDMETHOD() SetImageList(const GUID *pguidCmdGroup, HIMAGELIST param10, HIMAGELIST param14, HIMAGELIST param18) override
HRESULT SetState(const GUID *pguidCmdGroup, long commandID, OLECMD *pcmd)
LRESULT OnSetCursor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
HRESULT IsBandVisible(int BandID)
CComPtr< IUnknown > fNavigationBar
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
CComPtr< IUnknown > fLogoBar
STDMETHOD() SetCommandTarget(IUnknown *theTarget, GUID *category, long param14) override
LRESULT OnTipText(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
STDMETHOD() IsWindowOwner(HWND hWnd) override
HRESULT ReserveBorderSpace(LONG maxHeight=-1)
STDMETHOD() InitNew() override
STDMETHOD() AddBitmap(const GUID *pguidCmdGroup, long param10, long buttonCount, TBADDBITMAP *lParam, long *newIndex, COLORREF param20) override
HRESULT LockUnlockToolbars(bool locked)
LRESULT OnQueryDelete(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
CComPtr< IUnknown > fControlsBar
LRESULT OnSettingsChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() GetSizeMax(ULARGE_INTEGER *pcbSize) override
STDMETHOD() RemoveBand(DWORD dwBandID) override
STDMETHOD() ResizeBorderDW(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override
ShellSettings * pSettings
STDMETHOD() GetWindow(HWND *lphwnd) override
STDMETHOD() GetSite(REFIID riid, void **ppvSite) override
STDMETHOD() SetBandState(DWORD dwBandID, DWORD dwMask, DWORD dwState) override
HRESULT CreateMenuBar(IShellMenu **menuBar)
STDMETHOD() GetBandSiteInfo(BANDSITEINFO *pbsinfo) override
LRESULT OnForwardToCommandTarget(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() HasFocusIO() override
void AddDockItem(IUnknown *newItem, int bandID, int flags)
STDMETHOD() GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override
LRESULT OnLDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() Save(IStream *pStm, BOOL fClearDirty) override
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
STDMETHOD() GetBitmapSize(long *paramC) override
CComPtr< IBandProxy > fBandProxy
STDMETHOD() SetSite(IUnknown *pUnkSite) override
HRESULT EnumBands(UINT Index, int *pBandId, IUnknown **ppUnkBand)
STDMETHOD() ShowDW(BOOL fShow) override
STDMETHOD() AddButtons(const GUID *pguidCmdGroup, long buttonCount, TBBUTTON *buttons) override
STDMETHOD() Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) override
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() QueryBand(DWORD dwBandID, IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName) override
HRESULT CreateAndInitBandProxy()
STDMETHOD() GetBandObject(DWORD dwBandID, REFIID riid, void **ppv) override
HRESULT ToggleBandVisibility(int BandID)
virtual ~CInternetToolbar()
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
STDMETHOD() CloseDW(DWORD dwReserved) override
STDMETHOD() GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override
STDMETHOD() UIActivateIO(BOOL fActivate, LPMSG lpMsg) override
LRESULT OnTravelBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
CComPtr< CMenuCallback > fMenuCallback
STDMETHOD() TranslateAcceleratorIO(LPMSG lpMsg) override
STDMETHOD() GetClassID(CLSID *pClassID) override
STDMETHOD() ModifyButton(const GUID *pguidCmdGroup, long param10, long param14) override
STDMETHOD() GetState(const GUID *pguidCmdGroup, long commandID, long *theState) override
static HRESULT GetStream(UINT StreamFor, DWORD Stgm, IStream **ppS)
HRESULT SetBandVisibility(int BandID, int Show)
STDMETHOD() SendToolbarMsg(const GUID *pguidCmdGroup, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *result) override
LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) override
void RefreshLockedToolbarState()
LRESULT OnUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnWinIniChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() Unknown1() override
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
STDMETHOD() OnChange(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) override
LRESULT OnLUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() GetTypeInfoCount(UINT *pctinfo) override
STDMETHOD() AddBand(IUnknown *punk) override
STDMETHOD() SetBandSiteInfo(const BANDSITEINFO *pbsinfo) override
STDMETHOD() AddString(const GUID *pguidCmdGroup, HINSTANCE param10, LPCTSTR param14, long *param18) override
LRESULT OnQueryInsert(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
LRESULT OnFolders(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
CComPtr< IShellMenu > fMenuBar
CComPtr< IOleCommandTarget > fCommandTarget
LRESULT OnMenuDropDown(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
STDMETHOD() GetButton(const GUID *pguidCmdGroup, long param10, long param14) override
STDMETHOD() Load(IStream *pStm) override
CComPtr< IUnknown > fSite
STDMETHOD() IsDirty() override
LRESULT OnTravelForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnSearch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
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_NOTIFYITBARDIRTY
Definition: resource.h:76
#define IDM_GOTO_FORWARD
Definition: resource.h:46
#define IDS_HISTORYTEXT
Definition: resource.h:130
#define IDM_EXPLORERBAR_HISTORY
Definition: resource.h:42
#define IDM_CABINET_CONTEXTMENU
Definition: resource.h:88
#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
#define BWM_GETSETTINGSPTR
Definition: settings.h:11
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:105
#define MAX_PATH
Definition: compat.h:34
@ VT_I4
Definition: compat.h:2298
@ VT_INT_PTR
Definition: compat.h:2327
@ VT_BOOL
Definition: compat.h:2306
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3260
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
Definition: ordinal.c:4263
HRESULT WINAPI IUnknown_QueryStatus(IUnknown *lpUnknown, REFGUID pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
Definition: ordinal.c:1044
DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck)
Definition: ordinal.c:1796
HRESULT WINAPI IUnknown_HasFocusIO(IUnknown *lpUnknown)
Definition: ordinal.c:4295
UINT WINAPI SHEnableMenuItem(HMENU hMenu, UINT wItemID, BOOL bEnable)
Definition: ordinal.c:1777
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1497
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1083
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:3056
HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:3000
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1332
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1407
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
#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 res
Definition: glext.h:9613
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
GLuint id
Definition: glext.h:5910
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
struct IOleCommandTarget::_tagOLECMDTEXT OLECMDTEXT
struct IOleCommandTarget::_tagOLECMD OLECMD
HRESULT Write([in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten)
HRESULT Read([out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
STDMETHOD() EnumNameSpace(ULONG, PULONG) PURE
STDMETHOD() GetNameSpaceID(LPCITEMIDLIST, LPGUID) PURE
static HRESULT BindToDesktop(LPCITEMIDLIST pidl, IShellFolder **ppsfResult)
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)
STDMETHOD() QueryNameSpace(ULONG, LPGUID, IShellFolder **) PURE
HRESULT IUnknown_ShowDW(IUnknown *punk, BOOL fShow)
static const int gFoldersCommandID
#define ITBARSTREAM_EXPLORER
#define ITBARSTREAM_SHELLBROWSER
static const int gViewsCommandID
static const int gSearchCommandID
#define ITBARSTREAM_WEBBROWSER
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#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 HMODULE MODULEINFO DWORD cb
Definition: module.c:33
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:63
static VARIANTARG static DISPID
Definition: ordinal.c:52
_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 BOOL
Definition: nt_native.h:43
#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:940
#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
GUID * LPGUID
Definition: guiddef.h:81
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define long
Definition: qsort.c:33
IStream *WINAPI SHOpenRegStream2W(HKEY hKey, LPCWSTR pszSubkey, LPCWSTR pszValue, DWORD dwMode)
Definition: regstream.c:537
_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
HRESULT hr
Definition: shlfolder.c:183
#define SID_SShellBrowser
Definition: shlguid.h:128
#define CGID_MenuBand
#define CSIDL_FAVORITES
Definition: shlobj.h:2178
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2202
#define FCIDM_MENU_FAVORITES
Definition: shlobj.h:639
#define TLOG_FORE
Definition: shlobj.h:2737
#define TLMENUF_BACK
Definition: shlobj.h:2741
#define TLMENUF_FORE
Definition: shlobj.h:2742
#define TLOG_BACK
Definition: shlobj.h:2736
@ SMIF_DROPCASCADE
Definition: shobjidl.idl:2756
@ SMIF_TRACKPOPUP
Definition: shobjidl.idl:2759
@ SMIM_ICON
Definition: shobjidl.idl:2740
@ SMIM_FLAGS
Definition: shobjidl.idl:2739
@ DBID_BANDINFOCHANGED
Definition: shobjidl.idl:2489
#define FCIDM_SHVIEW_AUTOARRANGE
Definition: shresdef.h:846
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
static const UINT SIG
void Save()
Definition: settings.cpp:12
BOOL fLocked
Definition: settings.h:15
BOOL fShowGoButton
Definition: settings.h:16
Definition: scsiwmi.h:51
LONG y
Definition: windef.h:330
LONG x
Definition: windef.h:329
COLORREF crBkgnd
Definition: shobjidl.idl:2461
WCHAR wszTitle[256]
Definition: shobjidl.idl:2459
UINT_PTR idFrom
Definition: winuser.h:3158
HWND hwndFrom
Definition: winuser.h:3157
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:2708
PUITEMID_CHILD pidlItem
Definition: shobjidl.idl:2710
IShellFolder * psf
Definition: shobjidl.idl:2711
DWORD dwMask
Definition: shobjidl.idl:2721
DWORD dwFlags
Definition: shobjidl.idl:2723
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:829
#define ITID_TOOLBARBANDSHOWN
Definition: undocshell.h:827
#define ITBBID_ADDRESSBAND
Definition: undocshell.h:821
#define SMC_EXEC
Definition: undocshell.h:738
#define ITBBID_TOOLSBAND
Definition: undocshell.h:820
#define ITBBID_BRANDBAND
Definition: undocshell.h:819
#define ITID_AUTOHIDEENABLED
Definition: undocshell.h:831
#define ITID_TEXTLABELS
Definition: undocshell.h:826
#define ITID_MENUBANDSHOWN
Definition: undocshell.h:830
#define ITID_CUSTOMIZEENABLED
Definition: undocshell.h:832
#define ITID_ADDRESSBANDSHOWN
Definition: undocshell.h:828
#define ITID_TOOLBARLOCKED
Definition: undocshell.h:833
#define ITBBID_MENUBAND
Definition: undocshell.h:818
#define _T(x)
Definition: vfdio.h:22
_In_ WDFCOLLECTION _In_ ULONG Index
#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:2767
_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_UNEXPECTED
Definition: winerror.h:2456
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#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:5764
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define SW_HIDE
Definition: winuser.h:768
#define SWP_NOACTIVATE
Definition: winuser.h:1242
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
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:2380
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)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOMOVE
Definition: winuser.h:1244
#define WM_COMMAND
Definition: winuser.h:1740
#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:1245
#define SIZE_MINIMIZED
Definition: winuser.h:2506
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:2383
#define IDC_SIZENS
Definition: winuser.h:695
#define HWND_TOP
Definition: winuser.h:1207
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MK_CONTROL
Definition: winuser.h:2370
#define MF_SEPARATOR
Definition: winuser.h:137
#define TPM_LEFTALIGN
Definition: winuser.h:2377
#define HTCLIENT
Definition: winuser.h:2475
#define SendMessage
Definition: winuser.h:5852
#define LoadCursor
Definition: winuser.h:5821
#define LoadMenu
Definition: winuser.h:5826
#define WS_EX_LTRREADING
Definition: winuser.h:393
HWND WINAPI GetParent(_In_ HWND)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define SWP_NOOWNERZORDER
Definition: winuser.h:1249
int WINAPI GetDlgCtrlID(_In_ HWND)
#define SW_SHOW
Definition: winuser.h:775
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define TPM_RETURNCMD
Definition: winuser.h:2387
#define SWP_NOZORDER
Definition: winuser.h:1247
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_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185