2 * PROJECT: ReactOS Search Shell Extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Search results folder
5 * COPYRIGHT: Copyright 2019 Brock Mammen
10 #include "shellfind.h"
13 public CWindowImpl
<CFindFolder
>,
14 public CComCoClass
<CFindFolder
, &CLSID_FindFolder
>,
15 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
17 public IPersistFolder2
,
18 public IShellFolderViewCB
,
19 public IConnectionPointContainerImpl
<CFindFolder
>,
20 public IConnectionPointImpl
<CFindFolder
, &DIID_DSearchCommandEvents
>
22 // *** IShellFolder2 methods ***
23 STDMETHODIMP
GetDefaultSearchGUID(GUID
*pguid
);
25 STDMETHODIMP
EnumSearches(IEnumExtraSearch
**ppenum
);
27 STDMETHODIMP
GetDefaultColumn(DWORD dwRes
, ULONG
*pSort
, ULONG
*pDisplay
);
29 STDMETHODIMP
GetDefaultColumnState(UINT iColumn
, DWORD
*pcsFlags
);
31 STDMETHODIMP
GetDetailsEx(PCUITEMID_CHILD pidl
, const SHCOLUMNID
*pscid
, VARIANT
*pv
);
33 STDMETHODIMP
GetDetailsOf(PCUITEMID_CHILD pidl
, UINT iColumn
, SHELLDETAILS
*pDetails
);
35 STDMETHODIMP
MapColumnToSCID(UINT iColumn
, SHCOLUMNID
*pscid
);
38 // *** IShellFolder methods ***
39 STDMETHODIMP
ParseDisplayName(HWND hwndOwner
, LPBC pbc
, LPOLESTR lpszDisplayName
, ULONG
*pchEaten
,
40 PIDLIST_RELATIVE
*ppidl
, ULONG
*pdwAttributes
);
42 STDMETHODIMP
EnumObjects(HWND hwndOwner
, DWORD dwFlags
, LPENUMIDLIST
*ppEnumIDList
);
44 STDMETHODIMP
BindToObject(PCUIDLIST_RELATIVE pidl
, LPBC pbcReserved
, REFIID riid
, LPVOID
*ppvOut
);
46 STDMETHODIMP
BindToStorage(PCUIDLIST_RELATIVE pidl
, LPBC pbcReserved
, REFIID riid
, LPVOID
*ppvOut
);
48 STDMETHODIMP
CompareIDs(LPARAM lParam
, PCUIDLIST_RELATIVE pidl1
, PCUIDLIST_RELATIVE pidl2
);
50 STDMETHODIMP
CreateViewObject(HWND hwndOwner
, REFIID riid
, LPVOID
*ppvOut
);
52 STDMETHODIMP
GetAttributesOf(UINT cidl
, PCUITEMID_CHILD_ARRAY apidl
, DWORD
*rgfInOut
);
54 STDMETHODIMP
GetUIObjectOf(HWND hwndOwner
, UINT cidl
, PCUITEMID_CHILD_ARRAY apidl
, REFIID riid
, UINT
*prgfInOut
,
58 STDMETHODIMP
GetDisplayNameOf(PCUITEMID_CHILD pidl
, DWORD dwFlags
, LPSTRRET pName
);
59 STDMETHODIMP
SetNameOf(HWND hwndOwner
, PCUITEMID_CHILD pidl
, LPCOLESTR lpName
, DWORD dwFlags
,
60 PITEMID_CHILD
*pPidlOut
);
62 //// *** IShellFolderViewCB methods ***
63 STDMETHODIMP
MessageSFVCB(UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
67 CComPtr
<IShellFolder2
> m_pisfInner
;
68 CComPtr
<IShellFolderView
> m_shellFolderView
;
69 CComPtr
<IShellBrowser
> m_shellBrowser
;
72 void NotifyConnections(DISPID id
);
73 static DWORD WINAPI
SearchThreadProc(LPVOID lpParameter
);
75 //// *** IPersistFolder2 methods ***
76 STDMETHODIMP
GetCurFolder(PIDLIST_ABSOLUTE
*pidl
);
79 // *** IPersistFolder methods ***
80 STDMETHODIMP
Initialize(LPCITEMIDLIST pidl
);
83 // *** IPersist methods ***
84 STDMETHODIMP
GetClassID(CLSID
*pClassId
);
86 // *** Message handlers ***
87 LRESULT
StartSearch(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
89 LRESULT
StopSearch(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
91 LRESULT
AddResult(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
93 LRESULT
UpdateStatus(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
98 DECLARE_REGISTRY_RESOURCEID(IDR_FINDFOLDER
)
100 DECLARE_NOT_AGGREGATABLE(CFindFolder
)
102 DECLARE_PROTECT_FINAL_CONSTRUCT()
104 BEGIN_CONNECTION_POINT_MAP(CFindFolder
)
105 CONNECTION_POINT_ENTRY(DIID_DSearchCommandEvents
)
106 END_CONNECTION_POINT_MAP()
108 BEGIN_MSG_MAP(CFindFolder
)
109 MESSAGE_HANDLER(WM_SEARCH_START
, StartSearch
)
110 MESSAGE_HANDLER(WM_SEARCH_STOP
, StopSearch
)
111 MESSAGE_HANDLER(WM_SEARCH_ADD_RESULT
, AddResult
)
112 MESSAGE_HANDLER(WM_SEARCH_UPDATE_STATUS
, UpdateStatus
)
115 BEGIN_COM_MAP(CFindFolder
)
116 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2
, IShellFolder2
)
117 COM_INTERFACE_ENTRY_IID(IID_IShellFolder
, IShellFolder
)
118 COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB
, IShellFolderViewCB
)
119 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2
, IPersistFolder2
)
120 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder
, IPersistFolder
)
121 COM_INTERFACE_ENTRY_IID(IID_IPersist
, IPersist
)
122 COM_INTERFACE_ENTRY_IID(IID_IConnectionPointContainer
, IConnectionPointContainer
)