|
|
// 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<CComSingleThreadModel>, public CComCoClass<CFileSearchBand, &CLSID_FileSearchBand>, public CComControl<CFileSearchBand>, public CStockPropImpl<CFileSearchBand, IFileSearchBand, &IID_IFileSearchBand, &LIBID_Shell32>, public IProvideClassInfo2Impl<&CLSID_FileSearchBand, NULL, &LIBID_Shell32>, public IPersistStreamInitImpl<CFileSearchBand>, public IPersistStorageImpl<CFileSearchBand>, public IQuickActivateImpl<CFileSearchBand>, public IOleControlImpl<CFileSearchBand>, public IOleInPlaceActiveObjectImpl<CFileSearchBand>, public IViewObjectExImpl<CFileSearchBand>, public IOleInPlaceObjectWindowlessImpl<CFileSearchBand>, public IDataObjectImpl<CFileSearchBand>, public ISpecifyPropertyPagesImpl<CFileSearchBand>,
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<CFileSearchBand, &CLSID_FileSearchBand, &IID_IFileSearchBand, &LIBID_Shell32, 1, 0, CComTypeInfoHolder> { 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__
|