// findband.h : Declaration of the CFileSearchBand #ifndef __FSEARCH_H__ #define __FSEARCH_H__ #include "unicpp/stdafx.h" #include "atldisp.h" #include "shcombox.h" // shell combo methods #include "finddlg.h" class CFindFilesDlg; #define FILESEARCHCTL_CLASS TEXT("ShellFileSearchControl") // Band layout flags passed thru CFileSearchBand::UpdateLayout(). #define BLF_CALCSCROLL 0x00000001 // recalc scroll bars #define BLF_SCROLLWINDOW 0x00000002 // scroll subdialog #define BLF_RESIZECHILDREN 0x00000004 // resize subdialog #define BLF_ALL 0xFFFFFFFF // do all layout ops const UINT _icons[] = { // replaced icons for fsearch, csearch with riff animations. IDI_PSEARCH, }; // CMetrics: maintains ctl metrics and resources. class CMetrics { public: CMetrics(); ~CMetrics() { DestroyResources(); } void Init(HWND hwndDlg); void OnWinIniChange(HWND hwndDlg); static COLORREF TextColor() { return GetSysColor(COLOR_WINDOWTEXT); } static COLORREF BkgndColor() { return GetSysColor(COLOR_WINDOW); } static COLORREF BorderColor() { return GetSysColor(COLOR_WINDOWTEXT); } const HBRUSH& BkgndBrush() const { return _hbrBkgnd; } const HBRUSH& BorderBrush() const { return _hbrBorder; } POINT& ExpandOrigin() { return _ptExpandOrigin; } RECT& CheckBoxRect() { return _rcCheckBox; } int& TightMarginY() { return _cyTightMargin; } int& LooseMarginY() { return _cyLooseMargin; } int& CtlMarginX() { return _cxCtlMargin; } HFONT BoldFont(HWND hwndDlg); HICON CaptionIcon(UINT nIDIconResource); protected: BOOL CreateResources(); VOID DestroyResources(); static BOOL GetWindowLogFont(HWND hwnd, OUT LOGFONT* plf); HBRUSH _hbrBkgnd; HBRUSH _hbrBorder; POINT _ptExpandOrigin; // left-top origin of subdlg expansion RECT _rcCheckBox; // size of a check box int _cyTightMargin; // v. distance between two tightly associated controls. int _cyLooseMargin; // v. distance between two loosely associated controls. int _cxCtlMargin; // distance between left or right dlg border and child window border. HFONT _hfBold; // Bold font HICON _rghiconCaption[ARRAYSIZE(_icons)]; }; class ATL_NO_VTABLE CFileSearchBand : public CComObjectRootEx, public CComCoClass, public CComControl, public CStockPropImpl, public IProvideClassInfo2Impl<&CLSID_FileSearchBand, NULL, &LIBID_Shell32>, public IPersistStreamInitImpl, public IPersistStorageImpl, public IQuickActivateImpl, public IOleControlImpl, public IOleInPlaceActiveObjectImpl, public IViewObjectExImpl, public IOleInPlaceObjectWindowlessImpl, public IDataObjectImpl, public ISpecifyPropertyPagesImpl, public IDeskBand, public IObjectWithSite, public IPersistStream, public IInputObject, public IServiceProvider, public IOleCommandTarget, // Must derive from CShell32AtlIDispatch<> and not IOleObjecImpl // if this control resides in shell32.dll public CShell32AtlIDispatch { public: CFileSearchBand(); ~CFileSearchBand(); static CWndClassInfo& GetWndClassInfo(); HWND Create(HWND hWndParent, RECT& rcPos, LPCTSTR szWindowName = NULL, DWORD dwStyle = WS_CHILD|WS_VISIBLE, DWORD dwExStyle = 0, UINT nID = 0); void SetDeskbandWidth(int cx); void FinalRelease(); public: BOOL IsDeskBand() const { return _fDeskBand; } static BOOL IsBandDebut(); CMetrics& GetMetrics() { return _metrics; } static int MakeBandKey(OUT LPTSTR pszKey, IN UINT cchKey); static int MakeBandSubKey(IN LPCTSTR pszSubKey, OUT LPTSTR pszKey, IN UINT cchKey); static HKEY GetBandRegKey(BOOL bForceCreate = FALSE); void UpdateLayout(ULONG fLayoutFlags = BLF_ALL); void EnsureVisible(LPCRECT lprc /* in screen coords */); BOOL IsKeyboardScroll(MSG* pmsg); HRESULT IsDlgMessage(HWND hwnd, LPMSG pmsg); HRESULT AutoActivate(); void SetDirty(BOOL bDirty = TRUE); BOOL IsDirty() const { return _fDirty; } BOOL IsValid() const { return _fValid; } IUnknown* BandSite() { return _punkSite ? _punkSite : (IUnknown*)m_spClientSite; } IOleClientSite* OleClientSite() { return m_spClientSite; } DECLARE_NO_REGISTRY(); BEGIN_COM_MAP(CFileSearchBand) COM_INTERFACE_ENTRY(IFileSearchBand) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IViewObjectEx) COM_INTERFACE_ENTRY_IID(IID_IViewObject2, IViewObjectEx) COM_INTERFACE_ENTRY_IID(IID_IViewObject, IViewObjectEx) COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceActiveObject) COM_INTERFACE_ENTRY(IOleControl) COM_INTERFACE_ENTRY(IOleObject) COM_INTERFACE_ENTRY(IQuickActivate) COM_INTERFACE_ENTRY(IPersistStorage) //COM_INTERFACE_ENTRY(IPersistStreamInit) COM_INTERFACE_ENTRY(ISpecifyPropertyPages) COM_INTERFACE_ENTRY(IDataObject) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) COM_INTERFACE_ENTRY_IID(IID_IDeskBand,IDeskBand) COM_INTERFACE_ENTRY(IOleCommandTarget) COM_INTERFACE_ENTRY_IID(IID_IInputObject,IInputObject) COM_INTERFACE_ENTRY(IObjectWithSite) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) END_COM_MAP() public: BEGIN_PROPERTY_MAP(CFileSearchBand) // PROP_ENTRY("Property Description", dispid, clsid) PROP_PAGE(CLSID_StockColorPage) END_PROPERTY_MAP() // message map BEGIN_MSG_MAP(CFileSearchBand) MESSAGE_HANDLER(WM_PAINT, OnPaint) MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd) MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus) MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus) MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_SIZE, OnSize) MESSAGE_HANDLER(WM_HSCROLL, OnScroll) MESSAGE_HANDLER(WM_VSCROLL, OnScroll) MESSAGE_HANDLER(WM_MOUSEACTIVATE, OnMouseActivate) MESSAGE_HANDLER(WM_SETTINGCHANGE, OnWinIniChange) MESSAGE_HANDLER(WM_SYSCOLORCHANGE, OnWinIniChange) MESSAGE_HANDLER(WM_WININICHANGE, OnWinIniChange) MESSAGE_HANDLER(WMU_BANDINFOUPDATE, OnBandInfoUpdate) END_MSG_MAP() //---------------------// // Message handling protected: LRESULT OnCreate(UINT, WPARAM, LPARAM, BOOL&); LRESULT OnScroll(UINT, WPARAM, LPARAM, BOOL&); LRESULT OnEraseBkgnd(UINT, WPARAM, LPARAM, BOOL&); LRESULT OnSize(UINT, WPARAM, LPARAM, BOOL&); LRESULT OnMouseActivate(UINT, WPARAM, LPARAM, BOOL&); LRESULT OnWinIniChange(UINT, WPARAM, LPARAM, BOOL&); LRESULT OnBandInfoUpdate(UINT, WPARAM, LPARAM, BOOL&); public: // IFileSearchBand methods STDMETHOD (SetFocus)(); STDMETHOD (SetSearchParameters)(IN BSTR* pbstrSearchID, IN VARIANT_BOOL bNavToResults, IN OPTIONAL VARIANT *pvarScope, IN OPTIONAL VARIANT* pvarQueryFile); STDMETHOD (get_SearchID)(OUT BSTR* pbstrSearchID); STDMETHOD (get_Scope)(OUT VARIANT *pvarScope); STDMETHOD (get_QueryFile)(OUT VARIANT *pvarFile); STDMETHOD (FindFilesOrFolders)(BOOL bNavigateToResults = FALSE, BOOL bDefaultFocusCtl = FALSE); STDMETHOD (FindComputer)(BOOL bNavigateToResults = FALSE, BOOL bDefaultFocusCtl = FALSE); STDMETHOD (FindPrinter) (BOOL bNavigateToResults = FALSE, BOOL bDefaultFocusCtl = FALSE); STDMETHOD (FindPeople) (BOOL bNavigateToResults = FALSE, BOOL bDefaultFocusCtl = FALSE); STDMETHOD (FindOnWeb) (BOOL bNavigateToResults = FALSE, BOOL bDefaultFocusCtl = FALSE); HRESULT OnDraw(ATL_DRAWINFO& di) { return S_OK; } STDMETHOD (SetObjectRects)(LPCRECT lprcPosRect, LPCRECT lprcClipRect); // CShell32AtlIDispatch/IOleObject methods STDMETHOD (PrivateQI)(REFIID iid, void** ppvObject); STDMETHOD (DoVerbUIActivate)(LPCRECT prcPosRect, HWND hwndParent); STDMETHOD (TranslateAcceleratorInternal)(MSG *pMsg, IOleClientSite * pocs); // IViewObjectEx methods STDMETHOD(GetViewStatus)(DWORD* pdwStatus) { ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n")); *pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE; return S_OK; } // IOleInPlaceActiveObject methods STDMETHOD (TranslateAccelerator)(LPMSG lpmsg); // IDeskBand STDMETHOD (GetBandInfo)(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi); // IDockingWindow STDMETHOD (ShowDW)(BOOL fShow); STDMETHOD (CloseDW)(DWORD dwReserved); STDMETHOD (ResizeBorderDW)(LPCRECT prcBorder, IUnknown* punkToolbarSite, BOOL fReserved); // IOleWindow STDMETHOD (GetWindow)(HWND * lphwnd) { *lphwnd = m_hWnd; return ::IsWindow(m_hWnd) ? S_OK : S_FALSE; } STDMETHOD (ContextSensitiveHelp)(BOOL fEnterMode) { return E_NOTIMPL; } // IObjectWithSite STDMETHOD (SetSite)(IUnknown* punkSite); STDMETHOD (GetSite)(REFIID riid, void** ppunkSite); // IInputObject STDMETHOD (HasFocusIO)(void); STDMETHOD (TranslateAcceleratorIO)(LPMSG lpMsg); STDMETHOD (UIActivateIO)(BOOL fActivate, LPMSG lpMsg); // IOleCommandTarget STDMETHOD (QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText); STDMETHOD (Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); // IServiceProvider STDMETHOD (QueryService)(REFGUID guidService, REFIID riid, void** ppv); // IPersist STDMETHOD (GetClassID)(CLSID *pClassID); // // IPersistStream STDMETHOD (IsDirty)(void); STDMETHOD (Load)(IStream *pStm); // STDMETHOD (Save)(IStream *pStm, BOOL fClearDirty); // STDMETHOD (GetSizeMax)(ULARGE_INTEGER *pcbSize); BOOL SearchInProgress() const { if (_pBandDlg) return _pBandDlg->SearchInProgress(); return FALSE; }; void StopSearch() { if (_pBandDlg) _pBandDlg->StopSearch(); }; private: CBandDlg* GetBandDialog(REFGUID guidSearch); HRESULT ShowBandDialog(REFGUID guidSearch, BOOL bNavigateToResults = FALSE, BOOL bDefaultFocusCtl = FALSE /* force focus to the band's default control */); HRESULT AdvertiseBand(BOOL bAdvertise); HRESULT BandInfoChanged(); void AddButtons(BOOL); BOOL LoadImageLists(); void LayoutControls(int cx, int cy, ULONG fLayoutFlags = BLF_ALL); void EnableControls(); void Scroll(int nBar, UINT uSBCode, int nNewPos = 0); IShellBrowser* GetTopLevelBrowser(); BOOL IsBrowserAccelerator(LPMSG pmsg); CBandDlg* BandDlg(); CFindFilesDlg _dlgFSearch; CFindComputersDlg _dlgCSearch; #ifdef __PSEARCH_BANDDLG__ CFindPrintersDlg _dlgPSearch; #endif __PSEARCH_BANDDLG__ CBandDlg* _pBandDlg; // the active/visible band. GUID _guidSearch; // the GUID of the active/visible band. CMetrics _metrics; SIZE _sizeMin, _sizeMax; IUnknown* _punkSite; SCROLLINFO _siHorz, _siVert; BITBOOL _fValid : 1, _fDirty : 1, _fDeskBand : 1, _fStrings : 1; DWORD _dwBandID, _dwBandViewMode; HIMAGELIST _hilHot, // toolbar image lists _hilDefault; IShellBrowser* _psb; // top-level browser. LONG_PTR _cbOffset; BOOL _bSendFinishedDisplaying; // Have we sent FileType box message to start new thread? }; // Index Server control // these are in ntquery.h // Query dialects: #ifndef ISQLANG_V1 #define ISQLANG_V1 1 #endif //ISQLANG_V1 #ifndef ISQLANG_V2 #define ISQLANG_V2 2 #endif //ISQLANG_V2 STDAPI GetCIStatus(BOOL *pbRunning, BOOL *pbIndexed, BOOL *pbPermission); STDAPI CatalogUptodate(LPCWSTR pszCatalog, LPCWSTR pszMachine); STDAPI StartStopCI(BOOL bStart); STDAPI_(BOOL) IsCiQuery(const VARIANT* pvarRaw, OUT VARIANT* pvarQuery, OUT ULONG* pulDialect); #endif //__FSEARCH_H__