Reactos
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 Shriraj Sawant a.k.a SR13 <sr.official@hotmail.com>
6 */
7#pragma once
8
9extern const GUID CLSID_QuickLaunchBand;
10
11// Component category registration
12HRESULT RegisterComCat();
13HRESULT UnregisterComCat();
14
15// COM class for quick launch
16class CQuickLaunchBand :
17 public CComCoClass<CQuickLaunchBand, &CLSID_QuickLaunchBand>,
18 public CComObjectRootEx<CComMultiThreadModelNoCS>,
19 public IObjectWithSite,
20 public IDeskBand,
21 public IPersistStream,
22 public IWinEventHandler,
23 public IOleCommandTarget,
24 public IContextMenu
25{
26 HWND m_hWndBro;
27 CComPtr<IUnknown> m_punkISFB;
28
29public:
30 CQuickLaunchBand();
31 virtual ~CQuickLaunchBand();
32
33 STDMETHOD(ContainsWindow)(IN HWND hWnd);
34
35// ATL construct
36
37 HRESULT FinalConstruct();
38
39// IObjectWithSite
40
41 STDMETHOD(GetSite)(
42 IN REFIID riid,
43 OUT void **ppvSite) override;
44
45 STDMETHOD(SetSite)(IN IUnknown *pUnkSite) override;
46
47// IDeskBand
48
49 STDMETHOD(GetWindow)(OUT HWND *phwnd) override;
50
51 STDMETHOD(ContextSensitiveHelp)(IN BOOL fEnterMode) override;
52
53 STDMETHOD(ShowDW)(IN BOOL bShow) override;
54
55 STDMETHOD(CloseDW)(IN DWORD dwReserved) override;
56
57 STDMETHOD(ResizeBorderDW)(
58 LPCRECT prcBorder,
59 IUnknown *punkToolbarSite,
60 BOOL fReserved) override;
61
62 STDMETHOD(GetBandInfo)(
63 IN DWORD dwBandID,
64 IN DWORD dwViewMode,
65 IN OUT DESKBANDINFO *pdbi) override;
66
67// IPersistStream
68
69 STDMETHOD(GetClassID)(OUT CLSID *pClassID) override;
70
71 STDMETHOD(GetSizeMax)(OUT ULARGE_INTEGER *pcbSize) override;
72
73 STDMETHOD(IsDirty)() override;
74
75 STDMETHOD(Load)(IN IStream *pStm) override;
76
77 STDMETHOD(Save)(
78 IN IStream *pStm,
79 IN BOOL fClearDirty) override;
80
81// IWinEventHandler
82
83 STDMETHOD(OnWinEvent)(
84 HWND hWnd,
85 UINT uMsg,
86 WPARAM wParam,
87 LPARAM lParam,
88 LRESULT *theResult) override;
89
90 STDMETHOD(IsWindowOwner)(HWND hWnd) override;
91
92// IOleCommandTarget
93
94 STDMETHOD(Exec)(
95 IN const GUID *pguidCmdGroup,
96 IN DWORD nCmdID,
97 IN DWORD nCmdexecopt,
98 IN VARIANT *pvaIn,
99 IN OUT VARIANT *pvaOut) override;
100
101 STDMETHOD(QueryStatus)(
102 IN const GUID *pguidCmdGroup,
103 IN ULONG cCmds,
104 IN OUT OLECMD prgCmds[],
105 IN OUT OLECMDTEXT *pCmdText) override;
106
107// IContextMenu
108 STDMETHOD(GetCommandString)(
109 UINT_PTR idCmd,
110 UINT uFlags,
111 UINT *pwReserved,
112 LPSTR pszName,
113 UINT cchMax) override;
114
115 STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO pici) override;
116
117 STDMETHOD(QueryContextMenu)(
118 HMENU hmenu,
119 UINT indexMenu,
120 UINT idCmdFirst,
121 UINT idCmdLast,
122 UINT uFlags) override;
123
124//*****************************************************************************************************
125
126 DECLARE_NOT_AGGREGATABLE(CQuickLaunchBand)
127 DECLARE_PROTECT_FINAL_CONSTRUCT()
128
129 BEGIN_COM_MAP(CQuickLaunchBand)
130 COM_INTERFACE_ENTRY2_IID(IID_IOleWindow, IOleWindow, IDeskBand)
131 COM_INTERFACE_ENTRY2_IID(IID_IDockingWindow, IDockingWindow, IDeskBand)
132 COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
133 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
134 COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
135 COM_INTERFACE_ENTRY_IID(IID_IPersistStream, IPersistStream)
136 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
137 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
138 COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
139 END_COM_MAP()
140};