ReactOS 0.4.16-dev-980-g00983aa
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 // *** IDockingWindowSite 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 IUnknown *pUnk; // Not ref. counted
664 int temp = (UINT) SendMessageW(fMainReBar, RB_IDTOINDEX, BandID, 0);
665 if (EnumBands(temp, &temp, &pUnk) == S_OK)
666 return pUnk->QueryInterface(riid, ppv);
667 *ppv = NULL;
668 return E_NOINTERFACE;
669}
670
672{
673 CComPtr<IDockingWindowSite> dockingWindowSite;
674 RECT availableBorderSpace;
675
676 HRESULT hResult = fSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &dockingWindowSite));
677 if (FAILED_UNEXPECTEDLY(hResult))
678 return hResult;
679 hResult = dockingWindowSite->GetBorderDW(static_cast<IDockingWindow *>(this), &availableBorderSpace);
680 if (FAILED_UNEXPECTEDLY(hResult))
681 return hResult;
682
683 if (maxHeight && availableBorderSpace.bottom - availableBorderSpace.top > maxHeight)
684 {
685 availableBorderSpace.bottom = availableBorderSpace.top + maxHeight;
686 }
687
688 return ResizeBorderDW(&availableBorderSpace, fSite, FALSE);
689}
690
692{
693 CComPtr<IShellMenu> menubar;
695 VARIANT menuOut;
696 HWND ownerWindow;
697 HRESULT hResult;
698
699 if (!pMenuBar)
700 return E_POINTER;
701
702 *pMenuBar = NULL;
703
704 hResult = CMenuBand_CreateInstance(IID_PPV_ARG(IShellMenu, &menubar));
705 if (FAILED_UNEXPECTEDLY(hResult))
706 return hResult;
707
708 hResult = fMenuCallback->QueryInterface(IID_PPV_ARG(IShellMenuCallback, &callback));
709 if (FAILED_UNEXPECTEDLY(hResult))
710 return hResult;
711
712 hResult = menubar->Initialize(callback, -1, ANCESTORDEFAULT, SMINIT_HORIZONTAL | SMINIT_TOPLEVEL);
713 if (FAILED_UNEXPECTEDLY(hResult))
714 return hResult;
715
716 // Set Menu
717 {
718 hResult = IUnknown_Exec(fSite, CGID_Explorer, 0x35, 0, NULL, &menuOut);
719 if (FAILED_UNEXPECTEDLY(hResult))
720 return hResult;
721
722 if (V_VT(&menuOut) != VT_INT_PTR || V_INTREF(&menuOut) == NULL)
723 return E_FAIL;
724
725 hResult = IUnknown_GetWindow(fSite, &ownerWindow);
726 if (FAILED_UNEXPECTEDLY(hResult))
727 return hResult;
728
729 HMENU hMenuBar = (HMENU) V_INTREF(&menuOut);
730
731 // FIXME: Figure out the proper way to do this.
732 HMENU hMenuFavs = GetSubMenu(hMenuBar, 3);
733 if (hMenuFavs)
734 {
736 }
737
738 hResult = menubar->SetMenu(hMenuBar, ownerWindow, SMSET_DONTOWN);
739 if (FAILED_UNEXPECTEDLY(hResult))
740 return hResult;
741 }
742
743 hResult = IUnknown_Exec(menubar, CGID_MenuBand, 3, 1, NULL, NULL);
744 if (FAILED_UNEXPECTEDLY(hResult))
745 return hResult;
746
747 *pMenuBar = menubar.Detach();
748
749 return S_OK;
750}
751
753{
754 if (locked != !!pSettings->fLocked)
755 {
756 pSettings->fLocked = (BOOL)locked;
757 pSettings->Save();
759 }
760 return S_OK;
761}
762
764{
765 REBARBANDINFOW rebarBandInfo;
766 int bandCount;
767 CDockSite *dockSite;
768
769 rebarBandInfo.cbSize = sizeof(rebarBandInfo);
770 rebarBandInfo.fMask = RBBIM_STYLE | RBBIM_LPARAM;
771 bandCount = (int)SendMessage(fMainReBar, RB_GETBANDCOUNT, 0, 0);
772 for (INT x = 0; x < bandCount; x++)
773 {
774 SendMessage(fMainReBar, RB_GETBANDINFOW, x, (LPARAM)&rebarBandInfo);
775 dockSite = reinterpret_cast<CDockSite *>(rebarBandInfo.lParam);
776 if (dockSite != NULL)
777 {
778 rebarBandInfo.fStyle &= ~(RBBS_NOGRIPPER | RBBS_GRIPPERALWAYS);
779 if ((dockSite->fFlags & CDockSite::ITF_NOGRIPPER) || pSettings->fLocked)
780 rebarBandInfo.fStyle |= RBBS_NOGRIPPER;
782 rebarBandInfo.fStyle |= RBBS_GRIPPERALWAYS;
783 SendMessage(fMainReBar, RB_SETBANDINFOW, x, (LPARAM)&rebarBandInfo);
784 }
785 }
787}
788
789HRESULT CInternetToolbar::SetState(const GUID *pguidCmdGroup, long commandID, OLECMD* pcmd)
790{
791 long state = 0;
792 if (pcmd->cmdf & OLECMDF_ENABLED)
794 if (pcmd->cmdf & OLECMDF_LATCHED)
796 return SetState(pguidCmdGroup, commandID, state);
797}
798
800{
801 HRESULT hResult;
802
803 hResult = S_OK;
804 switch (commandID)
805 {
806 case -1:
807 // loop through buttons
808 //for buttons in CLSID_CommonButtons
809 // if up, QueryStatus for up state and update it
810 //
811 //for buttons in fCommandCategory, update with QueryStatus of fCommandTarget
812
813 OLECMD commandList[4];
814 commandList[0].cmdID = 0x1c;
815 commandList[1].cmdID = 0x1d;
816 commandList[2].cmdID = 0x1e;
817 commandList[3].cmdID = 0x23;
818 IUnknown_QueryStatus(fSite, CGID_Explorer, 4, commandList, NULL);
819 SetState(&CLSID_CommonButtons, gSearchCommandID, &commandList[0]);
820 SetState(&CLSID_CommonButtons, gFoldersCommandID, &commandList[3]);
821 //SetState(&CLSID_CommonButtons, gFavoritesCommandID, &commandList[2]);
822 //SetState(&CLSID_CommonButtons, gHistoryCommandID, &commandList[1]);
823
824 break;
825 case 1:
826 // forward
827 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_FORWARD, newValue ? TBSTATE_ENABLED : 0);
828 break;
829 case 2:
830 // back
831 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_BACK, newValue ? TBSTATE_ENABLED : 0);
832 break;
833 case 3:
834 // up
835 hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_UPONELEVEL, newValue ? TBSTATE_ENABLED : 0);
836 break;
837 }
838 return hResult;
839}
840
842{
843 CComPtr<IServiceProvider> serviceProvider;
844 HRESULT hResult;
845
846 hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider));
847 if (FAILED_UNEXPECTEDLY(hResult))
848 return hResult;
849 hResult = serviceProvider->QueryService(SID_IBandProxy, IID_PPV_ARG(IBandProxy, &fBandProxy));
850 if (FAILED_UNEXPECTEDLY(hResult))
851 {
852 hResult = CBandProxy_CreateInstance(IID_PPV_ARG(IBandProxy, &fBandProxy));
853 if (FAILED_UNEXPECTEDLY(hResult))
854 return hResult;
855 hResult = fBandProxy->SetSite(fSite);
856 if (FAILED_UNEXPECTEDLY(hResult))
857 return hResult;
858 }
859 return S_OK;
860}
861
863{
864 return E_NOTIMPL;
865}
866
868{
870
871 if (fMenuBar)
873 if (hr != S_FALSE)
874 return hr;
875
876 if (fControlsBar)
878 if (hr != S_FALSE)
879 return hr;
880
881 if (fNavigationBar)
883 if (hr != S_FALSE)
884 return hr;
885
886 return S_FALSE;
887}
888
890{
892
893 if (fMenuBar)
895 if (hr == S_OK)
896 return hr;
897
898 if (fControlsBar)
900 if (hr == S_OK)
901 return hr;
902
903 if (fNavigationBar)
905 if (hr == S_OK)
906 return hr;
907
908 return S_FALSE;
909}
910
912{
913 if (lphwnd == NULL)
914 return E_POINTER;
915 *lphwnd = m_hWnd;
916 return S_OK;
917}
918
920{
921 return E_NOTIMPL;
922}
923
925{
926 HRESULT hResult;
927
928 // show the bar here
929 if (fShow)
930 {
931 hResult = ReserveBorderSpace();
932 if (FAILED_UNEXPECTEDLY(hResult))
933 return hResult;
934 }
935
936 // TODO: Why should showing the IDockingWindow change all bands? Related to CORE-17236 and CORE-19659.
937 int id;
938 IUnknown *pUnk;
939 for (UINT i = 0; SUCCEEDED(EnumBands(i, &id, &pUnk)); ++i)
940 {
941 if (!pUnk)
942 continue;
943 BOOL visible = fShow && IsBandVisible(id) != S_FALSE;
944 hResult = IUnknown_ShowDW(pUnk, visible);
945 FAILED_UNEXPECTEDLY(hResult);
946 }
947 return S_OK;
948}
949
951{
952 HRESULT hResult;
953
954 if (fMenuBar)
955 {
957 if (FAILED_UNEXPECTEDLY(hResult))
958 return hResult;
959 ReleaseCComPtrExpectZero(fMenuBar);
960 }
961 if (fControlsBar)
962 {
964 if (FAILED_UNEXPECTEDLY(hResult))
965 return hResult;
966 ReleaseCComPtrExpectZero(fControlsBar);
967 }
968 if (fNavigationBar)
969 {
971 if (FAILED_UNEXPECTEDLY(hResult))
972 return hResult;
973 ReleaseCComPtrExpectZero(fNavigationBar);
974 }
975 if (fLogoBar)
976 {
978 if (FAILED_UNEXPECTEDLY(hResult))
979 return hResult;
980 ReleaseCComPtrExpectZero(fLogoBar);
981 }
982
983 SetSite(NULL);
984 return S_OK;
985}
986
988 IUnknown *punkToolbarSite, BOOL fReserved)
989{
990 RECT neededBorderSpace;
991 RECT availableBorderSpace = *prcBorder;
992
993 SendMessage(fMainReBar, RB_SIZETORECT, RBSTR_CHANGERECT, reinterpret_cast<LPARAM>(&availableBorderSpace));
994
995 // RBSTR_CHANGERECT does not seem to set the proper size in the rect.
996 // Let's make sure we fetch the actual size properly.
997 ::GetWindowRect(fMainReBar, &availableBorderSpace);
998 neededBorderSpace.left = 0;
999 neededBorderSpace.top = availableBorderSpace.bottom - availableBorderSpace.top;
1000 if (!pSettings->fLocked)
1001 neededBorderSpace.top += 3;
1002 neededBorderSpace.right = 0;
1003 neededBorderSpace.bottom = 0;
1004
1005 CComPtr<IDockingWindowSite> dockingWindowSite;
1006
1007 HRESULT hResult = fSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &dockingWindowSite));
1008 if (FAILED_UNEXPECTEDLY(hResult))
1009 return hResult;
1010
1011 hResult = dockingWindowSite->RequestBorderSpaceDW(static_cast<IDockingWindow *>(this), &neededBorderSpace);
1012 if (FAILED_UNEXPECTEDLY(hResult))
1013 return hResult;
1014
1015 hResult = dockingWindowSite->SetBorderSpaceDW(static_cast<IDockingWindow *>(this), &neededBorderSpace);
1016 if (FAILED_UNEXPECTEDLY(hResult))
1017 return hResult;
1018
1019 return S_OK;
1020}
1021
1023{
1024 if (pClassID == NULL)
1025 return E_POINTER;
1026 *pClassID = CLSID_InternetToolbar;
1027 return S_OK;
1028}
1029
1031{
1032 if (fIgnoreChanges)
1033 return S_OK;
1034 IUnknown_Exec(fSite, CGID_ShellBrowser, IDM_NOTIFYITBARDIRTY, 0, NULL, NULL);
1035 return S_OK;
1036}
1037
1039{
1040 return E_NOTIMPL;
1041}
1042
1044{
1046 HRESULT hr = InitNew();
1048 if (SUCCEEDED(hr))
1049 {
1050 hr = S_FALSE;
1051 ULONG cb = sizeof(state);
1052 if (pStm->Read(&state, cb, &cb) == S_OK && state.Signature == state.SIG)
1053 {
1057 //SetBandVisibility(ITBBID_?, state.Linksbar);
1058 //SetBandVisibility(ITBBID_?, state.Throbber);
1059 hr = S_OK;
1060 }
1061 }
1063 return hr;
1064}
1065
1067{
1068 ITBARSTATE state = { sizeof(state), state.SIG };
1070 state.StdToolbar = IsBandVisible(ITBBID_TOOLSBAND) == S_OK;
1071 state.Addressbar = IsBandVisible(ITBBID_ADDRESSBAND) == S_OK;
1072 state.Linksbar = FALSE;
1073 return pStm->Write(&state, sizeof(state), NULL);
1074}
1075
1077{
1078 return E_NOTIMPL;
1079}
1080
1082{
1083 CComPtr<IShellMenu> menuBar;
1084 CComPtr<IUnknown> logoBar;
1085 CComPtr<IUnknown> toolsBar;
1086 CComPtr<IUnknown> navigationBar;
1087 HRESULT hResult;
1088
1089 /* Create and attach the menubar to the rebar */
1090 hResult = CreateMenuBar(&menuBar);
1091 if (FAILED_UNEXPECTEDLY(hResult))
1092 return hResult;
1094
1095 hResult = IUnknown_GetWindow(menuBar, &fMenuBandWindow);
1096 fMenuBar.Attach(menuBar.Detach()); // transfer the ref count
1097
1098 // FIXME: The ROS Rebar does not properly support fixed-size items such as the brandband,
1099 // and it will put them in their own row, sized to take up the whole row.
1100#if 0
1101 /* Create and attach the brand/logo to the rebar */
1102 hResult = CBrandBand_CreateInstance(IID_PPV_ARG(IUnknown, &logoBar));
1103 if (FAILED_UNEXPECTEDLY(hResult))
1104 return hResult;
1106 fLogoBar.Attach(logoBar.Detach()); // transfer the ref count
1107#endif
1108
1109 /* Create and attach the standard toolbar to the rebar */
1110 hResult = CToolsBand_CreateInstance(IID_PPV_ARG(IUnknown, &toolsBar));
1111 if (FAILED_UNEXPECTEDLY(hResult))
1112 return hResult;
1114 fControlsBar.Attach(toolsBar.Detach()); // transfer the ref count
1116 if (FAILED_UNEXPECTEDLY(hResult))
1117 return hResult;
1118
1119 /* Create and attach the address/navigation toolbar to the rebar */
1120 hResult = CAddressBand_CreateInstance(IID_PPV_ARG(IUnknown, &navigationBar));
1121 if (FAILED_UNEXPECTEDLY(hResult))
1122 return hResult;
1124 fNavigationBar.Attach(navigationBar.Detach());
1126
1127 return S_OK;
1128}
1129
1131{
1132 int index = (int)SendMessage(fMainReBar, RB_IDTOINDEX, BandID, 0);
1133
1136
1137 return (bandInfo.fStyle & RBBS_HIDDEN) ? S_FALSE : S_OK;
1138}
1139
1141{
1142 int index = (int)SendMessage(fMainReBar, RB_IDTOINDEX, BandID, 0);
1145 return E_FAIL;
1146
1147 if (Show < 0)
1148 bandInfo.fStyle ^= RBBS_HIDDEN; // Toggle
1149 else if (Show)
1150 bandInfo.fStyle &= ~RBBS_HIDDEN;
1151 else
1152 bandInfo.fStyle |= RBBS_HIDDEN;
1153
1154 bandInfo.fMask &= ~RBBIM_CHILD;
1155 ::ShowWindow(bandInfo.hwndChild, (bandInfo.fStyle & RBBS_HIDDEN) ? SW_HIDE : SW_SHOW); // CORE-17236
1157
1159 SetDirty();
1160 return S_OK;
1161}
1162
1164{
1165 return SetBandVisibility(BandID, -1);
1166}
1167
1169 ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
1170{
1171 if (IsEqualIID(*pguidCmdGroup, CGID_PrivCITCommands))
1172 {
1173 while (cCmds != 0)
1174 {
1175 switch (prgCmds->cmdID)
1176 {
1177 case ITID_TEXTLABELS: // Text Labels state
1178 prgCmds->cmdf = OLECMDF_SUPPORTED;
1179 break;
1180 case ITID_TOOLBARBANDSHOWN: // toolbar visibility
1183 prgCmds->cmdf |= OLECMDF_LATCHED;
1184 break;
1185 case ITID_ADDRESSBANDSHOWN: // address bar visibility
1188 prgCmds->cmdf |= OLECMDF_LATCHED;
1189 break;
1190 case ITID_LINKSBANDSHOWN: // links bar visibility
1191 prgCmds->cmdf = 0;
1192 break;
1193 case ITID_MENUBANDSHOWN: // Menubar band visibility
1194 prgCmds->cmdf = OLECMDF_SUPPORTED;
1196 prgCmds->cmdf |= OLECMDF_LATCHED;
1197 break;
1198 case ITID_AUTOHIDEENABLED: // Auto hide enabled/disabled
1199 prgCmds->cmdf = 0;
1200 break;
1201 case ITID_CUSTOMIZEENABLED: // customize enabled
1202 prgCmds->cmdf = OLECMDF_SUPPORTED;
1203 break;
1204 case ITID_TOOLBARLOCKED: // lock toolbars
1206 if (pSettings->fLocked)
1207 prgCmds->cmdf |= OLECMDF_LATCHED;
1208 break;
1209 default:
1210 prgCmds->cmdf = 0;
1211 break;
1212 }
1213 prgCmds++;
1214 cCmds--;
1215 }
1216 return S_OK;
1217 }
1218 return E_FAIL;
1219}
1220
1222 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
1223{
1224 if (IsEqualIID(*pguidCmdGroup, CGID_PrivCITCommands))
1225 {
1226 switch (nCmdID)
1227 {
1228 case 1:
1229 // what do I do here?
1230 return S_OK;
1231 case ITID_TEXTLABELS:
1232 // toggle text labels
1233 return S_OK;
1236 case ITID_MENUBANDSHOWN:
1241 // toggle links band visibility
1242 return S_OK;
1244 // run customize
1245 return S_OK;
1246 case ITID_TOOLBARLOCKED:
1248 }
1249 }
1250 return E_FAIL;
1251}
1252
1254{
1255 return E_NOTIMPL;
1256}
1257
1259{
1260 return E_NOTIMPL;
1261}
1262
1264 LCID lcid, DISPID *rgDispId)
1265{
1266 return E_NOTIMPL;
1267}
1268
1270 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
1271{
1272 HRESULT hResult;
1273
1274 switch(dispIdMember)
1275 {
1277 hResult = S_OK;
1278 break;
1280 hResult = S_OK;
1281 break;
1283 if (pDispParams->cArgs != 2)
1284 return E_INVALIDARG;
1285 if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL || V_VT(&pDispParams->rgvarg[1]) != VT_I4)
1286 return E_INVALIDARG;
1287 return CommandStateChanged(V_BOOL(&pDispParams->rgvarg[0]) != VARIANT_FALSE,
1288 V_I4(&pDispParams->rgvarg[1]));
1290 hResult = S_OK;
1291 break;
1293 hResult = S_OK;
1294 break;
1296 hResult = S_OK;
1297 break;
1298 }
1299 return S_OK;
1300}
1301
1303{
1304 HRESULT hResult;
1305
1306 TRACE("SetCommandTarget %p category %s param %d\n", theTarget, wine_dbgstr_guid(category), param14);
1307
1308 fCommandTarget.Release();
1310 if (FAILED_UNEXPECTEDLY(hResult))
1311 return hResult;
1313 return S_OK;
1314}
1315
1317{
1318 return E_NOTIMPL;
1319}
1320
1322{
1323 return E_NOTIMPL;
1324}
1325
1327 HINSTANCE param10, LPCTSTR param14, long *param18)
1328{
1329 long result;
1330
1332 reinterpret_cast<WPARAM>(param10), reinterpret_cast<LPARAM>(param14));
1333 *param18 = result;
1334 if (result == -1)
1335 return E_FAIL;
1336 return S_OK;
1337}
1338
1339HRESULT STDMETHODCALLTYPE CInternetToolbar::GetButton(const GUID *pguidCmdGroup, long param10, long param14)
1340{
1341 return E_NOTIMPL;
1342}
1343
1344HRESULT STDMETHODCALLTYPE CInternetToolbar::GetState(const GUID *pguidCmdGroup, long commandID, long *theState)
1345{
1346 if (theState == NULL)
1347 return E_POINTER;
1348 // map the command id
1349 *theState = (long)::SendMessage(fToolbarWindow, TB_GETSTATE, commandID, 0);
1350 return S_OK;
1351}
1352
1353HRESULT STDMETHODCALLTYPE CInternetToolbar::SetState(const GUID *pguidCmdGroup, long commandID, long theState)
1354{
1355 // map the command id
1356 ::SendMessage(fToolbarWindow, TB_SETSTATE, commandID, MAKELONG(theState, 0));
1357 return S_OK;
1358}
1359
1360HRESULT STDMETHODCALLTYPE CInternetToolbar::AddBitmap(const GUID *pguidCmdGroup, long param10, long buttonCount,
1361 TBADDBITMAP *lParam, long *newIndex, COLORREF param20)
1362{
1363 return E_NOTIMPL;
1364}
1365
1367{
1368 if (paramC == NULL)
1369 return E_POINTER;
1370 *paramC = MAKELONG(24, 24);
1371 return S_OK;
1372}
1373
1376{
1377 if (fToolbarWindow)
1378 {
1380 if (result)
1381 *result = res;
1382 return S_OK;
1383 }
1384 return E_NOTIMPL;
1385}
1386
1388 HIMAGELIST param14, HIMAGELIST param18)
1389{
1390 return E_NOTIMPL;
1391}
1392
1393HRESULT STDMETHODCALLTYPE CInternetToolbar::ModifyButton(const GUID *pguidCmdGroup, long param10, long param14)
1394{
1395 return E_NOTIMPL;
1396}
1397
1399{
1400 return E_NOTIMPL;
1401}
1402
1404{
1405 CComPtr<IBrowserService> browserService;
1406 HWND ownerWindow;
1407 HWND dockContainer;
1408 HRESULT hResult;
1409
1410 if (pUnkSite == NULL)
1411 {
1412 hResult = AtlUnadvise(fSite, DIID_DWebBrowserEvents, fAdviseCookie);
1414 DestroyWindow();
1415 fSite.Release();
1416 }
1417 else
1418 {
1419 // get window handle of owner
1420 hResult = IUnknown_GetWindow(pUnkSite, &ownerWindow);
1421 if (FAILED_UNEXPECTEDLY(hResult))
1422 return hResult;
1423 if (ownerWindow == NULL)
1424 return E_FAIL;
1425
1426 // Get settings from owner window
1428
1429 // create dock container
1430 fSite = pUnkSite;
1431 dockContainer = SHCreateWorkerWindowW(0, ownerWindow, 0,
1433 if (dockContainer == NULL)
1434 return E_FAIL;
1435 SubclassWindow(dockContainer);
1436
1437 // create rebar in dock container
1443 0, 0, 700, 60, dockContainer, NULL, _AtlBaseModule.GetModuleInstance(), NULL);
1444 if (fMainReBar == NULL)
1445 return E_FAIL;
1446
1447 // take advice to watch events
1448 hResult = IUnknown_QueryService(pUnkSite, SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService));
1449 hResult = AtlAdvise(browserService, static_cast<IDispatch *>(this), DIID_DWebBrowserEvents, &fAdviseCookie);
1450 }
1451 return S_OK;
1452}
1453
1455{
1456 if (ppvSite == NULL)
1457 return E_POINTER;
1458 if (fSite.p != NULL)
1459 return fSite->QueryInterface(riid, ppvSite);
1460 *ppvSite = NULL;
1461 return S_OK;
1462}
1463
1465{
1466 HRESULT hResult;
1467
1468 if (IsEqualIID(guidService, IID_IBandSite))
1469 return this->QueryInterface(riid, ppvObject);
1470 if (IsEqualIID(guidService, SID_IBandProxy))
1471 {
1472 if (fBandProxy.p == NULL)
1473 {
1474 hResult = CreateAndInitBandProxy();
1475 if (FAILED_UNEXPECTEDLY(hResult))
1476 return hResult;
1477 }
1478 return fBandProxy->QueryInterface(riid, ppvObject);
1479 }
1480 return IUnknown_QueryService(fSite, guidService, riid, ppvObject);
1481}
1482
1484 HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
1485{
1486 HRESULT hResult;
1487
1488 if (fMenuBar)
1489 {
1490 hResult = IUnknown_RelayWinEvent(fMenuBar, hWnd, uMsg, wParam, lParam, theResult);
1491 if (hResult != S_FALSE)
1492 return hResult;
1493 }
1494
1495 if (fNavigationBar)
1496 {
1497 hResult = IUnknown_RelayWinEvent(fNavigationBar, hWnd, uMsg, wParam, lParam, theResult);
1498 if (hResult != S_FALSE)
1499 return hResult;
1500 }
1501
1502 if (fLogoBar)
1503 {
1504 hResult = IUnknown_RelayWinEvent(fLogoBar, hWnd, uMsg, wParam, lParam, theResult);
1505 if (hResult != S_FALSE)
1506 return hResult;
1507 }
1508
1509 return S_FALSE;
1510}
1511
1513{
1515 return E_NOTIMPL;
1516}
1517
1519{
1521 return E_NOTIMPL;
1522}
1523
1525{
1526 if (uBand == ~0ul)
1527 return ::SendMessage(fMainReBar, RB_GETBANDCOUNT, 0, 0);
1528 int id;
1529 IUnknown *pUnkUnused;
1530 HRESULT hr = EnumBands(uBand, &id, &pUnkUnused);
1531 if (SUCCEEDED(hr))
1532 *pdwBandID = id;
1533 return hr;
1534}
1535
1537 IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName)
1538{
1539 if (ppstb == NULL)
1540 return E_POINTER;
1541 if (dwBandID == ITBBID_MENUBAND && fMenuBar.p != NULL)
1542 return fMenuBar->QueryInterface(IID_PPV_ARG(IDeskBand, ppstb));
1543 //if (dwBandID == ITBBID_BRANDBAND && fLogoBar.p != NULL)
1544 // return fLogoBar->QueryInterface(IID_PPV_ARG(IDeskBand, ppstb));
1545 *ppstb = NULL;
1546 return E_FAIL;
1547}
1548
1550{
1552 return E_NOTIMPL;
1553}
1554
1556{
1558 return E_NOTIMPL;
1559}
1560
1562{
1564 return E_NOTIMPL;
1565}
1566
1568{
1570 return E_NOTIMPL;
1571}
1572
1574{
1576 return E_NOTIMPL;
1577}
1578
1579LRESULT CInternetToolbar::OnTravelBack(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->GoBack();
1588 return 1;
1589}
1590
1591LRESULT CInternetToolbar::OnTravelForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1592{
1593 CComPtr<IWebBrowser> webBrowser;
1594 HRESULT hResult;
1595
1596 hResult = IUnknown_QueryService(fSite, SID_SShellBrowser, IID_PPV_ARG(IWebBrowser, &webBrowser));
1597 if (FAILED_UNEXPECTEDLY(hResult))
1598 return 0;
1599 hResult = webBrowser->GoForward();
1600 return 1;
1601}
1602
1603LRESULT CInternetToolbar::OnUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1604{
1605 IUnknown_Exec(fSite, CGID_ShellBrowser, IDM_GOTO_UPONELEVEL, 0, NULL, NULL);
1606 return 1;
1607}
1608
1609LRESULT CInternetToolbar::OnSearch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1610{
1611 IUnknown_Exec(fSite, CGID_Explorer, 0x1c, 1, NULL, NULL);
1612 return 1;
1613}
1614
1615LRESULT CInternetToolbar::OnFolders(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
1616{
1617 IUnknown_Exec(fSite, CGID_Explorer, 0x23, 0, NULL, NULL);
1618 return 1;
1619}
1620
1622{
1623 HRESULT hResult;
1624
1625 if (fCommandTarget.p != NULL)
1626 {
1627 hResult = fCommandTarget->Exec(&fCommandCategory, wID, 0, NULL, NULL);
1628 if (FAILED(hResult))
1629 {
1630 ::SendMessageW(::GetParent(m_hWnd), WM_COMMAND, wID, 0);
1631 }
1632 }
1633 return 1;
1634}
1635
1637{
1638 CComPtr<IBrowserService> browserService;
1639 CComPtr<IOleCommandTarget> commandTarget;
1640 CComPtr<ITravelLog> travelLog;
1641 NMTOOLBARW *notifyInfo;
1642 RECT bounds;
1643 HMENU newMenu;
1645 int selectedItem;
1646 VARIANT parmIn;
1647 OLECMD commandInfo;
1648 HRESULT hResult;
1649 wchar_t templateString[200];
1650
1651 notifyInfo = (NMTOOLBARW *)pNMHDR;
1652 if (notifyInfo->hdr.hwndFrom != fToolbarWindow)
1653 {
1654 // not from the toolbar, keep looking for a message handler
1655 bHandled = FALSE;
1656 return 0;
1657 }
1658 SendMessage(fToolbarWindow, TB_GETRECT, notifyInfo->iItem, reinterpret_cast<LPARAM>(&bounds));
1659 ::MapWindowPoints(fToolbarWindow, NULL, reinterpret_cast<POINT *>(&bounds), 2);
1660 switch (notifyInfo->iItem)
1661 {
1662 case IDM_GOTO_BACK:
1663 newMenu = CreatePopupMenu();
1665 hResult = browserService->GetTravelLog(&travelLog);
1666 hResult = travelLog->InsertMenuEntries(browserService, newMenu, 0, 1, 9, TLMENUF_BACK);
1667 commandInfo.cmdID = 0x1d;
1668 hResult = IUnknown_QueryStatus(browserService, CGID_Explorer, 1, &commandInfo, NULL);
1669 if ((commandInfo.cmdf & (OLECMDF_ENABLED | OLECMDF_LATCHED)) == OLECMDF_ENABLED &&
1670 travelLog->CountEntries(browserService) > 1)
1671 {
1672 AppendMenuW(newMenu, MF_SEPARATOR, -1, L"");
1673
1674 if (LoadStringW(_AtlBaseModule.GetResourceInstance(),
1675 IDS_HISTORYTEXT, templateString, sizeof(templateString) / sizeof(wchar_t)) == 0)
1676 StringCbCopyW(templateString, sizeof(templateString), L"&History\tCtrl+H");
1677
1678 AppendMenuW(newMenu, MF_STRING /* | MF_OWNERDRAW */, IDM_EXPLORERBAR_HISTORY, templateString);
1679 }
1680 params.cbSize = sizeof(params);
1681 params.rcExclude = bounds;
1682 selectedItem = TrackPopupMenuEx(newMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD,
1683 bounds.left, bounds.bottom, m_hWnd, &params);
1684 if (selectedItem == IDM_EXPLORERBAR_HISTORY)
1685 {
1686 V_VT(&parmIn) = VT_I4;
1687 V_I4(&parmIn) = 1;
1688 Exec(&CGID_Explorer, 0x1d, 2, &parmIn, NULL);
1689 }
1690 else if (selectedItem != 0)
1691 hResult = travelLog->Travel(browserService, -selectedItem);
1692 DestroyMenu(newMenu);
1693 break;
1694 case IDM_GOTO_FORWARD:
1695 newMenu = CreatePopupMenu();
1697 hResult = browserService->GetTravelLog(&travelLog);
1698 hResult = travelLog->InsertMenuEntries(browserService, newMenu, 0, 1, 9, TLMENUF_FORE);
1699 commandInfo.cmdID = 0x1d;
1700 hResult = IUnknown_QueryStatus(browserService, CGID_Explorer, 1, &commandInfo, NULL);
1701 if ((commandInfo.cmdf & (OLECMDF_ENABLED | OLECMDF_LATCHED)) == OLECMDF_ENABLED &&
1702 travelLog->CountEntries(browserService) > 1)
1703 {
1704 AppendMenuW(newMenu, MF_SEPARATOR, -1, L"");
1705
1706 if (LoadStringW(_AtlBaseModule.GetResourceInstance(),
1707 IDS_HISTORYTEXT, templateString, sizeof(templateString) / sizeof(wchar_t)) == 0)
1708 StringCbCopyW(templateString, sizeof(templateString), L"&History\tCtrl+H");
1709
1710 AppendMenuW(newMenu, MF_STRING /* | MF_OWNERDRAW */, IDM_EXPLORERBAR_HISTORY, templateString);
1711 }
1712 params.cbSize = sizeof(params);
1713 params.rcExclude = bounds;
1714 selectedItem = TrackPopupMenuEx(newMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD,
1715 bounds.left, bounds.bottom, m_hWnd, &params);
1716 if (selectedItem == IDM_EXPLORERBAR_HISTORY)
1717 {
1718 V_VT(&parmIn) = VT_I4;
1719 V_I4(&parmIn) = 1;
1720 Exec(&CGID_Explorer, 0x1d, 2, &parmIn, NULL);
1721 }
1722 else if (selectedItem != 0)
1723 hResult = travelLog->Travel(browserService, selectedItem);
1724 DestroyMenu(newMenu);
1725 break;
1726 case gViewsCommandID:
1727 VARIANT inValue;
1728 CComVariant outValue;
1729 HRESULT hResult;
1730
1731 V_VT(&inValue) = VT_INT_PTR;
1732 V_INTREF(&inValue) = reinterpret_cast<INT *>(&bounds);
1733
1734 if (fCommandTarget.p != NULL)
1735 hResult = fCommandTarget->Exec(&fCommandCategory, FCIDM_SHVIEW_AUTOARRANGE, 1, &inValue, &outValue);
1736 // pvaOut is VT_I4 with value 0x403
1737 break;
1738 }
1739 return TBDDRET_DEFAULT;
1740}
1741
1743{
1744 return 1;
1745}
1746
1748{
1749 return 1;
1750}
1751
1753{
1754 HMENU contextMenuBar;
1755 HMENU contextMenu;
1756 POINT clickLocation;
1757 int command;
1758 RBHITTESTINFO hitTestInfo;
1759 REBARBANDINFOW rebarBandInfo;
1760 int bandID;
1761 CComPtr<IAddressBand> pAddress;
1762
1763 clickLocation.x = LOWORD(lParam);
1764 clickLocation.y = HIWORD(lParam);
1765 hitTestInfo.pt = clickLocation;
1766 ScreenToClient(&hitTestInfo.pt);
1767 SendMessage(fMainReBar, RB_HITTEST, 0, (LPARAM)&hitTestInfo);
1768 if (hitTestInfo.iBand == -1)
1769 return 0;
1770
1771 rebarBandInfo.cbSize = sizeof(rebarBandInfo);
1772 rebarBandInfo.fMask = RBBIM_ID;
1773 SendMessage(fMainReBar, RB_GETBANDINFOW, hitTestInfo.iBand, (LPARAM)&rebarBandInfo);
1774 bandID = rebarBandInfo.wID;
1775 contextMenuBar = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU));
1776 contextMenu = GetSubMenu(contextMenuBar, 0);
1777 switch (bandID)
1778 {
1779 case ITBBID_MENUBAND: // menu band
1783 break;
1784 case ITBBID_BRANDBAND: // brand band
1788 break;
1789 case ITBBID_TOOLSBAND: // tools band
1792 break;
1793 case ITBBID_ADDRESSBAND: // navigation band
1796 QIBand(ITBBID_ADDRESSBAND, IID_PPV_ARG(IAddressBand, &pAddress));
1798 break;
1799 default:
1800 break;
1801 }
1802
1804
1811
1812 // TODO: use GetSystemMetrics(SM_MENUDROPALIGNMENT) to determine menu alignment
1814 clickLocation.x, clickLocation.y, 0, m_hWnd, NULL);
1815 switch (command)
1816 {
1817 case IDM_TOOLBARS_STANDARDBUTTONS: // standard buttons
1819 break;
1820 case IDM_TOOLBARS_ADDRESSBAR: // address bar
1822 break;
1823 case IDM_TOOLBARS_LINKSBAR: // links
1824 break;
1825 case IDM_TOOLBARS_LOCKTOOLBARS: // lock the toolbars
1827 break;
1828 case IDM_TOOLBARS_CUSTOMIZE: // customize
1830 break;
1833 break;
1834 }
1835
1836 DestroyMenu(contextMenuBar);
1837 return 1;
1838}
1839
1841{
1842 if (wParam != SIZE_MINIMIZED)
1843 {
1846 }
1847 return 1;
1848}
1849
1851{
1852 if ((short)lParam != HTCLIENT || (HWND)wParam != m_hWnd)
1853 {
1854 bHandled = FALSE;
1855 return 0;
1856 }
1858 return 1;
1859}
1860
1861LRESULT CInternetToolbar::OnTipText(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled)
1862{
1863 CComPtr<IBrowserService> browserService;
1864 CComPtr<ITravelLog> travelLog;
1865 TOOLTIPTEXTW *pTTTW;
1866 UINT nID;
1867 HRESULT hResult;
1868 wchar_t tempString[300];
1869
1870 pTTTW = reinterpret_cast<TOOLTIPTEXTW *>(pNMHDR);
1871 if ((pTTTW->uFlags & TTF_IDISHWND) != 0)
1872 nID = ::GetDlgCtrlID((HWND)pNMHDR->idFrom);
1873 else
1874 nID = (UINT)pNMHDR->idFrom;
1875
1876 if (nID != 0)
1877 {
1878 if (nID == (UINT)IDM_GOTO_BACK || nID == (UINT)IDM_GOTO_FORWARD)
1879 {
1880 // TODO: Should this call QueryService?
1881 hResult = fSite->QueryInterface(IID_PPV_ARG(IBrowserService, &browserService));
1882 hResult = browserService->GetTravelLog(&travelLog);
1883 hResult = travelLog->GetToolTipText(browserService,
1884 (nID == (UINT)IDM_GOTO_BACK) ? TLOG_BACK : TLOG_FORE,
1885 0, tempString, 299);
1886 if (FAILED_UNEXPECTEDLY(hResult))
1887 {
1888 bHandled = FALSE;
1889 return 0;
1890 }
1891 }
1892 else
1893 tempString[0] = 0;
1894 wcsncpy (pTTTW->szText, tempString, sizeof(pTTTW->szText) / sizeof(wchar_t));
1895 ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
1897 return 0;
1898 }
1899 return 0;
1900}
1901
1903{
1904 LRESULT theResult;
1905 HRESULT hResult;
1906
1907 hResult = OnWinEvent((HWND) lParam, uMsg, wParam, lParam, &theResult);
1908
1909 bHandled = hResult == S_OK;
1910
1911 return FAILED_UNEXPECTEDLY(hResult) ? 0 : theResult;
1912}
1914{
1915 NMHDR *notifyHeader;
1916 LRESULT theResult;
1917 HRESULT hResult;
1918
1919 notifyHeader = reinterpret_cast<NMHDR *>(lParam);
1920
1921 hResult = OnWinEvent(notifyHeader->hwndFrom, uMsg, wParam, lParam, &theResult);
1922
1923 bHandled = hResult == S_OK;
1924
1925 return FAILED_UNEXPECTEDLY(hResult) ? 0 : theResult;
1926}
1927
1929{
1930 bHandled = FALSE;
1931 if (pSettings->fLocked)
1932 return 0;
1933
1934 if (wParam & MK_CONTROL)
1935 return 0;
1936
1937 fSizing = TRUE;
1938
1939 DWORD msgp = GetMessagePos();
1940
1943
1944 RECT rc;
1945 GetWindowRect(&rc);
1946
1947 fStartHeight = rc.bottom - rc.top;
1948
1949 SetCapture();
1950
1951 bHandled = TRUE;
1952 return 0;
1953}
1954
1956{
1957 bHandled = FALSE;
1958 if (!fSizing)
1959 return 0;
1960
1961 DWORD msgp = GetMessagePos();
1962
1963 POINT pt;
1964 pt.x = GET_X_LPARAM(msgp);
1965 pt.y = GET_Y_LPARAM(msgp);
1966
1968
1969 bHandled = TRUE;
1970 return 0;
1971}
1972
1974{
1975 bHandled = FALSE;
1976 if (!fSizing)
1977 return 0;
1978
1979 OnMouseMove(uMsg, wParam, lParam, bHandled);
1980
1981 fSizing = FALSE;
1982
1984
1985 return 0;
1986}
1987
1989{
1990 HRESULT hr;
1991 HWND hwndMenu;
1992
1993 hr = IUnknown_GetWindow(fMenuBar, &hwndMenu);
1995 return 0;
1996
1997 CComPtr<IWinEventHandler> menuWinEventHandler;
1998 hr = fMenuBar->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
2000 return 0;
2001
2002 LRESULT lres;
2003 hr = menuWinEventHandler->OnWinEvent(hwndMenu, uMsg, wParam, lParam, &lres);
2005 return 0;
2006
2007 return lres;
2008}
2009
2011{
2012 /* Refresh toolbar locked state */
2014
2015 return 0;
2016}
2017
2019{
2021 LPCWSTR subkey = NULL;
2022 switch (StreamFor)
2023 {
2024 case ITBARSTREAM_SHELLBROWSER: subkey = L"ShellBrowser"; break;
2025 case ITBARSTREAM_WEBBROWSER: subkey = L"WebBrowser"; break;
2026 case ITBARSTREAM_EXPLORER: subkey = L"Explorer"; break;
2027 default: return E_INVALIDARG;
2028 }
2029 wsprintfW(path, L"Software\\Microsoft\\Internet Explorer\\Toolbar\\%s", subkey);
2030 *ppS = SHOpenRegStream2W(HKEY_CURRENT_USER, path, L"RosITBarLayout", Stgm); // ROS prefix until we figure out the correct format
2031 return *ppS ? S_OK : E_FAIL;
2032}
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: ntoskrnl.c:15
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
static BOOL IsGoButtonVisible(IUnknown *pUnkBand)
Definition: addressband.cpp:60
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)
HRESULT QIBand(int BandID, REFIID riid, void **ppv)
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
wcsncpy
#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:34
#define IDM_GOTO_UPONELEVEL
Definition: resource.h:48
#define IDM_TOOLBARS_TEXTLABELS
Definition: resource.h:36
#define IDM_TOOLBARS_STANDARDBUTTONS
Definition: resource.h:31
#define IDM_NOTIFYITBARDIRTY
Definition: resource.h:78
#define IDM_GOTO_FORWARD
Definition: resource.h:47
#define IDS_HISTORYTEXT
Definition: resource.h:130
#define IDM_EXPLORERBAR_HISTORY
Definition: resource.h:43
#define IDM_CABINET_CONTEXTMENU
Definition: resource.h:90
#define IDM_TOOLBARS_GOBUTTON
Definition: resource.h:37
#define IDM_FAVORITES_EMPTY
Definition: resource.h:53
#define IDM_TOOLBARS_CUSTOMIZE
Definition: resource.h:35
#define IDM_GOTO_BACK
Definition: resource.h:46
#define IDM_TOOLBARS_ADDRESSBAR
Definition: resource.h:32
#define IDM_TOOLBARS_LINKSBAR
Definition: resource.h:33
#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:3408
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
Definition: ordinal.c:4300
HRESULT WINAPI IUnknown_QueryStatus(IUnknown *lpUnknown, REFGUID pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
Definition: ordinal.c:1048
DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck)
Definition: ordinal.c:1800
HRESULT WINAPI IUnknown_HasFocusIO(IUnknown *lpUnknown)
Definition: ordinal.c:4332
UINT WINAPI SHEnableMenuItem(HMENU hMenu, UINT wItemID, BOOL bEnable)
Definition: ordinal.c:1781
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1087
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:3060
HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:3004
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1411
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)
nsresult QueryInterface(nsIIDRef riid, void **result)
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:58
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 MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#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:1044
#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:1889
#define TB_GETRECT
Definition: commctrl.h:1153
#define TTF_IDISHWND
Definition: commctrl.h:1764
#define CCS_NODIVIDER
Definition: commctrl.h:2253
#define CCS_TOP
Definition: commctrl.h:2247
#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:2251
#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
static calc_node_t temp
Definition: rpn_ieee.c:38
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:2187
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2211
#define FCIDM_MENU_FAVORITES
Definition: shlobj.h:647
#define TLOG_FORE
Definition: shlobj.h:2746
#define TLMENUF_BACK
Definition: shlobj.h:2750
#define TLMENUF_FORE
Definition: shlobj.h:2751
#define TLOG_BACK
Definition: shlobj.h:2745
@ SMIF_DROPCASCADE
Definition: shobjidl.idl:2795
@ SMIF_TRACKPOPUP
Definition: shobjidl.idl:2798
@ SMIM_ICON
Definition: shobjidl.idl:2779
@ SMIM_FLAGS
Definition: shobjidl.idl:2778
@ DBID_BANDINFOCHANGED
Definition: shobjidl.idl:2528
#define FCIDM_SHVIEW_AUTOARRANGE
Definition: shresdef.h:869
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:2500
WCHAR wszTitle[256]
Definition: shobjidl.idl:2498
UINT_PTR idFrom
Definition: winuser.h:3169
HWND hwndFrom
Definition: winuser.h:3168
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:2747
PUITEMID_CHILD pidlItem
Definition: shobjidl.idl:2749
IShellFolder * psf
Definition: shobjidl.idl:2750
DWORD dwMask
Definition: shobjidl.idl:2760
DWORD dwFlags
Definition: shobjidl.idl:2762
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:904
#define ITID_TOOLBARBANDSHOWN
Definition: undocshell.h:902
#define ITBBID_ADDRESSBAND
Definition: undocshell.h:896
#define SMC_EXEC
Definition: undocshell.h:801
#define ITBBID_TOOLSBAND
Definition: undocshell.h:895
#define ITBBID_BRANDBAND
Definition: undocshell.h:894
#define ITID_AUTOHIDEENABLED
Definition: undocshell.h:906
#define ITID_TEXTLABELS
Definition: undocshell.h:901
#define ITID_MENUBANDSHOWN
Definition: undocshell.h:905
#define ITID_CUSTOMIZEENABLED
Definition: undocshell.h:907
#define ITID_ADDRESSBANDSHOWN
Definition: undocshell.h:903
#define ITID_TOOLBARLOCKED
Definition: undocshell.h:908
#define ITBBID_MENUBAND
Definition: undocshell.h:893
#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:2798
_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_NOINTERFACE
Definition: winerror.h:2364
#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:5775
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define SW_HIDE
Definition: winuser.h:779
#define SWP_NOACTIVATE
Definition: winuser.h:1253
#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:2391
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:1255
#define WM_COMMAND
Definition: winuser.h:1751
#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:1256
#define SIZE_MINIMIZED
Definition: winuser.h:2517
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:2394
#define IDC_SIZENS
Definition: winuser.h:703
#define HWND_TOP
Definition: winuser.h:1218
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MK_CONTROL
Definition: winuser.h:2381
#define MF_SEPARATOR
Definition: winuser.h:137
#define TPM_LEFTALIGN
Definition: winuser.h:2388
#define HTCLIENT
Definition: winuser.h:2486
#define SendMessage
Definition: winuser.h:5863
#define LoadCursor
Definition: winuser.h:5832
#define LoadMenu
Definition: winuser.h:5837
#define WS_EX_LTRREADING
Definition: winuser.h:393
HWND WINAPI GetParent(_In_ HWND)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define SWP_NOOWNERZORDER
Definition: winuser.h:1260
int WINAPI GetDlgCtrlID(_In_ HWND)
#define SW_SHOW
Definition: winuser.h:786
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define TPM_RETURNCMD
Definition: winuser.h:2398
#define SWP_NOZORDER
Definition: winuser.h:1258
BOOL WINAPI DestroyWindow(_In_ HWND)
#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