ReactOS 0.4.15-dev-7953-g1f49173
explorerband.h
Go to the documentation of this file.
1/*
2 * ReactOS Explorer
3 *
4 * Copyright 2016 Sylvain Deverre <deverre dot sylv at gmail dot com>
5 * Copyright 2020 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#pragma once
23
24#define WM_USER_SHELLEVENT WM_USER+88
25#define WM_USER_FOLDEREVENT WM_USER+88
26
28 public CComCoClass<CExplorerBand, &CLSID_ExplorerBand>,
29 public CComObjectRootEx<CComMultiThreadModelNoCS>,
30 public IDeskBand,
31 public IObjectWithSite,
32 public IInputObject,
33 public IPersistStream,
34 public IOleCommandTarget,
35 public IServiceProvider,
36 public IBandNavigate,
37 public IWinEventHandler,
38 public INamespaceProxy,
39 public IDispatch,
40 public IDropSource,
41 public IDropTarget,
42 public CWindowImpl<CExplorerBand, CWindow, CControlWinTraits>
43{
44
45private:
47 {
48 public:
52 };
53
54 // *** BaseBarSite information ***
55 CComPtr<IUnknown> m_pSite;
56 CComPtr<IShellFolder> m_pDesktop;
57
58 // *** tree explorer band stuff ***
68
69 // *** notification cookies ***
72
73 // *** Drop target information ***
74 CComPtr<IDropTarget> m_pDropTarget;
76 CComPtr<IDataObject> m_pCurObject;
77
80 HRESULT ExecuteCommand(CComPtr<IContextMenu>& menu, UINT nCmd);
81
82 // *** notifications handling ***
86 void OnTreeItemDragging(LPNMTREEVIEW pnmtv, BOOL isRightClick);
87
88 // *** ATL event handlers ***
94
95 // *** Helper functions ***
98 HTREEITEM InsertItem(HTREEITEM hParent, IShellFolder *psfParent, LPITEMIDLIST pElt, LPITEMIDLIST pEltRelative, BOOL bSort);
99 HTREEITEM InsertItem(HTREEITEM hParent, LPITEMIDLIST pElt, LPITEMIDLIST pEltRelative, BOOL bSort);
102 BOOL DeleteItem(LPITEMIDLIST toDelete);
103 BOOL RenameItem(HTREEITEM toRename, LPITEMIDLIST newPidl);
106
107 // *** Tree item sorting callback ***
108 static int CALLBACK CompareTreeItems(LPARAM p1, LPARAM p2, LPARAM p3);
109
110public:
112 virtual ~CExplorerBand();
113
114 // *** IOleWindow methods ***
115 STDMETHOD(GetWindow)(HWND *lphwnd) override;
116 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override;
117
118 // *** IDockingWindow methods ***
120 STDMETHOD(ResizeBorderDW)(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override;
121 STDMETHOD(ShowDW)(BOOL fShow) override;
122
123 // *** IDeskBand methods ***
124 STDMETHOD(GetBandInfo)(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi) override;
125
126 // *** IObjectWithSite methods ***
127 STDMETHOD(SetSite)(IUnknown *pUnkSite) override;
128 STDMETHOD(GetSite)(REFIID riid, void **ppvSite) override;
129
130 // *** IOleCommandTarget methods ***
131 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText) override;
132 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override;
133
134 // *** IServiceProvider methods ***
135 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override;
136
137 // *** IInputObject methods ***
138 STDMETHOD(UIActivateIO)(BOOL fActivate, LPMSG lpMsg) override;
139 STDMETHOD(HasFocusIO)() override;
140 STDMETHOD(TranslateAcceleratorIO)(LPMSG lpMsg) override;
141
142 // *** IPersist methods ***
143 STDMETHOD(GetClassID)(CLSID *pClassID) override;
144
145 // *** IPersistStream methods ***
146 STDMETHOD(IsDirty)() override;
147 STDMETHOD(Load)(IStream *pStm) override;
148 STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty) override;
149 STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize) override;
150
151 // *** IWinEventHandler methods ***
152 STDMETHOD(OnWinEvent)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) override;
153 STDMETHOD(IsWindowOwner)(HWND hWnd) override;
154
155 // *** IBandNavigate methods ***
156 STDMETHOD(Select)(long paramC) override;
157
158 // *** INamespaceProxy ***
159 STDMETHOD(GetNavigateTarget)(long paramC, long param10, long param14) override;
160 STDMETHOD(Invoke)(long paramC) override;
161 STDMETHOD(OnSelectionChanged)(long paramC) override;
162 STDMETHOD(RefreshFlags)(long paramC, long param10, long param14) override;
163 STDMETHOD(CacheItem)(long paramC) override;
164
165 // *** IDispatch methods ***
166 STDMETHOD(GetTypeInfoCount)(UINT *pctinfo) override;
167 STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override;
168 STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override;
169 STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) override;
170
171 // *** IDropTarget methods ***
172 STDMETHOD(DragEnter)(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect) override;
173 STDMETHOD(DragOver)(DWORD glfKeyState, POINTL pt, DWORD *pdwEffect) override;
174 STDMETHOD(DragLeave)() override;
175 STDMETHOD(Drop)(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect) override;
176
177 // *** IDropSource methods ***
178 STDMETHOD(QueryContinueDrag)(BOOL fEscapePressed, DWORD grfKeyState) override;
179 STDMETHOD(GiveFeedback)(DWORD dwEffect) override;
180
183
185
188 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
189 COM_INTERFACE_ENTRY_IID(IID_IBandNavigate, IBandNavigate)
190 COM_INTERFACE_ENTRY_IID(IID_INamespaceProxy, INamespaceProxy)
193 COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
195 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
196 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
197 COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
201
207 // MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
209};
HWND hWnd
Definition: settings.c:17
#define STDMETHOD(m)
Definition: basetyps.h:62
LPITEMIDLIST relativePidl
Definition: explorerband.h:50
LPITEMIDLIST absolutePidl
Definition: explorerband.h:49
HTREEITEM InsertItem(HTREEITEM hParent, IShellFolder *psfParent, LPITEMIDLIST pElt, LPITEMIDLIST pEltRelative, BOOL bSort)
HTREEITEM m_hRoot
Definition: explorerband.h:65
STDMETHOD() GetSite(REFIID riid, void **ppvSite) override
BOOL OnTreeItemExpanding(LPNMTREEVIEW pnmtv)
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
STDMETHOD() UIActivateIO(BOOL fActivate, LPMSG lpMsg) override
HTREEITEM m_oldSelected
Definition: explorerband.h:66
STDMETHOD() ResizeBorderDW(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override
void DestroyExplorerBand()
STDMETHOD() Save(IStream *pStm, BOOL fClearDirty) override
HIMAGELIST m_hImageList
Definition: explorerband.h:64
STDMETHOD() Select(long paramC) override
void OnSelectionChanged(LPNMTREEVIEW pnmtv)
STDMETHOD() IsWindowOwner(HWND hWnd) override
STDMETHOD() Invoke(long paramC) override
HRESULT ExecuteCommand(CComPtr< IContextMenu > &menu, UINT nCmd)
STDMETHOD() ShowDW(BOOL fShow) override
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() SetSite(IUnknown *pUnkSite) override
STDMETHOD() OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) override
STDMETHOD() GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override
BOOL m_bNavigating
Definition: explorerband.h:60
STDMETHOD() HasFocusIO() override
STDMETHOD() Drop(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect) override
void InitializeExplorerBand()
STDMETHOD() CloseDW(DWORD dwReserved) override
STDMETHOD() IsDirty() override
HTREEITEM m_childTargetNode
Definition: explorerband.h:75
STDMETHOD() GetWindow(HWND *lphwnd) override
DWORD m_dwBandID
Definition: explorerband.h:62
static int CALLBACK CompareTreeItems(LPARAM p1, LPARAM p2, LPARAM p3)
STDMETHOD() TranslateAcceleratorIO(LPMSG lpMsg) override
STDMETHOD() RefreshFlags(long paramC, long param10, long param14) override
STDMETHOD() Load(IStream *pStm) override
STDMETHOD() GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override
HRESULT UpdateBrowser(LPITEMIDLIST pidlGoto)
BOOL NavigateToCurrentFolder()
STDMETHOD() CacheItem(long paramC) override
STDMETHOD() GetSizeMax(ULARGE_INTEGER *pcbSize) override
STDMETHOD() GetTypeInfoCount(UINT *pctinfo) override
LPITEMIDLIST m_pidlCurrent
Definition: explorerband.h:67
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
STDMETHOD() GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi) override
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
CComPtr< IDataObject > m_pCurObject
Definition: explorerband.h:76
void OnTreeItemDragging(LPNMTREEVIEW pnmtv, BOOL isRightClick)
CComPtr< IUnknown > m_pSite
Definition: explorerband.h:55
DWORD m_adviseCookie
Definition: explorerband.h:70
BOOL RefreshTreePidl(HTREEITEM tree, LPITEMIDLIST pidlParent)
LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
NodeInfo * GetNodeInfo(HTREEITEM hItem)
STDMETHOD() QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) override
BOOL NavigateToPIDL(LPITEMIDLIST dest, HTREEITEM *item, BOOL bExpand, BOOL bInsert, BOOL bSelect)
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
STDMETHOD() GiveFeedback(DWORD dwEffect) override
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT ContextMenuHack(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
CComPtr< IShellFolder > m_pDesktop
Definition: explorerband.h:56
BOOL OnTreeItemDeleted(LPNMTREEVIEW pnmtv)
CComPtr< IDropTarget > m_pDropTarget
Definition: explorerband.h:74
STDMETHOD() DragOver(DWORD glfKeyState, POINTL pt, DWORD *pdwEffect) override
ULONG m_shellRegID
Definition: explorerband.h:71
STDMETHOD() DragEnter(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect) override
STDMETHOD() GetClassID(CLSID *pClassID) override
LRESULT OnShellEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
BOOL InsertSubitems(HTREEITEM hItem, NodeInfo *pNodeInfo)
virtual ~CExplorerBand()
STDMETHOD() GetNavigateTarget(long paramC, long param10, long param14) override
BOOL RenameItem(HTREEITEM toRename, LPITEMIDLIST newPidl)
STDMETHOD() DragLeave() override
static BOOL bInsert
Definition: cmdinput.c:121
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define IDR_EXPLORERBAND
Definition: resource.h:101
#define CALLBACK
Definition: compat.h:35
#define pt(x, y)
Definition: drawing.c:79
#define WM_USER_SHELLEVENT
Definition: explorerband.h:24
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
REFIID riid
Definition: atlbase.h:39
#define COM_INTERFACE_ENTRY2_IID(iid, x, x2)
Definition: atlcom.h:609
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:679
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:651
#define DECLARE_REGISTRY_RESOURCEID(x)
Definition: atlcom.h:645
#define END_COM_MAP()
Definition: atlcom.h:592
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define END_MSG_MAP()
Definition: atlwin.h:1917
const IID IID_IObjectWithSite
static char * dest
Definition: rtl.c:135
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:52
static ATOM item
Definition: dde.c:856
_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
const GUID IID_IOleWindow
const GUID IID_IDispatch
const GUID IID_IPersist
Definition: proxy.cpp:14
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define LPNMTREEVIEW
Definition: commctrl.h:3643
#define REFIID
Definition: guiddef.h:118
#define WM_CONTEXTMENU
Definition: richedit.h:64
DWORD LCID
Definition: nls.h:13
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
Definition: scsiwmi.h:51
uint32_t ULONG
Definition: typedefs.h:59
#define DeleteItem
Definition: userenv.h:210
_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
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WM_SETFOCUS
Definition: winuser.h:1613
#define WM_RBUTTONDOWN
Definition: winuser.h:1779