ReactOS 0.4.16-dev-1151-g3842b59
CISFBand.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS shell extensions
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Quick Launch Toolbar (Taskbar Shell Extension)
5 * COPYRIGHT: Copyright 2017 Shriraj Sawant a.k.a SR13 <sr.official@hotmail.com>
6 * Copyright 2017-2018 Giannis Adamopoulos
7 * Copyright 2023-2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
8 */
9
10#include "shellbars.h"
11
12#include <commoncontrols.h>
13#include <shellapi.h>
14#include <wingdi.h>
15#include <uxtheme.h>
16
17#undef SubclassWindow // Don't use SubclassWindow macro
18
19/*
20TODO:
21 ** drag and drop support
22 ** tooltips
23 ** Fix position of the items context menu
24 ** Implement responding to theme change
25*/
26
27#define TIMERID_DELAYED_REFRESH 0xBEEFCAFE
28#define TIMER_REFRESH_DELAY 500
29
30//*****************************************************************************************
31// *** CISFBand ***
32
34 : m_BandID(0)
35 , m_uChangeNotify(0)
36 , m_bShowText(TRUE)
37 , m_bSmallIcon(TRUE)
38 , m_QLaunch(FALSE)
39{
40}
41
43{
44}
45
47{
48 // Create the toolbar.
50 HWND hwndToolbar = ::CreateWindowExW(0, TOOLBARCLASSNAMEW, NULL, style, 0, 0, 0, 0,
51 hWndParent, NULL, 0, NULL);
52 if (!hwndToolbar)
53 return E_FAIL;
54
55 SubclassWindow(hwndToolbar);
56 ATLASSERT(m_hWnd);
57
60
61 return AddToolbarButtons();
62}
63
65{
67 return AddToolbarButtons();
68}
69
71{
72 CComPtr<IEnumIDList> pEnum;
73 HRESULT hr = m_pISF->EnumObjects(0, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &pEnum);
75 return hr;
76
77 LPITEMIDLIST pidl;
78 for (INT iItem = 0; pEnum->Next(1, &pidl, NULL) == S_OK; ++iItem)
79 {
80 STRRET strret;
81 hr = m_pISF->GetDisplayNameOf(pidl, SHGDN_NORMAL, &strret);
82
83 WCHAR szText[MAX_PATH];
85 szText[0] = UNICODE_NULL;
86 else
87 StrRetToBufW(&strret, pidl, szText, _countof(szText));
88
90 TBBUTTON tb = { iImage, iItem, TBSTATE_ENABLED, BTNS_AUTOSIZE, { 0 },
91 (DWORD_PTR)pidl, (INT_PTR)szText };
93 }
94
96 return BandInfoChanged();
97}
98
100{
101 // Assumption: Deleting a button causes the remaining buttons to shift,
102 // so the next button always appears at index 0. This ensures the loop
103 // progresses and avoids infinite loops.
104 TBBUTTON tb;
105 while (SendMessage(TB_GETBUTTON, 0, (LPARAM)&tb))
106 {
109 }
110}
111
113{
114 if (bRegister)
115 {
116 if (!m_pidl)
117 return FALSE;
118#define SHCNE_WATCH (SHCNE_RENAMEITEM | SHCNE_CREATE | SHCNE_DELETE | SHCNE_MKDIR | \
119 SHCNE_RMDIR | SHCNE_UPDATEDIR | SHCNE_UPDATEITEM | SHCNE_UPDATEIMAGE | \
120 SHCNE_RENAMEFOLDER | SHCNE_ASSOCCHANGED)
124 1, &entry);
125 return m_uChangeNotify != 0;
126 }
127 else // De-register?
128 {
129 if (m_uChangeNotify)
130 {
132 m_uChangeNotify = 0;
133 return TRUE;
134 }
135 return FALSE;
136 }
137}
138
140{
141 m_bSmallIcon = bSmall;
142
143 CComPtr<IImageList> piml;
146 return hr;
147
148 SendMessage(TB_SETIMAGELIST, 0, (LPARAM)(HIMAGELIST)piml.Detach());
149 return S_OK;
150}
151
153{
154 if (!m_Site)
155 return S_OK;
158 return hr;
159 return S_OK;
160}
161
163{
164 // NOTE: TBSTYLE_EX_MIXEDBUTTONS hides non-BTNS_SHOWTEXT buttons' text.
165 m_bShowText = bShow;
167 return S_OK;
168}
169
170//****************************************************************************
171// Message handlers
172
173// WM_TIMER
175{
177 {
180 }
181 return 0;
182}
183
184// WM_ISFBAND_CHANGE_NOTIFY
186{
187 // This code reduces the redrawing cost by coalescing multiple change events
190 return 0;
191}
192
193// WM_DESTROY
195{
200 UnsubclassWindow();
201 bHandled = FALSE;
202 return 0;
203}
204
205/*****************************************************************************/
206
207// *** IObjectWithSite ***
209{
210 HRESULT hr;
212
213 TRACE("CISFBand::SetSite(0x%p)\n", pUnkSite);
214
215 hr = IUnknown_GetWindow(pUnkSite, &hwndParent);
216 if (FAILED(hr))
217 {
218 TRACE("Querying site window failed: 0x%x\n", hr);
219 return hr;
220 }
221 m_Site = pUnkSite;
222
225 return hr;
226
228 return S_OK;
229}
230
232{
233 TRACE("CISFBand::GetSite(0x%p,0x%p)\n", riid, ppvSite);
234
235 HRESULT hr;
236 if (m_Site != NULL)
237 {
238 hr = m_Site->QueryInterface(riid, ppvSite);
239 if (FAILED(hr)) return hr;
240 }
241
242 *ppvSite = NULL;
243 return E_FAIL;
244}
245
246/*****************************************************************************/
247// *** IDeskBand ***
249{
250 if (!m_hWnd)
251 return E_FAIL;
252 if (!phwnd)
253 return E_POINTER;
254 *phwnd = m_hWnd;
255
256 return S_OK;
257}
258
260{
261 /* FIXME: Implement */
262 return E_NOTIMPL;
263}
264
266{
267 if (m_hWnd)
268 {
269 ShowWindow(bShow ? SW_SHOW : SW_HIDE);
270 return S_OK;
271 }
272
273 return E_FAIL;
274}
275
277{
278 if (m_hWnd)
279 {
281 return S_OK;
282 }
283
284 return E_FAIL;
285}
286
287STDMETHODIMP CISFBand::ResizeBorderDW(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved)
288{
289 /* No need to implement this method */
290 return E_NOTIMPL;
291}
292
294{
295 TRACE("CTaskBand::GetBandInfo(0x%x,0x%x,0x%p) hWnd=0x%p\n", dwBandID, dwViewMode, pdbi, m_hWnd);
296
297 if (m_hWnd && pdbi)
298 {
299 m_BandID = dwBandID;
300
301 RECT actualRect;
302 POINTL actualSize;
303 POINTL idealSize;
304 POINTL maxSize;
305 POINTL itemSize;
306
307 GetWindowRect(&actualRect);
308 actualSize.x = actualRect.right - actualRect.left;
309 actualSize.y = actualRect.bottom - actualRect.top;
310
311 // Obtain the ideal size, to be used as min and max
312 SendMessageW(m_hWnd, TB_AUTOSIZE, 0, 0);
313 SendMessageW(m_hWnd, TB_GETMAXSIZE, 0, reinterpret_cast<LPARAM>(&maxSize));
314
315 idealSize = maxSize;
316 SendMessageW(m_hWnd, TB_GETIDEALSIZE, FALSE, reinterpret_cast<LPARAM>(&idealSize));
317
318 // Obtain the button size, to be used as the integral size
319 DWORD size = SendMessageW(m_hWnd, TB_GETBUTTONSIZE, 0, 0);
320 itemSize.x = GET_X_LPARAM(size);
321 itemSize.y = GET_Y_LPARAM(size);
322
323 if (pdbi->dwMask & DBIM_MINSIZE)
324 {
325 if (m_QLaunch)
326 pdbi->ptMinSize.x = idealSize.x;
327 else
328 pdbi->ptMinSize.x = -1;
329 pdbi->ptMinSize.y = idealSize.y;
330 }
331 if (pdbi->dwMask & DBIM_MAXSIZE)
332 {
333 pdbi->ptMaxSize = maxSize;
334 }
335 if (pdbi->dwMask & DBIM_INTEGRAL)
336 {
337 pdbi->ptIntegral = itemSize;
338 }
339 if (pdbi->dwMask & DBIM_ACTUAL)
340 {
341 pdbi->ptActual = actualSize;
342 }
343 if (pdbi->dwMask & DBIM_TITLE)
344 {
345 if (m_QLaunch || !ILGetDisplayNameEx(NULL, m_pidl, pdbi->wszTitle, ILGDN_INFOLDER))
346 {
347 pdbi->dwMask &= ~DBIM_TITLE;
348 }
349 }
350 if (pdbi->dwMask & DBIM_MODEFLAGS)
351 {
352 pdbi->dwModeFlags = DBIMF_NORMAL | DBIMF_VARIABLEHEIGHT | DBIMF_USECHEVRON | DBIMF_NOMARGINS | DBIMF_BKCOLOR;
353 if (m_QLaunch)
354 {
355 pdbi->dwModeFlags |= DBIMF_ADDTOFRONT;
356 }
357 }
358 if (pdbi->dwMask & DBIM_BKCOLOR)
359 pdbi->dwMask &= ~DBIM_BKCOLOR;
360
361 return S_OK;
362 }
363
364 return E_FAIL;
365}
366
367/*****************************************************************************/
368// *** IPersistStream ***
370{
371 *pClassID = CLSID_ISFBand;
372 return S_OK;
373}
374
376{
377 /* The object hasn't changed since the last save! */
378 return S_FALSE;
379}
380
382{
383 TRACE("CISFBand::Load called\n");
384 /* Nothing to do */
385 return S_OK;
386}
387
389{
390 /* Nothing to do */
391 return S_OK;
392}
393
395{
396 TRACE("CISFBand::GetSizeMax called\n");
397 return S_OK;
398}
399
400/*****************************************************************************/
401// *** IWinEventHandler ***
403{
404 if (hWnd == m_hWnd || IsChild(hWnd))
405 {
406 TRACE("CISFBand::ContainsWindow(0x%p) returns S_OK\n", hWnd);
407 return S_OK;
408 }
409
410 return S_FALSE;
411}
412
414{
415 switch (uMsg)
416 {
417 case WM_COMMAND:
418 {
419 TBBUTTON tb;
421 if (chk)
423
424 if (theResult)
425 *theResult = TRUE;
426 break;
427 }
428 case WM_NOTIFY:
429 {
430 switch (((LPNMHDR)lParam)->code)
431 {
432 case NM_RCLICK:
433 {
434 HRESULT hr;
435 POINT pt = ((LPNMMOUSE)lParam)->pt; // Already in screen coordinates
436 CComPtr<IContextMenu> picm;
437 HMENU fmenu = CreatePopupMenu();
438 TBBUTTON tb;
439
440 bool chk = SendMessage(m_hWnd, TB_GETBUTTON, ((LPNMMOUSE)lParam)->dwItemSpec, (LPARAM)&tb);
441 LPITEMIDLIST pidl = (LPITEMIDLIST)tb.dwData;
442
443 if (chk)
444 {
445 hr = m_pISF->GetUIObjectOf(m_hWnd, 1, &pidl, IID_NULL_PPV_ARG(IContextMenu, &picm));
447 return hr;
448
449 hr = picm->QueryContextMenu(fmenu, 0, 1, 0x7FFF, CMF_DEFAULTONLY);
451 return hr;
452
453 int id = TrackPopupMenuEx(fmenu, TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_RETURNCMD, pt.x, pt.y, m_hWnd, 0);
454 if (id > 0)
455 {
457 info.cbSize = sizeof(info);
458 info.fMask = CMIC_MASK_PTINVOKE;
459 if (GetKeyState(VK_CONTROL) < 0)
460 {
461 info.fMask |= CMIC_MASK_CONTROL_DOWN;
462 }
463 if (GetKeyState(VK_SHIFT) < 0)
464 {
465 info.fMask |= CMIC_MASK_SHIFT_DOWN;
466 }
467 info.hwnd = m_hWnd;
468 info.lpVerb = MAKEINTRESOURCEA(id - 1);
469 info.nShow = SW_SHOWNORMAL;
470 info.ptInvoke = pt;
471 picm->InvokeCommand((LPCMINVOKECOMMANDINFO)&info);
472 }
473 }
474 DestroyMenu(fmenu);
475
476 if (theResult)
477 *theResult = TRUE;
478 break;
479 }
480 default:
481 if (theResult)
482 *theResult = FALSE;
483 }
484
485 break;
486 }
487 default:
488 if (theResult)
489 *theResult = FALSE;
490 }
491
492 return S_OK;
493}
494
496{
497 return (hWnd == m_hWnd) ? S_OK : S_FALSE;
498}
499
500/*****************************************************************************/
501// *** IOleCommandTarget methods ***
502STDMETHODIMP CISFBand::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText)
503{
505
506 return E_NOTIMPL;
507}
508
509STDMETHODIMP CISFBand::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
510{
511 if (IsEqualIID(*pguidCmdGroup, IID_IBandSite))
512 return S_OK;
513
514 if (IsEqualIID(*pguidCmdGroup, IID_IDeskBand))
515 {
516 if (nCmdID == DBID_SETWINDOWTHEME)
517 {
518 if (pvaIn && V_VT(pvaIn) == VT_BSTR && V_BSTR(pvaIn))
519 {
520 SetWindowTheme(m_hWnd, V_BSTR(pvaIn), NULL);
521 }
522 }
523 return S_OK;
524 }
525
527
528 return E_NOTIMPL;
529}
530
531/*****************************************************************************/
532// *** IShellFolderBand ***
534{
535 if (pbi->dwMask == ISFB_MASK_IDLIST)
536 {
537 pbi->pidl = ILClone(m_pidl);
538 if (!pbi->pidl)
539 return E_OUTOFMEMORY;
540 return S_OK;
541 }
542
543 return E_NOTIMPL;
544}
545
547{
548 HRESULT hr;
549
550 if (!psf && !pidl)
551 return E_INVALIDARG;
552
553 if (psf && pidl)
554 return E_INVALIDARG;
555
556 m_pidl.Free();
557
558 if (pidl != NULL)
559 {
560 CComPtr<IShellFolder> psfDesktop;
561 hr = SHGetDesktopFolder(&psfDesktop);
563 return hr;
564
565 if (_ILIsDesktop(pidl))
566 {
567 m_pISF = psfDesktop;
568 }
569 else
570 {
571 hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, &m_pISF));
573 return hr;
574 }
575
576 m_pidl.Attach(ILClone(pidl));
577 if (!m_pidl)
578 ERR("Out of memory\n");
579 }
580
581 if (psf != NULL)
582 {
583 CComPtr<IPersistFolder2> ppf2;
586 return hr;
587
588 hr = ppf2->GetCurFolder(&m_pidl);
590 return hr;
591
593 m_pISF = psf;
594 }
595
596 return S_OK;
597}
598
600{
601 if ((pbi->dwMask & ISFB_MASK_STATE) &&
602 (pbi->dwState & ISFB_STATE_QLINKSMODE) &&
603 (pbi->dwStateMask & ISFB_STATE_QLINKSMODE))
604 {
605 m_QLaunch = TRUE;
607 return BandInfoChanged();
608 }
609
610 return E_NOTIMPL;
611}
612
613/*****************************************************************************/
614// *** IContextMenu ***
616{
617 /*HRESULT hr = E_INVALIDARG;
618
619 if (idCmd == IDM_DISPLAY)
620 {
621 switch (uFlags)
622 {
623 case GCS_HELPTEXTW:
624 // Only useful for pre-Vista versions of Windows that
625 // have a Status bar.
626 hr = StringCchCopyW(reinterpret_cast<PWSTR>(pszName),
627 cchMax,
628 L"Display File Name");
629 break;
630
631 case GCS_VERBW:
632 // GCS_VERBW is an optional feature that enables a caller
633 // to discover the canonical name for the verb that is passed in
634 // through idCommand.
635 hr = StringCchCopyW(reinterpret_cast<PWSTR>(pszName),
636 cchMax,
637 L"DisplayFileName");
638 break;
639 }
640 }
641 return hr; */
642
643 return S_OK;
644}
645
647{
648 if (!HIWORD(pici->lpVerb))
649 {
650 switch (LOWORD(pici->lpVerb))
651 {
652 case IDM_LARGE_ICONS:
653 {
655 if (FAILED(hr))
656 return hr;
657 return BandInfoChanged();
658 }
659 case IDM_SMALL_ICONS:
660 {
662 if (FAILED(hr))
663 return hr;
664 return BandInfoChanged();
665 }
666 case IDM_OPEN_FOLDER:
667 {
668 SHELLEXECUTEINFOW shexinfo = { sizeof(shexinfo) };
669 shexinfo.fMask = SEE_MASK_IDLIST;
670 shexinfo.lpVerb = L"open";
671 shexinfo.lpIDList = m_pidl;
672 shexinfo.nShow = SW_SHOW;
673 if (!ShellExecuteExW(&shexinfo))
674 return E_FAIL;
675 break;
676 }
677 case IDM_SHOW_TEXT:
678 {
680 return BandInfoChanged();
681 }
682 default:
683 return E_FAIL;
684 }
685 }
686
687 return S_OK;
688}
689
691{
693
695
696 if (m_bSmallIcon)
697 {
700 }
701 else
702 {
705 }
706
707 if (_ILIsDesktop(m_pidl))
709
710 UINT idMax = Shell_MergeMenus(hmenu, GetSubMenu(qMenu, 0), indexMenu, idCmdFirst, idCmdLast, MM_SUBMENUSHAVEIDS);
711 DestroyMenu(qMenu);
712 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(idMax - idCmdFirst +1));
713}
714
715/*****************************************************************************/
716// C Constructor
717
720{
721 return ShellObjectCreator<CISFBand>(riid, ppv);
722}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
#define ATLASSERT(x)
Definition: CComVariant.cpp:10
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
EXTERN_C HRESULT WINAPI RSHELL_CISFBand_CreateInstance(REFIID riid, void **ppv)
Definition: CISFBand.cpp:719
#define SHCNE_WATCH
#define TIMER_REFRESH_DELAY
Definition: CISFBand.cpp:28
#define TIMERID_DELAYED_REFRESH
Definition: CISFBand.cpp:27
#define WM_ISFBAND_CHANGE_NOTIFY
Definition: CISFBand.h:12
UINT cchMax
Arabic default style
Definition: afstyles.h:94
HWND hWnd
Definition: settings.c:17
#define ERR(fmt,...)
Definition: precomp.h:57
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
EXTERN_C ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, INT fSources, LONG wEventMask, UINT uMsg, INT cItems, SHChangeNotifyEntry *lpItems)
EXTERN_C BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CISFBand.cpp:174
HRESULT ShowHideText(_In_ BOOL bShow)
Definition: CISFBand.cpp:162
STDMETHOD() ContextSensitiveHelp(IN BOOL fEnterMode) override
Definition: CISFBand.cpp:259
HRESULT CreateSimpleToolbar(HWND hWndParent)
Definition: CISFBand.cpp:46
CComPtr< IUnknown > m_Site
Definition: CISFBand.h:28
STDMETHOD() ShowDW(IN BOOL bShow) override
Definition: CISFBand.cpp:265
STDMETHOD() Load(IN IStream *pStm) override
Definition: CISFBand.cpp:381
UINT m_uChangeNotify
Definition: CISFBand.h:33
STDMETHOD() SetSite(IN IUnknown *pUnkSite) override
Definition: CISFBand.cpp:208
STDMETHOD() GetCommandString(UINT_PTR idCmd, UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax) override
Definition: CISFBand.cpp:615
HRESULT BandInfoChanged()
Definition: CISFBand.cpp:152
BOOL RegisterChangeNotify(_In_ BOOL bRegister)
Definition: CISFBand.cpp:112
STDMETHOD() InitializeSFB(IShellFolder *psf, PCIDLIST_ABSOLUTE pidl) override
Definition: CISFBand.cpp:546
STDMETHOD() CloseDW(IN DWORD dwReserved) override
Definition: CISFBand.cpp:276
STDMETHOD() QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override
Definition: CISFBand.cpp:690
CISFBand()
Definition: CISFBand.cpp:33
DWORD m_BandID
Definition: CISFBand.h:27
BOOL m_QLaunch
Definition: CISFBand.h:38
STDMETHOD() OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) override
Definition: CISFBand.cpp:413
HRESULT SetImageListIconSize(_In_ BOOL bSmall)
Definition: CISFBand.cpp:139
STDMETHOD() GetBandInfo(IN DWORD dwBandID, IN DWORD dwViewMode, IN OUT DESKBANDINFO *pdbi) override
Definition: CISFBand.cpp:293
BOOL m_bShowText
Definition: CISFBand.h:36
HRESULT AddToolbarButtons()
Definition: CISFBand.cpp:70
CComHeapPtr< ITEMIDLIST_ABSOLUTE > m_pidl
Definition: CISFBand.h:32
STDMETHOD() ContainsWindow(IN HWND hWnd)
Definition: CISFBand.cpp:402
STDMETHOD() InvokeCommand(LPCMINVOKECOMMANDINFO pici) override
Definition: CISFBand.cpp:646
BOOL m_bSmallIcon
Definition: CISFBand.h:37
virtual ~CISFBand()
Definition: CISFBand.cpp:42
STDMETHOD() ResizeBorderDW(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override
Definition: CISFBand.cpp:287
STDMETHOD() Exec(IN const GUID *pguidCmdGroup, IN DWORD nCmdID, IN DWORD nCmdexecopt, IN VARIANT *pvaIn, IN OUT VARIANT *pvaOut) override
Definition: CISFBand.cpp:509
STDMETHOD() IsDirty() override
Definition: CISFBand.cpp:375
LRESULT OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CISFBand.cpp:185
STDMETHOD() QueryStatus(IN const GUID *pguidCmdGroup, IN ULONG cCmds, IN OUT OLECMD prgCmds[], IN OUT OLECMDTEXT *pCmdText) override
Definition: CISFBand.cpp:502
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CISFBand.cpp:194
STDMETHOD() GetWindow(OUT HWND *phwnd) override
Definition: CISFBand.cpp:248
STDMETHOD() GetSizeMax(OUT ULARGE_INTEGER *pcbSize) override
Definition: CISFBand.cpp:394
STDMETHOD() GetSite(IN REFIID riid, OUT void **ppvSite) override
Definition: CISFBand.cpp:231
STDMETHOD() IsWindowOwner(HWND hWnd) override
Definition: CISFBand.cpp:495
HRESULT RefreshToolbar()
Definition: CISFBand.cpp:64
void DeleteToolbarButtons()
Definition: CISFBand.cpp:99
STDMETHOD() GetClassID(OUT CLSID *pClassID) override
Definition: CISFBand.cpp:369
CComPtr< IShellFolder > m_pISF
Definition: CISFBand.h:31
STDMETHOD() SetBandInfoSFB(PBANDINFOSFB pbi) override
Definition: CISFBand.cpp:599
STDMETHOD() GetBandInfoSFB(PBANDINFOSFB pbi) override
Definition: CISFBand.cpp:533
STDMETHOD() Save(IN IStream *pStm, IN BOOL fClearDirty) override
Definition: CISFBand.cpp:388
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static HWND hwndParent
Definition: cryptui.c:300
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#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
UINT uFlags
Definition: api.c:59
#define IDM_SMALL_ICONS
Definition: resource.h:72
#define IDM_POPUPMENU
Definition: resource.h:70
#define IDM_OPEN_FOLDER
Definition: resource.h:75
#define IDM_LARGE_ICONS
Definition: resource.h:71
#define IDM_SHOW_TEXT
Definition: resource.h:73
#define MAX_PATH
Definition: compat.h:34
@ VT_BSTR
Definition: compat.h:2303
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:65
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
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
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h: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
GLsizeiptr size
Definition: glext.h:5919
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:772
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
if(dx< 0)
Definition: linetemp.h:194
static const WCHAR tb[]
Definition: suminfo.c:285
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static HMENU hmenu
Definition: win.c:66
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
_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 _In_
Definition: no_sal2.h:158
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
unsigned short USHORT
Definition: pedump.c:61
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
Definition: pidl.c:171
#define TB_SETEXTENDEDSTYLE
Definition: commctrl.h:1190
#define TB_AUTOSIZE
Definition: commctrl.h:1137
#define BTNS_AUTOSIZE
Definition: commctrl.h:1004
#define TB_GETIDEALSIZE
Definition: commctrl.h:1284
#define TB_DELETEBUTTON
Definition: commctrl.h:1108
#define TBSTYLE_LIST
Definition: commctrl.h:993
#define TBSTYLE_EX_MIXEDBUTTONS
Definition: commctrl.h:1012
#define TB_GETBUTTONSIZE
Definition: commctrl.h:1160
#define TB_INSERTBUTTONW
Definition: commctrl.h:1265
#define TB_SETIMAGELIST
Definition: commctrl.h:1150
#define TB_GETBUTTON
Definition: commctrl.h:1109
#define TB_GETMAXSIZE
Definition: commctrl.h:1189
#define CCS_NODIVIDER
Definition: commctrl.h:2253
#define TOOLBARCLASSNAMEW
Definition: commctrl.h:943
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define TBSTYLE_FLAT
Definition: commctrl.h:992
#define NM_RCLICK
Definition: commctrl.h:133
struct tagNMMOUSE * LPNMMOUSE
#define CCS_NORESIZE
Definition: commctrl.h:2250
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define WM_NOTIFY
Definition: richedit.h:61
#define SHIL_SMALL
Definition: shellapi.h:186
#define SEE_MASK_IDLIST
Definition: shellapi.h:27
#define SHIL_LARGE
Definition: shellapi.h:185
HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv)
Definition: shellord.c:2674
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2474
HRESULT hr
Definition: shlfolder.c:183
UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
Definition: shlmenu.c:856
#define ISFB_MASK_STATE
Definition: shlobj.h:2792
#define ISFB_STATE_QLINKSMODE
Definition: shlobj.h:2795
#define SHCNRF_NewDelivery
Definition: shlobj.h:1946
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2537
#define SHCNRF_ShellLevel
Definition: shlobj.h:1944
#define ISFB_MASK_IDLIST
Definition: shlobj.h:2793
@ DBID_BANDINFOCHANGED
Definition: shobjidl.idl:2528
@ DBID_SETWINDOWTHEME
Definition: shobjidl.idl:2534
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
LONG y
Definition: windef.h:330
LONG x
Definition: windef.h:329
Definition: inflate.c:139
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define DWORD_PTR
Definition: treelist.c:76
int32_t INT_PTR
Definition: typedefs.h:64
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define OUT
Definition: typedefs.h:40
#define ILGDN_INFOLDER
Definition: undocshell.h:73
HRESULT WINAPI SetWindowTheme(_In_ HWND hwnd, _In_ LPCWSTR pszSubAppName, _In_ LPCWSTR pszSubIdList)
Definition: uxthemesupp.c:69
_Inout_ PERBANDINFO * pbi
Definition: winddi.h:3917
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#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 SEVERITY_SUCCESS
Definition: winerror.h:64
#define E_POINTER
Definition: winerror.h:2365
#define SW_SHOWNORMAL
Definition: winuser.h:781
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define SW_HIDE
Definition: winuser.h:779
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_COMMAND
Definition: winuser.h:1751
#define TPM_BOTTOMALIGN
Definition: winuser.h:2396
#define VK_CONTROL
Definition: winuser.h:2214
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MF_CHECKED
Definition: winuser.h:132
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
#define MF_UNCHECKED
Definition: winuser.h:204
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
BOOL WINAPI IsChild(_In_ HWND, _In_ HWND)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define TPM_LEFTALIGN
Definition: winuser.h:2388
#define SendMessage
Definition: winuser.h:5863
#define LoadMenu
Definition: winuser.h:5837
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define VK_SHIFT
Definition: winuser.h:2213
#define SW_SHOW
Definition: winuser.h:786
#define TPM_RETURNCMD
Definition: winuser.h:2398
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
BOOL WINAPI DestroyWindow(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
SHORT WINAPI GetKeyState(_In_ int)
#define IID_PPV_ARG(Itype, ppType)
#define IID_NULL_PPV_ARG(Itype, ppType)
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180