///////////////////////////////////////////////////////////////////////////// // Copyright (C) 1993-1998 Microsoft Corporation. All Rights Reserved. // // MODULE: find.h // // PURPOSE: // #pragma once ///////////////////////////////////////////////////////////////////////////// // Forward Definitions // #include "storutil.h" #include "msident.h" class CStatusBar; class CViewMenu; interface IMessageList; ///////////////////////////////////////////////////////////////////////////// // Types // typedef struct tagFINDMSG { ULONG flags; LPTSTR pszFromHeader; LPTSTR pszSubject; LPTSTR pszRecip; LPTSTR pszBody; FILETIME ftDateFrom; FILETIME ftDateTo; } FINDMSG; ///////////////////////////////////////////////////////////////////////////// // FINDERPARAMS // // Used to provide initialization information to the finder class // typedef struct tagFINDERPARAMS { FOLDERTYPE ftType; FOLDERID idFolder; // Currently Selected Folder } FINDERPARAMS, * PFINDERPARAMS; ///////////////////////////////////////////////////////////////////////////// // Public Functions // HRESULT DoFindMsg(FOLDERID idFolder, FOLDERTYPE ftFolder); HRESULT CopyFindInfo(FINDINFO *pFindSrc, FINDINFO *pFindDst); void FreeFindInfo(FINDINFO *pFindInfo); void CloseFinderTreads(void); ///////////////////////////////////////////////////////////////////////////// // Class CPumpRefCount // class CPumpRefCount : public IUnknown { public: CPumpRefCount() {m_cRef = 1;} ~CPumpRefCount() {PostQuitMessage(0);} STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID *ppvObj); STDMETHOD_(ULONG, AddRef)(THIS); STDMETHOD_(ULONG, Release)(THIS); private: ULONG m_cRef; }; ///////////////////////////////////////////////////////////////////////////// // Class CFindDlg // class CFindDlg : public IDispatch, public IOleCommandTarget, public IStoreCallback, public ITimeoutCallback, public IIdentityChangeNotify { public: ///////////////////////////////////////////////////////////////////////// // Construction and Initialization // CFindDlg(); ~CFindDlg(); void Show(PFINDERPARAMS pfindparams); void HandleMessage(LPMSG lpmsg); ///////////////////////////////////////////////////////////////////////// // IUnknown // STDMETHODIMP QueryInterface(THIS_ REFIID riid, LPVOID *ppvObj); STDMETHOD_(ULONG, AddRef)(THIS); STDMETHOD_(ULONG, Release)(THIS); ///////////////////////////////////////////////////////////////////////// // IDispatch // STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { return (E_NOTIMPL); } STDMETHODIMP GetTypeInfo(unsigned int iTInfo, LCID lcid, ITypeInfo **ppTInfo) { return (E_NOTIMPL); } STDMETHODIMP GetTypeInfoCount(unsigned int FAR* pctinfo) { return (E_NOTIMPL); } STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr); ///////////////////////////////////////////////////////////////////////// // IOleCommandTarget // STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText); STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); ///////////////////////////////////////////////////////////////////////// // IStoreCallback methods // STDMETHODIMP OnBegin(STOREOPERATIONTYPE tyOperation, LPSTOREOPERATIONINFO pOpInfo, IOperationCancel *pCancel); STDMETHODIMP OnProgress(STOREOPERATIONTYPE tyOperation, DWORD dwCurrent, DWORD dwMax, LPCSTR pszStatus); STDMETHODIMP OnTimeout(LPINETSERVER pServer, LPDWORD pdwTimeout, IXPTYPE ixpServerType); STDMETHODIMP CanConnect(LPCSTR pszAccountId, DWORD dwFlags); STDMETHODIMP OnLogonPrompt(LPINETSERVER pServer, IXPTYPE ixpServerType); STDMETHODIMP OnComplete(STOREOPERATIONTYPE tyOperation, HRESULT hrComplete, LPSTOREOPERATIONINFO pOpInfo, LPSTOREERROR pErrorInfo); STDMETHODIMP OnPrompt(HRESULT hrError, LPCTSTR pszText, LPCTSTR pszCaption, UINT uType, INT *piUserResponse); STDMETHODIMP GetParentWindow(DWORD dwReserved, HWND *phwndParent); ///////////////////////////////////////////////////////////////////////// // ITimeoutCallback // STDMETHODIMP OnTimeoutResponse(TIMEOUTRESPONSE eResponse); ///////////////////////////////////////////////////////////////////////// // IIdentityChangeNotify // STDMETHODIMP QuerySwitchIdentities(); STDMETHODIMP SwitchIdentities(); STDMETHODIMP IdentityInformationChanged(DWORD dwType); private: ///////////////////////////////////////////////////////////////////////// // Message Handling // INT_PTR DlgProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); BOOL OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam); void OnSize(HWND hwnd, UINT state, int cx, int cy); void OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify); void OnInitMenuPopup(HWND hwnd, HMENU hmenuPopup, UINT uPos, BOOL fSystemMenu); void OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpmmi); void OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName); void OnMenuSelect(HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags); void OnDestroy(HWND hwnd); void OnPaint(HWND hwnd); LRESULT OnNotify(HWND hwnd, int idFrom, LPNMHDR pnmhdr); HRESULT CmdOpen(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdOpenFolder(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdReplyForward(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdCancelMessage(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdFindNow(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdStop(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdReset(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdBrowseForFolder(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdBlockSender(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdCreateRule(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdCombineAndDecode(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); static INT_PTR CALLBACK ExtFindMsgDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); ///////////////////////////////////////////////////////////////////////// // Utility Functions // BOOL _IsFindEnabled(HWND hwnd); void _ShowResults(HWND hwnd); void _OnFindNow(HWND hwnd); FOLDERID _GetCurSel(HWND hwnd); void _StartFind(FOLDERID idFolder, BOOL fSubFolders); BOOL _GetFindValues(HWND hwnd, FINDINFO *pfi); void _SetFindValues(HWND hwnd, FINDINFO *pfi); void _FreeFindInfo(FINDINFO *pfi); void _SetFindIntlFont(HWND hwnd); void _InitSizingInfo(HWND hwnd); ///////////////////////////////////////////////////////////////////////// // Private Class Information // private: // Basic Information ULONG m_cRef; HWND m_hwnd; FINDINFO m_rFindInfo; HWND m_hwndList; HTIMEOUT m_hTimeout; HACCEL m_hAccel; // Groovy Interface Pointers CStatusBar *m_pStatusBar; IMessageList *m_pMsgList; IOleCommandTarget *m_pMsgListCT; IOperationCancel *m_pCancel; CPumpRefCount *m_pPumpRefCount; HWNDLIST m_hlDisabled; // Sizing information int m_xBtn; int m_yBrowse; int m_dxBtnGap; int m_dxBtn; int m_yBtn; int m_dyBtn; int m_cxEdit; int m_xEdit; int m_cyEdit; int m_yView; int m_cxDlgDef; int m_cyDlgFull; int m_xIncSub; int m_yIncSub; int m_cxFolder; int m_cxStatic; // State BOOL m_fShowResults; BOOL m_fAbort; BOOL m_fClose; BOOL m_fInProgress; ULONG m_ulPct; BOOL m_fFindComplete; POINT m_ptDragMin; HICON m_hIcon, m_hIconSm; DWORD m_dwCookie; BOOL m_fProgressBar, m_fInternal; DWORD m_dwIdentCookie; // For View.Current View menu CViewMenu *m_pViewMenu; };