PROJECT(SHELL)
add_subdirectory(shellbars)
+add_subdirectory(shellfind)
set_cpp(WITH_RUNTIME)
${CMAKE_CURRENT_BINARY_DIR}/browseui.def)
set_module_type(browseui win32dll UNICODE)
-target_link_libraries(browseui shellbars uuid wine)
+target_link_libraries(browseui shellbars shellfind uuid wine)
add_importlibs(browseui uxtheme shlwapi shell32 comctl32 gdi32 ole32 oleaut32 user32 advapi32 mpr msvcrt kernel32 ntdll)
add_pch(browseui precomp.h SOURCE)
add_cd_file(TARGET browseui DESTINATION reactos/system32 FOR all)
#endif
}
+HRESULT CSearchBar_CreateInstance(REFIID riid, LPVOID *ppv)
+{
+#if USE_CUSTOM_SEARCHBAND
+ return ShellObjectCreator<CSearchBar>(riid, ppv);
+#else
+ return CoCreateInstance(CLSID_FileSearchBand, NULL, CLSCTX_INPROC_SERVER, riid, ppv);
+#endif
+}
+
HRESULT CExplorerBand_CreateInstance(REFIID riid, LPVOID *ppv)
{
#if USE_CUSTOM_EXPLORERBAND
OBJECT_ENTRY(CLSID_CRegTreeOptions, CRegTreeOptions)
OBJECT_ENTRY(CLSID_TaskbarList, CTaskbarList)
OBJECT_ENTRY(CLSID_ExplorerBand, CExplorerBand)
+OBJECT_ENTRY(CLSID_FileSearchBand, CSearchBar)
OBJECT_ENTRY(CLSID_ProgressDialog, CProgressDialog)
OBJECT_ENTRY(CLSID_ISFBand, CISFBand)
END_OBJECT_MAP()
#define USE_CUSTOM_BANDPROXY 1
#define USE_CUSTOM_BRANDBAND 1
#define USE_CUSTOM_EXPLORERBAND 1
+#define USE_CUSTOM_SEARCHBAND 1
#define USE_CUSTOM_INTERNETTOOLBAR 1
HRESULT CAddressBand_CreateInstance(REFIID riid, void **ppv);
HRESULT CBandProxy_CreateInstance(REFIID riid, void **ppv);
HRESULT CBrandBand_CreateInstance(REFIID riid, void **ppv);
HRESULT CExplorerBand_CreateInstance(REFIID riid, LPVOID *ppv);
+HRESULT CSearchBar_CreateInstance(REFIID riid, LPVOID *ppv);
HRESULT CInternetToolbar_CreateInstance(REFIID riid, void **ppv);
HRESULT CMergedFolder_CreateInstance(REFIID riid, void **ppv);
HRESULT CMenuBand_CreateInstance(REFIID iid, LPVOID *ppv);
IDR_ISFBAND REGISTRY "res/isfband.rgs"
IDR_ACLCUSTOMMRU REGISTRY "res/custommru.rgs"
IDR_TASKBARLIST REGISTRY "res/taskbarlist.rgs"
+IDR_FILESEARCHBAND REGISTRY "res/filesearchband.rgs"
#include <reactos/manifest_dll.rc>
#include "shellbars/CBandSite.h"
#include "shellbars/CBandSiteMenu.h"
#include "shellbars/CISFBand.h"
+#include "shellfind/CSearchBar.h"
#include "brandband.h"
#include "internettoolbar.h"
#include "commonbrowser.h"
--- /dev/null
+HKCR
+{
+ NoRemove CLSID
+ {
+ ForceRemove {C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1} = s 'File Search Explorer Band'
+ {
+ DefaultIcon = e '%%SystemRoot%%\System32\shell32.dll,-135'
+ InprocServer32 = s '%MODULE%'
+ {
+ val ThreadingModel = s 'Apartment'
+ }
+ }
+ }
+}
#define IDR_ISFBAND 143
#define IDR_ACLCUSTOMMRU 144
#define IDR_TASKBARLIST 145
+#define IDR_FILESEARCHBAND 146
#define IDS_SMALLICONS 12301
#define IDS_LARGEICONS 12302
#define IDB_SHELL_BRANDBAND_SM_LO 245
#define IDB_SHELL_BRANDBAND_MD_LO 246
#define IDB_SHELL_BRANDBAND_LG_LO 247*/
+
+#define IDD_SEARCH_DLG 1000
+#define IDC_SEARCH_LABEL 1001
+#define IDC_SEARCH_FILENAME 1002
+#define IDC_SEARCH_QUERY 1003
+#define IDC_SEARCH_BUTTON 1004
+#define IDC_SEARCH_STOP_BUTTON 1005
+#define IDC_SEARCH_COMBOBOX 1006
+#define IDS_SEARCHINVALID 4518
+#define IDS_COL_NAME 8976
+#define IDS_COL_LOCATION 8977
+#define IDS_COL_RELEVANCE 8989
+#define IDS_SEARCH_FILES_FOUND 9232
+#define IDS_SEARCH_FOLDER 9234
+#define IDS_SEARCH_OPEN_FOLDER 40960
if (FAILED_UNEXPECTEDLY(hResult))
return hResult;
}
+ else if (IsEqualCLSID(classID, CLSID_FileSearchBand))
+ {
+ TRACE("CLSID_FileSearchBand requested, building internal band.\n");
+ hResult = CSearchBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBand));
+ if (FAILED_UNEXPECTEDLY(hResult))
+ return hResult;
+ }
else
{
TRACE("A different CLSID requested, using CoCreateInstance.\n");
switch (nCmdID)
{
case 0x1c: //Toggle Search
- if (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
- IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
- IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
- IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar))
- {
- hResult = IUnknown_ShowDW(fClientBars[BIVerticalBaseBar].clientBar.p, FALSE);
- memset(&fCurrentVertBar, 0, sizeof(fCurrentVertBar));
- FireCommandStateChangeAll();
- }
- else
- {
- OnSearch();
- }
- return S_OK;
case 0x1d: //Toggle History
case 0x1e: //Toggle Favorites
case 0x23: //Toggle Folders
const GUID* pclsid;
- if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
+ if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand;
+ else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
else if (nCmdID == 0x1e) pclsid = &CLSID_SH_FavBand;
else pclsid = &CLSID_ExplorerBand;
switch (wID)
{
case IDM_EXPLORERBAR_SEARCH:
- Exec(&CLSID_CommonButtons, 0x123, 1, NULL, NULL);
+ ShowBand(CLSID_FileSearchBand, true);
break;
case IDM_EXPLORERBAR_FOLDERS:
ShowBand(CLSID_ExplorerBand, true);
--- /dev/null
+
+PROJECT(SHELL)
+
+set_cpp(WITH_RUNTIME)
+
+add_definitions(-DUNICODE -D_UNICODE)
+add_definitions(-D_ATL_NO_EXCEPTIONS)
+
+include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/atl)
+
+list(APPEND SOURCE
+ CSearchBar.cpp
+ shellfind.h)
+
+add_library(shellfind ${SOURCE})
+
+if(NOT MSVC)
+ add_target_compile_flags(shellfind "-Wno-unused-but-set-variable")
+endif()
+
+add_pch(shellfind shellfind.h SOURCE)
--- /dev/null
+/*
+ * ReactOS Explorer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "CSearchBar.h"
+#include <psdk/wingdi.h>
+
+WINE_DEFAULT_DEBUG_CHANNEL(shellfind);
+
+#if 1
+#undef UNIMPLEMENTED
+
+#define UNIMPLEMENTED DbgPrint("%s is UNIMPLEMENTED!\n", __FUNCTION__)
+#endif
+
+CSearchBar::CSearchBar() :
+ pSite(NULL),
+ fVisible(FALSE),
+ bFocused(FALSE)
+{
+}
+
+CSearchBar::~CSearchBar()
+{
+}
+
+void CSearchBar::InitializeSearchBar()
+{
+ CreateWindowExW(0, WC_STATIC, L"Search by any or all of the criteria below.",
+ WS_CHILD | WS_VISIBLE,
+ 10, 10, 200, 40,
+ m_hWnd, NULL,
+ _AtlBaseModule.GetModuleInstance(), NULL);
+
+ CreateWindowExW(0, WC_STATIC, L"A &word or phrase in the file:",
+ WS_CHILD | WS_VISIBLE,
+ 10, 50, 500, 20,
+ m_hWnd, NULL,
+ _AtlBaseModule.GetModuleInstance(), NULL);
+ CreateWindowExW(WS_EX_CLIENTEDGE, WC_EDITW, NULL,
+ WS_BORDER | WS_CHILD | WS_VISIBLE,
+ 10, 70, 100, 20,
+ m_hWnd, NULL,
+ _AtlBaseModule.GetModuleInstance(), NULL);
+
+ CreateWindowExW(0, WC_STATIC, L"&Look in:",
+ WS_CHILD | WS_VISIBLE,
+ 10, 100, 500, 20,
+ m_hWnd, NULL,
+ _AtlBaseModule.GetModuleInstance(), NULL);
+ CreateWindowExW(WS_EX_CLIENTEDGE, WC_EDITW, NULL,
+ WS_BORDER | WS_CHILD | WS_VISIBLE,
+ 10, 120, 100, 20,
+ m_hWnd, NULL,
+ _AtlBaseModule.GetModuleInstance(), NULL);
+
+ CreateWindowExW(0, WC_BUTTON, L"Sea&rch",
+ WS_BORDER | WS_CHILD | WS_VISIBLE,
+ 10, 150, 100, 20,
+ m_hWnd, NULL,
+ _AtlBaseModule.GetModuleInstance(), NULL);
+}
+
+HRESULT CSearchBar::ExecuteCommand(CComPtr<IContextMenu>& menu, UINT nCmd)
+{
+ CComPtr<IOleWindow> pBrowserOleWnd;
+ CMINVOKECOMMANDINFO cmi;
+ HWND browserWnd;
+ HRESULT hr;
+
+ hr = IUnknown_QueryService(pSite, SID_SShellBrowser, IID_PPV_ARG(IOleWindow, &pBrowserOleWnd));
+ if (FAILED_UNEXPECTEDLY(hr))
+ return hr;
+
+ hr = pBrowserOleWnd->GetWindow(&browserWnd);
+ if (FAILED_UNEXPECTEDLY(hr))
+ return hr;
+
+ ZeroMemory(&cmi, sizeof(cmi));
+ cmi.cbSize = sizeof(cmi);
+ cmi.lpVerb = MAKEINTRESOURCEA(nCmd);
+ cmi.hwnd = browserWnd;
+ if (GetKeyState(VK_SHIFT) & 0x8000)
+ cmi.fMask |= CMIC_MASK_SHIFT_DOWN;
+ if (GetKeyState(VK_CONTROL) & 0x8000)
+ cmi.fMask |= CMIC_MASK_CONTROL_DOWN;
+
+ return menu->InvokeCommand(&cmi);
+}
+
+
+// *** ATL event handlers ***
+LRESULT CSearchBar::OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
+{
+ bFocused = TRUE;
+ IUnknown_OnFocusChangeIS(pSite, reinterpret_cast<IUnknown*>(this), TRUE);
+ bHandled = FALSE;
+ return TRUE;
+}
+
+
+// *** IOleWindow methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::GetWindow(HWND *lphwnd)
+{
+ if (!lphwnd)
+ return E_INVALIDARG;
+ *lphwnd = m_hWnd;
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::ContextSensitiveHelp(BOOL fEnterMode)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+
+// *** IDockingWindow methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::CloseDW(DWORD dwReserved)
+{
+ // We do nothing, we don't have anything to save yet
+ TRACE("CloseDW called\n");
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::ResizeBorderDW(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved)
+{
+ /* Must return E_NOTIMPL according to MSDN */
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::ShowDW(BOOL fShow)
+{
+ fVisible = fShow;
+ ShowWindow(fShow);
+ return S_OK;
+}
+
+
+// *** IDeskBand methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi)
+{
+ if (!pdbi)
+ {
+ return E_INVALIDARG;
+ }
+
+ if (pdbi->dwMask & DBIM_MINSIZE)
+ {
+ pdbi->ptMinSize.x = 200;
+ pdbi->ptMinSize.y = 30;
+ }
+
+ if (pdbi->dwMask & DBIM_MAXSIZE)
+ {
+ pdbi->ptMaxSize.y = -1;
+ }
+
+ if (pdbi->dwMask & DBIM_INTEGRAL)
+ {
+ pdbi->ptIntegral.y = 1;
+ }
+
+ if (pdbi->dwMask & DBIM_ACTUAL)
+ {
+ pdbi->ptActual.x = 200;
+ pdbi->ptActual.y = 30;
+ }
+
+ if (pdbi->dwMask & DBIM_TITLE)
+ {
+ if (!LoadStringW(_AtlBaseModule.GetResourceInstance(), IDS_SEARCHLABEL, pdbi->wszTitle, _countof(pdbi->wszTitle)))
+ return HRESULT_FROM_WIN32(GetLastError());
+ }
+
+ if (pdbi->dwMask & DBIM_MODEFLAGS)
+ {
+ pdbi->dwModeFlags = DBIMF_NORMAL | DBIMF_VARIABLEHEIGHT;
+ }
+
+ if (pdbi->dwMask & DBIM_BKCOLOR)
+ {
+ pdbi->dwMask &= ~DBIM_BKCOLOR;
+ }
+ return S_OK;
+}
+
+LRESULT CALLBACK MyWindowProc(
+ _In_ HWND hwnd,
+ _In_ UINT uMsg,
+ _In_ WPARAM wParam,
+ _In_ LPARAM lParam
+)
+{
+ return 0;
+}
+
+// *** IObjectWithSite methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::SetSite(IUnknown *pUnkSite)
+{
+ HRESULT hr;
+ HWND parentWnd;
+
+ if (pUnkSite == pSite)
+ return S_OK;
+
+ TRACE("SetSite called \n");
+ if (!pUnkSite)
+ {
+ DestroyWindow();
+ m_hWnd = NULL;
+ }
+
+ if (pUnkSite != pSite)
+ {
+ pSite = NULL;
+ }
+
+ if(!pUnkSite)
+ return S_OK;
+
+ hr = IUnknown_GetWindow(pUnkSite, &parentWnd);
+ if (!SUCCEEDED(hr))
+ {
+ ERR("Could not get parent's window ! Status: %08lx\n", hr);
+ return E_INVALIDARG;
+ }
+
+ pSite = pUnkSite;
+
+ if (m_hWnd)
+ {
+ // Change its parent
+ SetParent(parentWnd);
+ }
+ else
+ {
+ CWindowImpl::Create(parentWnd);
+
+ InitializeSearchBar();
+ }
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::GetSite(REFIID riid, void **ppvSite)
+{
+ if (!ppvSite)
+ return E_POINTER;
+ *ppvSite = pSite;
+ return S_OK;
+}
+
+
+// *** IOleCommandTarget methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+
+// *** IServiceProvider methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
+{
+ /* FIXME: we probably want to handle more services here */
+ return IUnknown_QueryService(pSite, SID_SShellBrowser, riid, ppvObject);
+}
+
+
+// *** IInputObject methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::UIActivateIO(BOOL fActivate, LPMSG lpMsg)
+{
+ if (fActivate)
+ {
+ //SetFocus();
+ SetActiveWindow();
+ }
+ // TODO: handle message
+ if(lpMsg)
+ {
+ TranslateMessage(lpMsg);
+ DispatchMessage(lpMsg);
+ }
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::HasFocusIO()
+{
+ return bFocused ? S_OK : S_FALSE;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::TranslateAcceleratorIO(LPMSG lpMsg)
+{
+ if (lpMsg->hwnd == m_hWnd)
+ {
+ TranslateMessage(lpMsg);
+ DispatchMessage(lpMsg);
+ return S_OK;
+ }
+
+ return S_FALSE;
+}
+
+// *** IPersist methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::GetClassID(CLSID *pClassID)
+{
+ if (!pClassID)
+ return E_POINTER;
+ memcpy(pClassID, &CLSID_FileSearchBand, sizeof(CLSID));
+ return S_OK;
+}
+
+
+// *** IPersistStream methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::IsDirty()
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::Load(IStream *pStm)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::Save(IStream *pStm, BOOL fClearDirty)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::GetSizeMax(ULARGE_INTEGER *pcbSize)
+{
+ // TODO: calculate max size
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+
+// *** IWinEventHandler methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
+{
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::IsWindowOwner(HWND hWnd)
+{
+ return (hWnd == m_hWnd) ? S_OK : S_FALSE;
+}
+
+// *** IBandNavigate methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::Select(long paramC)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+// *** INamespaceProxy ***
+HRESULT STDMETHODCALLTYPE CSearchBar::GetNavigateTarget(long paramC, long param10, long param14)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::Invoke(long paramC)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::OnSelectionChanged(long paramC)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::RefreshFlags(long paramC, long param10, long param14)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::CacheItem(long paramC)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+// *** IDispatch methods ***
+HRESULT STDMETHODCALLTYPE CSearchBar::GetTypeInfoCount(UINT *pctinfo)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ UNIMPLEMENTED;
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CSearchBar::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ TRACE("Unknown dispid requested: %08x\n", dispIdMember);
+ return E_INVALIDARG;
+}
--- /dev/null
+/*
+ * ReactOS Explorer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#pragma once
+
+#include "shellfind.h"
+
+class CSearchBar :
+ public CComCoClass<CSearchBar, &CLSID_FileSearchBand>,
+ public CComObjectRootEx<CComMultiThreadModelNoCS>,
+ public IDeskBand,
+ public IObjectWithSite,
+ public IInputObject,
+ public IPersistStream,
+ public IOleCommandTarget,
+ public IServiceProvider,
+ public IBandNavigate,
+ public IWinEventHandler,
+ public INamespaceProxy,
+ public IDispatch,
+ public CWindowImpl<CSearchBar>
+{
+
+private:
+ // *** BaseBarSite information ***
+ CComPtr<IUnknown> pSite;
+ BOOL fVisible;
+ BOOL bFocused;
+
+ void InitializeSearchBar();
+ HRESULT ExecuteCommand(CComPtr<IContextMenu>& menu, UINT nCmd);
+
+ // *** ATL event handlers ***
+ LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+
+public:
+ CSearchBar();
+ virtual ~CSearchBar();
+
+ // *** IOleWindow methods ***
+ virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd);
+ virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
+
+ // *** IDockingWindow methods ***
+ virtual HRESULT STDMETHODCALLTYPE CloseDW(DWORD dwReserved);
+ virtual HRESULT STDMETHODCALLTYPE ResizeBorderDW(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved);
+ virtual HRESULT STDMETHODCALLTYPE ShowDW(BOOL fShow);
+
+ // *** IDeskBand methods ***
+ virtual HRESULT STDMETHODCALLTYPE GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi);
+
+ // *** IObjectWithSite methods ***
+ virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
+ virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite);
+
+ // *** IOleCommandTarget methods ***
+ virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText);
+ virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
+
+ // *** IServiceProvider methods ***
+ virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
+
+ // *** IInputObject methods ***
+ virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg);
+ virtual HRESULT STDMETHODCALLTYPE HasFocusIO();
+ virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg);
+
+ // *** IPersist methods ***
+ virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID);
+
+ // *** IPersistStream methods ***
+ virtual HRESULT STDMETHODCALLTYPE IsDirty();
+ virtual HRESULT STDMETHODCALLTYPE Load(IStream *pStm);
+ virtual HRESULT STDMETHODCALLTYPE Save(IStream *pStm, BOOL fClearDirty);
+ virtual HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize);
+
+ // *** IWinEventHandler methods ***
+ virtual HRESULT STDMETHODCALLTYPE OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult);
+ virtual HRESULT STDMETHODCALLTYPE IsWindowOwner(HWND hWnd);
+
+ // *** IBandNavigate methods ***
+ virtual HRESULT STDMETHODCALLTYPE Select(long paramC);
+
+ // *** INamespaceProxy ***
+ virtual HRESULT STDMETHODCALLTYPE GetNavigateTarget(long paramC, long param10, long param14);
+ virtual HRESULT STDMETHODCALLTYPE Invoke(long paramC);
+ virtual HRESULT STDMETHODCALLTYPE OnSelectionChanged(long paramC);
+ virtual HRESULT STDMETHODCALLTYPE RefreshFlags(long paramC, long param10, long param14);
+ virtual HRESULT STDMETHODCALLTYPE CacheItem(long paramC);
+
+ // *** IDispatch methods ***
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
+ virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
+ virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
+
+ DECLARE_REGISTRY_RESOURCEID(IDR_EXPLORERBAND)
+ DECLARE_NOT_AGGREGATABLE(CSearchBar)
+
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+ BEGIN_COM_MAP(CSearchBar)
+ COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
+ COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
+ COM_INTERFACE_ENTRY_IID(IID_IBandNavigate, IBandNavigate)
+ COM_INTERFACE_ENTRY_IID(IID_INamespaceProxy, INamespaceProxy)
+ COM_INTERFACE_ENTRY2_IID(IID_IOleWindow, IOleWindow, IDeskBand)
+ COM_INTERFACE_ENTRY2_IID(IID_IDockingWindow, IDockingWindow, IDeskBand)
+ COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
+ COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
+ COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
+ COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
+ COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
+ COM_INTERFACE_ENTRY2_IID(IID_IPersist, IPersist, IPersistStream)
+ COM_INTERFACE_ENTRY_IID(IID_IPersistStream, IPersistStream)
+ END_COM_MAP()
+
+ DECLARE_WND_CLASS_EX(_T("SrchCompExplorerBar"), 0, COLOR_WINDOW)
+
+ BEGIN_MSG_MAP(CSearchBar)
+ MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
+ END_MSG_MAP()
+};
--- /dev/null
+#ifndef _SHELLFIND_PCH_
+#define _SHELLFIND_PCH_
+
+#define WIN32_NO_STATUS
+#define _INC_WINDOWS
+#define COM_NO_WINDOWS_H
+
+#include <windef.h>
+#include <winbase.h>
+#include <shlobj.h>
+#include <shlobj_undoc.h>
+#include <shlguid_undoc.h>
+#include <shdeprecated.h>
+#include <tchar.h>
+#include <atlbase.h>
+#include <atlcom.h>
+#include <atlwin.h>
+#include <atlsimpcoll.h>
+#include <atlstr.h>
+#include <shlwapi.h>
+#include <shlwapi_undoc.h>
+#include <undocshell.h>
+#include <shellutils.h>
+#include <strsafe.h>
+#include <wine/debug.h>
+
+#include "../resource.h"
+
+#endif /* _SHELLFIND_PCH_ */