Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

250 lines
9.3 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Copyright (C) 1993-1998 Microsoft Corporation. All Rights Reserved.
  3. //
  4. // MODULE: find.h
  5. //
  6. // PURPOSE:
  7. //
  8. #pragma once
  9. /////////////////////////////////////////////////////////////////////////////
  10. // Forward Definitions
  11. //
  12. #include "storutil.h"
  13. #include "msident.h"
  14. class CStatusBar;
  15. class CViewMenu;
  16. interface IMessageList;
  17. /////////////////////////////////////////////////////////////////////////////
  18. // Types
  19. //
  20. typedef struct tagFINDMSG
  21. {
  22. ULONG flags;
  23. LPTSTR pszFromHeader;
  24. LPTSTR pszSubject;
  25. LPTSTR pszRecip;
  26. LPTSTR pszBody;
  27. FILETIME ftDateFrom;
  28. FILETIME ftDateTo;
  29. } FINDMSG;
  30. /////////////////////////////////////////////////////////////////////////////
  31. // FINDERPARAMS
  32. //
  33. // Used to provide initialization information to the finder class
  34. //
  35. typedef struct tagFINDERPARAMS
  36. {
  37. FOLDERTYPE ftType;
  38. FOLDERID idFolder; // Currently Selected Folder
  39. } FINDERPARAMS, * PFINDERPARAMS;
  40. /////////////////////////////////////////////////////////////////////////////
  41. // Public Functions
  42. //
  43. HRESULT DoFindMsg(FOLDERID idFolder, FOLDERTYPE ftFolder);
  44. HRESULT CopyFindInfo(FINDINFO *pFindSrc, FINDINFO *pFindDst);
  45. void FreeFindInfo(FINDINFO *pFindInfo);
  46. void CloseFinderTreads(void);
  47. /////////////////////////////////////////////////////////////////////////////
  48. // Class CPumpRefCount
  49. //
  50. class CPumpRefCount : public IUnknown
  51. {
  52. public:
  53. CPumpRefCount() {m_cRef = 1;}
  54. ~CPumpRefCount() {PostQuitMessage(0);}
  55. STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID *ppvObj);
  56. STDMETHOD_(ULONG, AddRef)(THIS);
  57. STDMETHOD_(ULONG, Release)(THIS);
  58. private:
  59. ULONG m_cRef;
  60. };
  61. /////////////////////////////////////////////////////////////////////////////
  62. // Class CFindDlg
  63. //
  64. class CFindDlg : public IDispatch,
  65. public IOleCommandTarget,
  66. public IStoreCallback,
  67. public ITimeoutCallback,
  68. public IIdentityChangeNotify
  69. {
  70. public:
  71. /////////////////////////////////////////////////////////////////////////
  72. // Construction and Initialization
  73. //
  74. CFindDlg();
  75. ~CFindDlg();
  76. void Show(PFINDERPARAMS pfindparams);
  77. void HandleMessage(LPMSG lpmsg);
  78. /////////////////////////////////////////////////////////////////////////
  79. // IUnknown
  80. //
  81. STDMETHODIMP QueryInterface(THIS_ REFIID riid, LPVOID *ppvObj);
  82. STDMETHOD_(ULONG, AddRef)(THIS);
  83. STDMETHOD_(ULONG, Release)(THIS);
  84. /////////////////////////////////////////////////////////////////////////
  85. // IDispatch
  86. //
  87. STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { return (E_NOTIMPL); }
  88. STDMETHODIMP GetTypeInfo(unsigned int iTInfo, LCID lcid, ITypeInfo **ppTInfo) { return (E_NOTIMPL); }
  89. STDMETHODIMP GetTypeInfoCount(unsigned int FAR* pctinfo) { return (E_NOTIMPL); }
  90. STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
  91. DISPPARAMS* pDispParams, VARIANT* pVarResult,
  92. EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
  93. /////////////////////////////////////////////////////////////////////////
  94. // IOleCommandTarget
  95. //
  96. STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[],
  97. OLECMDTEXT *pCmdText);
  98. STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
  99. VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  100. /////////////////////////////////////////////////////////////////////////
  101. // IStoreCallback methods
  102. //
  103. STDMETHODIMP OnBegin(STOREOPERATIONTYPE tyOperation, LPSTOREOPERATIONINFO pOpInfo, IOperationCancel *pCancel);
  104. STDMETHODIMP OnProgress(STOREOPERATIONTYPE tyOperation, DWORD dwCurrent, DWORD dwMax, LPCSTR pszStatus);
  105. STDMETHODIMP OnTimeout(LPINETSERVER pServer, LPDWORD pdwTimeout, IXPTYPE ixpServerType);
  106. STDMETHODIMP CanConnect(LPCSTR pszAccountId, DWORD dwFlags);
  107. STDMETHODIMP OnLogonPrompt(LPINETSERVER pServer, IXPTYPE ixpServerType);
  108. STDMETHODIMP OnComplete(STOREOPERATIONTYPE tyOperation, HRESULT hrComplete, LPSTOREOPERATIONINFO pOpInfo, LPSTOREERROR pErrorInfo);
  109. STDMETHODIMP OnPrompt(HRESULT hrError, LPCTSTR pszText, LPCTSTR pszCaption, UINT uType, INT *piUserResponse);
  110. STDMETHODIMP GetParentWindow(DWORD dwReserved, HWND *phwndParent);
  111. /////////////////////////////////////////////////////////////////////////
  112. // ITimeoutCallback
  113. //
  114. STDMETHODIMP OnTimeoutResponse(TIMEOUTRESPONSE eResponse);
  115. /////////////////////////////////////////////////////////////////////////
  116. // IIdentityChangeNotify
  117. //
  118. STDMETHODIMP QuerySwitchIdentities();
  119. STDMETHODIMP SwitchIdentities();
  120. STDMETHODIMP IdentityInformationChanged(DWORD dwType);
  121. private:
  122. /////////////////////////////////////////////////////////////////////////
  123. // Message Handling
  124. //
  125. INT_PTR DlgProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
  126. BOOL OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);
  127. void OnSize(HWND hwnd, UINT state, int cx, int cy);
  128. void OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
  129. void OnInitMenuPopup(HWND hwnd, HMENU hmenuPopup, UINT uPos, BOOL fSystemMenu);
  130. void OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpmmi);
  131. void OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName);
  132. void OnMenuSelect(HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags);
  133. void OnDestroy(HWND hwnd);
  134. void OnPaint(HWND hwnd);
  135. LRESULT OnNotify(HWND hwnd, int idFrom, LPNMHDR pnmhdr);
  136. HRESULT CmdOpen(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  137. HRESULT CmdOpenFolder(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  138. HRESULT CmdReplyForward(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  139. HRESULT CmdCancelMessage(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  140. HRESULT CmdFindNow(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  141. HRESULT CmdStop(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  142. HRESULT CmdReset(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  143. HRESULT CmdBrowseForFolder(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  144. HRESULT CmdBlockSender(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  145. HRESULT CmdCreateRule(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  146. HRESULT CmdCombineAndDecode(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  147. static INT_PTR CALLBACK ExtFindMsgDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  148. /////////////////////////////////////////////////////////////////////////
  149. // Utility Functions
  150. //
  151. BOOL _IsFindEnabled(HWND hwnd);
  152. void _ShowResults(HWND hwnd);
  153. void _OnFindNow(HWND hwnd);
  154. FOLDERID _GetCurSel(HWND hwnd);
  155. void _StartFind(FOLDERID idFolder, BOOL fSubFolders);
  156. BOOL _GetFindValues(HWND hwnd, FINDINFO *pfi);
  157. void _SetFindValues(HWND hwnd, FINDINFO *pfi);
  158. void _FreeFindInfo(FINDINFO *pfi);
  159. void _SetFindIntlFont(HWND hwnd);
  160. void _InitSizingInfo(HWND hwnd);
  161. /////////////////////////////////////////////////////////////////////////
  162. // Private Class Information
  163. //
  164. private:
  165. // Basic Information
  166. ULONG m_cRef;
  167. HWND m_hwnd;
  168. FINDINFO m_rFindInfo;
  169. HWND m_hwndList;
  170. HTIMEOUT m_hTimeout;
  171. HACCEL m_hAccel;
  172. // Groovy Interface Pointers
  173. CStatusBar *m_pStatusBar;
  174. IMessageList *m_pMsgList;
  175. IOleCommandTarget *m_pMsgListCT;
  176. IOperationCancel *m_pCancel;
  177. CPumpRefCount *m_pPumpRefCount;
  178. HWNDLIST m_hlDisabled;
  179. // Sizing information
  180. int m_xBtn;
  181. int m_yBrowse;
  182. int m_dxBtnGap;
  183. int m_dxBtn;
  184. int m_yBtn;
  185. int m_dyBtn;
  186. int m_cxEdit;
  187. int m_xEdit;
  188. int m_cyEdit;
  189. int m_yView;
  190. int m_cxDlgDef;
  191. int m_cyDlgFull;
  192. int m_xIncSub;
  193. int m_yIncSub;
  194. int m_cxFolder;
  195. int m_cxStatic;
  196. // State
  197. BOOL m_fShowResults;
  198. BOOL m_fAbort;
  199. BOOL m_fClose;
  200. BOOL m_fInProgress;
  201. ULONG m_ulPct;
  202. BOOL m_fFindComplete;
  203. POINT m_ptDragMin;
  204. HICON m_hIcon,
  205. m_hIconSm;
  206. DWORD m_dwCookie;
  207. BOOL m_fProgressBar,
  208. m_fInternal;
  209. DWORD m_dwIdentCookie;
  210. // For View.Current View menu
  211. CViewMenu *m_pViewMenu;
  212. };