home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / mapiform.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  27.5 KB  |  629 lines

  1. /*
  2.  *  M A P I F O R M . H
  3.  *
  4.  *  Declarations of interfaces for clients and providers of MAPI
  5.  *  forms and form registries.
  6.  *
  7.  *  Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
  8.  */
  9.  
  10. #ifndef MAPIFORM_H
  11. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  12. #define MAPIFORM_H
  13.  
  14. /* Include common MAPI header files if they haven't been already. */
  15.  
  16. #ifndef MAPIDEFS_H
  17. #include <mapidefs.h>
  18. #include <mapicode.h>
  19. #include <mapiguid.h>
  20. #include <mapitags.h>
  21. #endif
  22.  
  23. #ifndef BEGIN_INTERFACE
  24. #define BEGIN_INTERFACE
  25. #endif
  26.  
  27. #ifndef _MAC
  28. typedef const RECT FAR *LPCRECT;
  29. #endif
  30.  
  31. /* HFRMREG is an enumeration which represents a registry container.
  32.  * Microsoft reserves the values from 0 to 0x3FFF for its own use.
  33.  */
  34.  
  35. typedef ULONG HFRMREG;
  36.  
  37. #define HFRMREG_DEFAULT  0
  38. #define HFRMREG_LOCAL    1
  39. #define HFRMREG_PERSONAL 2
  40. #define HFRMREG_FOLDER   3
  41.  
  42. DECLARE_MAPI_INTERFACE_PTR(IPersistMessage, LPPERSISTMESSAGE);
  43. DECLARE_MAPI_INTERFACE_PTR(IMAPIMessageSite, LPMAPIMESSAGESITE);
  44. DECLARE_MAPI_INTERFACE_PTR(IMAPISession, LPMAPISESSION);
  45. DECLARE_MAPI_INTERFACE_PTR(IMAPIViewContext, LPMAPIVIEWCONTEXT);
  46. DECLARE_MAPI_INTERFACE_PTR(IMAPIViewAdviseSink, LPMAPIVIEWADVISESINK);
  47. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormAdviseSink, LPMAPIFORMADVISESINK);
  48. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormInfo, LPMAPIFORMINFO);
  49. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormMgr, LPMAPIFORMMGR);
  50. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormContainer, LPMAPIFORMCONTAINER);
  51. DECLARE_MAPI_INTERFACE_PTR(IMAPIForm, LPMAPIFORM);
  52. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormFactory, LPMAPIFORMFACTORY);
  53.  
  54. typedef const char FAR *FAR * LPPCSTR;
  55. typedef LPMAPIFORMINFO FAR *LPPMAPIFORMINFO;
  56.  
  57. STDAPI MAPIOpenFormMgr(LPMAPISESSION pSession, LPMAPIFORMMGR FAR * ppmgr);
  58. STDAPI MAPIOpenLocalFormContainer(LPMAPIFORMCONTAINER FAR * ppfcnt);
  59.  
  60.  
  61. /*-- GetLastError ----------------------------------------------------------*/
  62. /* This defines the GetLastError method held in common by most mapiform
  63.  * interfaces.  It is defined separately so that an implementor may include
  64.  * more than one mapiform interface in a class.
  65.  */
  66.  
  67. #define MAPI_GETLASTERROR_METHOD(IPURE)                                 \
  68.     MAPIMETHOD(GetLastError) (THIS_                                     \
  69.         /*in*/  HRESULT hResult,                                        \
  70.     /*in*/  ULONG ulFlags,                                          \
  71.         /*out*/ LPMAPIERROR FAR * lppMAPIError) IPURE;                  \
  72.  
  73.  
  74. /*-- IPersistMessage -------------------------------------------------------*/
  75. /* This interface is implemented by forms and is used to save,
  76.  * initialize and load forms to and from messages.
  77.  */
  78.  
  79. #define MAPI_IPERSISTMESSAGE_METHODS(IPURE)                             \
  80.     MAPIMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) IPURE;             \
  81.     MAPIMETHOD(IsDirty)(THIS) IPURE;                                    \
  82.     MAPIMETHOD(InitNew)(THIS_                                           \
  83.         /*in*/ LPMAPIMESSAGESITE pMessageSite,                          \
  84.         /*in*/ LPMESSAGE pMessage) IPURE;                               \
  85.     MAPIMETHOD(Load)(THIS_                                              \
  86.         /*in*/ LPMAPIMESSAGESITE pMessageSite,                          \
  87.         /*in*/ LPMESSAGE pMessage,                                      \
  88.         /*in*/ ULONG ulMessageStatus,                                   \
  89.         /*in*/ ULONG ulMessageFlags) IPURE;                             \
  90.     MAPIMETHOD(Save)(THIS_                                              \
  91.         /*in*/ LPMESSAGE pMessage,                                      \
  92.         /*in*/ ULONG fSameAsLoad) IPURE;                                \
  93.     MAPIMETHOD(SaveCompleted)(THIS_                                     \
  94.         /*in*/ LPMESSAGE pMessage) IPURE;                               \
  95.     MAPIMETHOD(HandsOffMessage)(THIS) IPURE;                            \
  96.  
  97. #undef INTERFACE
  98. #define INTERFACE IPersistMessage
  99. DECLARE_MAPI_INTERFACE_(IPersistMessage, IUnknown)
  100. {
  101.     BEGIN_INTERFACE
  102.     MAPI_IUNKNOWN_METHODS(PURE)
  103.     MAPI_GETLASTERROR_METHOD(PURE)
  104.     MAPI_IPERSISTMESSAGE_METHODS(PURE)
  105. };
  106.  
  107.  
  108. /*-- IMAPIMessageSite ------------------------------------------------------*/
  109.  
  110. #define MAPI_IMAPIMESSAGESITE_METHODS(IPURE)                            \
  111.     MAPIMETHOD(GetSession) (THIS_                                       \
  112.         /*out*/ LPMAPISESSION FAR * ppSession) IPURE;                   \
  113.     MAPIMETHOD(GetStore) (THIS_                                         \
  114.         /*out*/ LPMDB FAR * ppStore) IPURE;                             \
  115.     MAPIMETHOD(GetFolder) (THIS_                                        \
  116.         /*out*/ LPMAPIFOLDER FAR * ppFolder) IPURE;                     \
  117.     MAPIMETHOD(GetMessage) (THIS_                                       \
  118.         /*out*/ LPMESSAGE FAR * ppmsg) IPURE;                           \
  119.     MAPIMETHOD(GetFormManager) (THIS_                                   \
  120.         /*out*/ LPMAPIFORMMGR FAR * ppFormMgr) IPURE;                   \
  121.     MAPIMETHOD(NewMessage) (THIS_                                       \
  122.         /*in*/  ULONG fComposeInFolder,                                 \
  123.         /*in*/  LPMAPIFOLDER pFolderFocus,                              \
  124.         /*in*/  LPPERSISTMESSAGE pPersistMessage,                       \
  125.         /*out*/ LPMESSAGE FAR * ppMessage,                              \
  126.         /*out*/ LPMAPIMESSAGESITE FAR * ppMessageSite,                  \
  127.         /*out*/ LPMAPIVIEWCONTEXT FAR * ppViewContext) IPURE;           \
  128.     MAPIMETHOD(CopyMessage) (THIS_                                      \
  129.         /*in*/  LPMAPIFOLDER pFolderDestination) IPURE;                 \
  130.     MAPIMETHOD(MoveMessage) (THIS_                                      \
  131.         /*in*/  LPMAPIFOLDER pFolderDestination,                        \
  132.         /*in*/  LPMAPIVIEWCONTEXT pViewContext,                         \
  133.         /*in*/  LPCRECT prcPosRect) IPURE;                              \
  134.     MAPIMETHOD(DeleteMessage) (THIS_                                    \
  135.         /*in*/  LPMAPIVIEWCONTEXT pViewContext,                         \
  136.         /*in*/  LPCRECT prcPosRect) IPURE;                              \
  137.     MAPIMETHOD(SaveMessage) (THIS) IPURE;                               \
  138.     MAPIMETHOD(SubmitMessage) (THIS_                                    \
  139.         /*in*/ ULONG ulFlags) IPURE;                                    \
  140.     MAPIMETHOD(GetSiteStatus) (THIS_                                    \
  141.         /*out*/ LPULONG lpulStatus) IPURE;                              \
  142.  
  143. #undef INTERFACE
  144. #define INTERFACE IMAPIMessageSite
  145. DECLARE_MAPI_INTERFACE_(IMAPIMessageSite, IUnknown)
  146. {
  147.     BEGIN_INTERFACE
  148.     MAPI_IUNKNOWN_METHODS(PURE)
  149.     MAPI_GETLASTERROR_METHOD(PURE)
  150.     MAPI_IMAPIMESSAGESITE_METHODS(PURE)
  151. };
  152.  
  153.  
  154. /*-- IMAPIForm -------------------------------------------------------------*/
  155. /* This interface is implemented by forms for the benefit of viewers.
  156.  * One method (ShutdownForm) is provided such that simple forms implementing
  157.  * only IMAPIForm and IPersistMessage have reasonable embedding behavior.
  158.  */
  159.  
  160. #define MAPI_IMAPIFORM_METHODS(IPURE)                                   \
  161.     MAPIMETHOD(SetViewContext) (THIS_                                   \
  162.         /*in*/  LPMAPIVIEWCONTEXT pViewContext) IPURE;                  \
  163.     MAPIMETHOD(GetViewContext) (THIS_                                   \
  164.         /*out*/ LPMAPIVIEWCONTEXT FAR * ppViewContext) IPURE;           \
  165.     MAPIMETHOD(ShutdownForm)(THIS_                                             \
  166.         /*in*/  ULONG ulSaveOptions) IPURE;                             \
  167.     MAPIMETHOD(DoVerb) (THIS_                                           \
  168.         /*in*/  LONG iVerb,                                             \
  169.         /*in*/  LPMAPIVIEWCONTEXT lpViewContext, /* can be null */      \
  170.         /*in*/  ULONG hwndParent,                                       \
  171.         /*in*/  LPCRECT lprcPosRect) IPURE;                             \
  172.     MAPIMETHOD(Advise)(THIS_                                            \
  173.         /*in*/  LPMAPIVIEWADVISESINK pAdvise,                           \
  174.         /*out*/ ULONG FAR * pdwStatus) IPURE;                           \
  175.     MAPIMETHOD(Unadvise) (THIS_                                         \
  176.         /*in*/  ULONG ulConnection) IPURE;                              \
  177.  
  178. #undef INTERFACE
  179. #define INTERFACE IMAPIForm
  180. DECLARE_MAPI_INTERFACE_(IMAPIForm, IUnknown)
  181. {
  182.     BEGIN_INTERFACE
  183.     MAPI_IUNKNOWN_METHODS(PURE)
  184.     MAPI_GETLASTERROR_METHOD(PURE)
  185.     MAPI_IMAPIFORM_METHODS(PURE)
  186. };
  187.  
  188. typedef enum tagSAVEOPTS
  189. {
  190.     SAVEOPTS_SAVEIFDIRTY = 0,
  191.     SAVEOPTS_NOSAVE = 1,
  192.     SAVEOPTS_PROMPTSAVE = 2
  193. } SAVEOPTS;
  194.  
  195.  
  196. /*-- IMAPIViewContext ------------------------------------------------------*/
  197. /* Implemented by viewers to support next/previous in forms.
  198.  */
  199.  
  200. /* Structure passed in GetPrintSetup  */
  201.  
  202. typedef struct {
  203.     ULONG ulFlags;  /* MAPI_UNICODE */
  204.     HGLOBAL hDevMode;
  205.     HGLOBAL hDevNames;
  206.     ULONG ulFirstPageNumber;
  207.     ULONG fPrintAttachments;
  208. } FORMPRINTSETUP, FAR * LPFORMPRINTSETUP;
  209.  
  210. /* Values for pulFormat in GetSaveStream */
  211.  
  212. #define SAVE_FORMAT_TEXT                1
  213. #define SAVE_FORMAT_RICHTEXT            2
  214.  
  215. /* Values from 0 to 0x3fff are reserved for future definition by Microsoft */
  216.  
  217. #define MAPI_IMAPIVIEWCONTEXT_METHODS(IPURE)                            \
  218.     MAPIMETHOD(SetAdviseSink)(THIS_                                     \
  219.         /*in*/  LPMAPIFORMADVISESINK pmvns) IPURE;                      \
  220.     MAPIMETHOD(ActivateNext)(THIS_                                      \
  221.         /*in*/  ULONG ulDir,                                            \
  222.         /*in*/  LPCRECT prcPosRect) IPURE;                              \
  223.     MAPIMETHOD(GetPrintSetup)(THIS_                                     \
  224.         /*in*/  ULONG ulFlags,                                          \
  225.         /*out*/ LPFORMPRINTSETUP FAR * lppFormPrintSetup) IPURE;        \
  226.     MAPIMETHOD(GetSaveStream)(THIS_                                     \
  227.         /*out*/ ULONG FAR * pulFlags,                                   \
  228.         /*out*/ ULONG FAR * pulFormat,                                  \
  229.         /*out*/ LPSTREAM FAR * ppstm) IPURE;                            \
  230.     MAPIMETHOD(GetViewStatus) (THIS_                                    \
  231.         /*out*/ LPULONG lpulStatus) IPURE;                              \
  232.  
  233. #undef INTERFACE
  234. #define INTERFACE IMAPIViewContext
  235. DECLARE_MAPI_INTERFACE_(IMAPIViewContext, IUnknown)
  236. {
  237.     BEGIN_INTERFACE
  238.     MAPI_IUNKNOWN_METHODS(PURE)
  239.     MAPI_GETLASTERROR_METHOD(PURE)
  240.     MAPI_IMAPIVIEWCONTEXT_METHODS(PURE)
  241. };
  242.  
  243. #define VCSTATUS_NEXT                           0x00000001
  244. #define VCSTATUS_PREV                           0x00000002
  245. #define VCSTATUS_MODAL                          0x00000004
  246. #define VCSTATUS_INTERACTIVE                    0x00000008
  247. #define VCSTATUS_READONLY                       0x00000010
  248. #define VCSTATUS_DELETE                         0x00010000
  249. #define VCSTATUS_COPY                           0x00020000
  250. #define VCSTATUS_MOVE                           0x00040000
  251. #define VCSTATUS_SUBMIT                         0x00080000
  252. #define VCSTATUS_DELETE_IS_MOVE                 0x00100000
  253. #define VCSTATUS_SAVE                           0x00200000
  254. #define VCSTATUS_NEW_MESSAGE                    0x00400000
  255.  
  256. #define VCDIR_NEXT                              VCSTATUS_NEXT
  257. #define VCDIR_PREV                              VCSTATUS_PREV
  258. #define VCDIR_DELETE                            VCSTATUS_DELETE
  259. #define VCDIR_MOVE                              VCSTATUS_MOVE
  260.  
  261.  
  262. /*-- IMAPIFormAdviseSink ---------------------------------------------------*/
  263. /* Part of form server, held by view; receives notifications from the view.
  264.  *
  265.  * This part of the form server, but is not an interface on the form
  266.  * object.  This means that clients should not expect to QueryInterface
  267.  * from an IMAPIForm* or IOleObject* to this interface, or vice versa.
  268.  */
  269.  
  270. #define MAPI_IMAPIFORMADVISESINK_METHODS(IPURE)                         \
  271.     STDMETHOD(OnChange)(THIS_ ULONG ulDir) IPURE;                       \
  272.     STDMETHOD(OnActivateNext)(THIS_                                     \
  273.         /*in*/  LPCSTR lpszMessageClass,                                \
  274.         /*in*/  ULONG ulMessageStatus,                                  \
  275.         /*in*/  ULONG ulMessageFlags,                                   \
  276.         /*out*/ LPPERSISTMESSAGE FAR * ppPersistMessage) IPURE;         \
  277.  
  278. #undef INTERFACE
  279. #define INTERFACE IMAPIFormAdviseSink
  280. DECLARE_MAPI_INTERFACE_(IMAPIFormAdviseSink, IUnknown)
  281. {
  282.     BEGIN_INTERFACE
  283.     MAPI_IUNKNOWN_METHODS(PURE)
  284.     MAPI_IMAPIFORMADVISESINK_METHODS(PURE)
  285. };
  286.  
  287.  
  288. /*-- IMAPIViewAdviseSink ---------------------------------------------------*/
  289. /* Part of view context, held by form; receives notifications from the form.
  290.  */
  291.  
  292. #define MAPI_IMAPIVIEWADVISESINK_METHODS(IPURE)                         \
  293.     MAPIMETHOD(OnShutdown)(THIS) IPURE;                                    \
  294.     MAPIMETHOD(OnNewMessage)(THIS) IPURE;                               \
  295.     MAPIMETHOD(OnPrint)(THIS_                                           \
  296.         /*in*/ ULONG dwPageNumber,                                      \
  297.         /*in*/ HRESULT hrStatus) IPURE;                                 \
  298.     MAPIMETHOD(OnSubmitted) (THIS) IPURE;                               \
  299.     MAPIMETHOD(OnSaved) (THIS) IPURE;                                   \
  300.  
  301. #undef INTERFACE
  302. #define INTERFACE IMAPIViewAdviseSink
  303. DECLARE_MAPI_INTERFACE_(IMAPIViewAdviseSink, IUnknown)
  304. {
  305.     BEGIN_INTERFACE
  306.     MAPI_IUNKNOWN_METHODS(PURE)
  307.     MAPI_IMAPIVIEWADVISESINK_METHODS(PURE)
  308. };
  309.  
  310.  
  311. /*-- IMAPIFormInfo ---------------------------------------------------------*/
  312. /* Is implemented by registries.  Describes the form.
  313.  */
  314.  
  315. /* Single enum value */
  316.  
  317. typedef struct
  318. {                               /* fpev */
  319.     LPTSTR pszDisplayName;      /* carries the display string */
  320.     ULONG nVal;                 /* the value for the above enumeration */
  321. } SMAPIFormPropEnumVal, FAR * LPMAPIFORMPROPENUMVAL;
  322.  
  323. /* MAPI Form property descriptor */
  324.  
  325. /*
  326.  * Values for the tag in the SMAPIFormProp structure
  327.  *
  328.  * Microsoft reserves the range from 0 to 0x3FFF for future use in its other
  329.  * forms registry implementations.
  330.  */
  331.  
  332. typedef ULONG FORMPROPSPECIALTYPE;
  333.  
  334. #define FPST_VANILLA                    0
  335. #define FPST_ENUM_PROP                  1
  336.  
  337. typedef struct
  338. {
  339.     ULONG ulFlags;              /* Contains MAPI_UNICODE if strings are UNICODE */
  340.     ULONG nPropType;            /* type of the property, hiword is 0 */
  341.     MAPINAMEID nmid;            /* id of the property */
  342.     LPTSTR pszDisplayName;
  343.     FORMPROPSPECIALTYPE nSpecialType;   /* tag for the following union */
  344.     union
  345.     {
  346.         struct
  347.         {
  348.             MAPINAMEID nmidIdx;
  349.             ULONG cfpevAvailable;   /* # of enums */
  350.             LPMAPIFORMPROPENUMVAL pfpevAvailable;
  351.         } s1;                   /* Property String/Number association Enumeration */
  352.     } u;
  353. } SMAPIFormProp, FAR * LPMAPIFORMPROP;
  354.  
  355. /* Array of form properties */
  356.  
  357. typedef struct
  358. {
  359.     ULONG cProps;
  360.     ULONG ulPad;                /* Pad to 8-byte alignment for insurance */
  361.     SMAPIFormProp aFormProp[MAPI_DIM];
  362. } SMAPIFormPropArray, FAR * LPMAPIFORMPROPARRAY;
  363.  
  364. #define CbMAPIFormPropArray(_c) \
  365.          (offsetof(SMAPIFormPropArray, aFormProp) + \
  366.          (_c)*sizeof(SMAPIFormProp))
  367.  
  368. /* Structure defining the layout of an mapi verb description */
  369.  
  370. typedef struct
  371. {
  372.     LONG lVerb;
  373.     LPTSTR szVerbname;
  374.     DWORD fuFlags;
  375.     DWORD grfAttribs;
  376.     ULONG ulFlags;              /* Either 0 or MAPI_UNICODE */
  377. } SMAPIVerb, FAR * LPMAPIVERB;
  378.  
  379. /* Structure used for returning arrays of mapi verbs */
  380.  
  381. typedef struct
  382. {
  383.     ULONG cMAPIVerb;            /* Number of verbs in the structure */
  384.     SMAPIVerb aMAPIVerb[MAPI_DIM];
  385. } SMAPIVerbArray, FAR * LPMAPIVERBARRAY;
  386.  
  387. #define CbMAPIVerbArray(_c) \
  388.          (offsetof(SMAPIVerbArray, aMAPIVerb) + \
  389.          (_c)*sizeof(SMAPIVerb))
  390.  
  391. #define MAPI_IMAPIFORMINFO_METHODS(IPURE)                               \
  392.     MAPIMETHOD(CalcFormPropSet)(THIS_                                   \
  393.         /*in*/  ULONG ulFlags,                                          \
  394.         /*out*/ LPMAPIFORMPROPARRAY FAR * ppFormPropArray) IPURE;       \
  395.     MAPIMETHOD(CalcVerbSet)(THIS_                                       \
  396.         /*in*/  ULONG ulFlags,                                          \
  397.         /*out*/ LPMAPIVERBARRAY FAR * ppMAPIVerbArray) IPURE;           \
  398.     MAPIMETHOD(MakeIconFromBinary)(THIS_                                \
  399.         /*in*/ ULONG nPropID,                                           \
  400.         /*out*/ HICON FAR* phicon) IPURE;                               \
  401.     MAPIMETHOD(SaveForm)(THIS_                                          \
  402.         /*in*/ LPCTSTR szFileName) IPURE;                               \
  403.     MAPIMETHOD(OpenFormContainer)(THIS_                                 \
  404.         /*out*/ LPMAPIFORMCONTAINER FAR * ppformcontainer) IPURE;       \
  405.  
  406. #undef INTERFACE
  407. #define INTERFACE IMAPIFormInfo
  408. DECLARE_MAPI_INTERFACE_(IMAPIFormInfo, IMAPIProp)
  409. {
  410.     BEGIN_INTERFACE
  411.     MAPI_IUNKNOWN_METHODS(PURE)
  412.     MAPI_IMAPIPROP_METHODS(PURE)    /* note: subsumes getlasterror */
  413.     MAPI_IMAPIFORMINFO_METHODS(PURE)
  414. };
  415.  
  416.  
  417. /* Enumeration of permissible values for PR_FORM_MESSAGE_BEHAVIOR */
  418.  
  419. #define MAPI_MESSAGE_BEHAVIOR_IPM 0
  420. #define MAPI_MESSAGE_BEHAVIOR_FOLDER 1
  421.  
  422.  
  423. /*-- IMAPIFormMgr ----------------------------------------------------------*/
  424. /* The client-visible interface for form resolution and dispatch.
  425.  */
  426.  
  427. /* Structure containing an array of message class strings */
  428.  
  429. typedef struct
  430. {
  431.     ULONG cValues;
  432.     LPCSTR aMessageClass[MAPI_DIM];
  433. } SMessageClassArray, FAR * LPSMESSAGECLASSARRAY;
  434.  
  435. #define CbMessageClassArray(_c) \
  436.         (offsetof(SMessageClassArray, aMessageClass) + (_c)*sizeof(LPCSTR))
  437.  
  438. /* Structure containing an array of IMAPIFormInfo interfaces */
  439.  
  440. typedef struct
  441. {
  442.     ULONG cForms;
  443.     LPMAPIFORMINFO aFormInfo[MAPI_DIM];
  444. } SMAPIFormInfoArray, FAR * LPSMAPIFORMINFOARRAY;
  445.  
  446. #define CbMAPIFormInfoArray(_c) \
  447.          (offsetof(SMAPIFormInfoArray, aFormInfo) + \
  448.          (_c)*sizeof(LPMAPIFORMINFO))
  449.  
  450. /* Flags for IMAPIFormMgr::SelectFormContainer */
  451.  
  452. #define MAPIFORM_SELECT_ALL_REGISTRIES           0
  453. #define MAPIFORM_SELECT_FOLDER_REGISTRY_ONLY     1
  454. #define MAPIFORM_SELECT_NON_FOLDER_REGISTRY_ONLY 2
  455.  
  456. /* Flags for IMAPIFormMgr::CalcFormPropSet */
  457.  
  458. #define FORMPROPSET_UNION                 0
  459. #define FORMPROPSET_INTERSECTION          1
  460.  
  461. /* Flags for IMAPIFormMgr::ResolveMessageClass and
  462.    IMAPIFormMgr::ResolveMultipleMessageClasses */
  463.  
  464. #define MAPIFORM_EXACTMATCH             0x0020
  465.  
  466. #define MAPI_IMAPIFORMMGR_METHODS(IPURE)                                \
  467.     MAPIMETHOD(LoadForm)(THIS_                                          \
  468.         /*in*/  ULONG ulUIParam,                                        \
  469.         /*in*/  ULONG ulFlags,                                          \
  470.         /*in*/  LPCSTR lpszMessageClass,                                \
  471.         /*in*/  ULONG ulMessageStatus,                                  \
  472.         /*in*/  ULONG ulMessageFlags,                                   \
  473.         /*in*/  LPMAPIFOLDER pFolderFocus,                              \
  474.         /*in*/  LPMAPIMESSAGESITE pMessageSite,                         \
  475.         /*in*/  LPMESSAGE pmsg,                                         \
  476.         /*in*/  LPMAPIVIEWCONTEXT pViewContext,                         \
  477.         /*in*/  REFIID riid,                                            \
  478.         /*out*/ LPVOID FAR *ppvObj) IPURE;                              \
  479.     MAPIMETHOD(ResolveMessageClass)(THIS_                               \
  480.         /*in*/  LPCSTR szMsgClass,                                      \
  481.         /*in*/  ULONG ulFlags,                                          \
  482.         /*in*/  LPMAPIFOLDER pFolderFocus, /* can be null */            \
  483.         /*out*/ LPMAPIFORMINFO FAR* ppResult) IPURE;                    \
  484.     MAPIMETHOD(ResolveMultipleMessageClasses)(THIS_                     \
  485.         /*in*/  LPSMESSAGECLASSARRAY pMsgClasses,                       \
  486.         /*in*/  ULONG ulFlags,                                          \
  487.         /*in*/  LPMAPIFOLDER pFolderFocus, /* can be null */            \
  488.         /*out*/ LPSMAPIFORMINFOARRAY FAR * pfrminfoarray) IPURE;        \
  489.     MAPIMETHOD(CalcFormPropSet)(THIS_                                   \
  490.         /*in*/  LPSMAPIFORMINFOARRAY pfrminfoarray,                     \
  491.         /*in*/  ULONG ulFlags,                                          \
  492.         /*out*/ LPMAPIFORMPROPARRAY FAR* ppResults) IPURE;              \
  493.     MAPIMETHOD(CreateForm)(THIS_                                        \
  494.         /*in*/  ULONG ulUIParam,                                        \
  495.         /*in*/  ULONG ulFlags,                                          \
  496.         /*in*/  LPMAPIFORMINFO pfrminfoToActivate,                      \
  497.         /*in*/  REFIID refiidToAsk,                                     \
  498.         /*out*/ LPVOID FAR* ppvObj) IPURE;                              \
  499.     MAPIMETHOD(SelectForm)(THIS_                                        \
  500.         /*in*/  ULONG ulUIParam,                                        \
  501.         /*in*/  ULONG ulFlags,                                          \
  502.         /*in*/  LPCTSTR pszTitle,                                       \
  503.         /*in*/  LPMAPIFOLDER pfld,                                      \
  504.         /*out*/ LPMAPIFORMINFO FAR * ppfrminfoReturned) IPURE;          \
  505.     MAPIMETHOD(SelectMultipleForms)(THIS_                               \
  506.         /*in*/  ULONG ulUIParam,                                        \
  507.         /*in*/  ULONG ulFlags,                                          \
  508.         /*in*/  LPCTSTR pszTitle,                                       \
  509.         /*in*/  LPMAPIFOLDER pfld,                                      \
  510.         /*in*/  LPSMAPIFORMINFOARRAY pfrminfoarray,                     \
  511.         /*out*/ LPSMAPIFORMINFOARRAY FAR * ppfrminfoarray) IPURE;       \
  512.     MAPIMETHOD(SelectFormContainer)(THIS_                               \
  513.         /*in*/  ULONG ulUIParam,                                        \
  514.         /*in*/  ULONG ulFlags,                                          \
  515.         /*out*/ LPMAPIFORMCONTAINER FAR * lppfcnt) IPURE;               \
  516.     MAPIMETHOD(OpenFormContainer)(THIS_                                 \
  517.         /*in*/  HFRMREG hfrmreg,                                        \
  518.         /*in*/  LPUNKNOWN lpunk,                                        \
  519.         /*out*/ LPMAPIFORMCONTAINER FAR * lppfcnt) IPURE;               \
  520.     MAPIMETHOD(PrepareForm)(THIS_                                       \
  521.         /*in*/  ULONG ulUIParam,                                        \
  522.         /*in*/  ULONG ulFlags,                                          \
  523.         /*in*/  LPMAPIFORMINFO pfrminfo) IPURE;                         \
  524.     MAPIMETHOD(IsInConflict)(THIS_                                      \
  525.         /*in*/  ULONG ulMessageFlags,                                   \
  526.         /*in*/  ULONG ulMessageStatus,                                  \
  527.         /*in*/  LPCSTR szMessageClass,                                  \
  528.         /*in*/  LPMAPIFOLDER pFolderFocus) IPURE;                       \
  529.  
  530. #undef         INTERFACE
  531. #define         INTERFACE    IMAPIFormMgr
  532. DECLARE_MAPI_INTERFACE_(IMAPIFormMgr, IUnknown)
  533. {
  534.     BEGIN_INTERFACE
  535.     MAPI_IUNKNOWN_METHODS(PURE)
  536.     MAPI_GETLASTERROR_METHOD(PURE)
  537.     MAPI_IMAPIFORMMGR_METHODS(PURE)
  538. };
  539.  
  540. /* Platform numbers (used in .CFG files for forms) */
  541.  
  542. #define MAPIFORM_CPU_X86                1
  543. #define MAPIFORM_CPU_MIP                2
  544. #define MAPIFORM_CPU_AXP                3
  545. #define MAPIFORM_CPU_PPC                4
  546. #define MAPIFORM_CPU_M68                5
  547.  
  548. #define MAPIFORM_OS_WIN_31              1
  549. #define MAPIFORM_OS_WINNT_35            2
  550. #define MAPIFORM_OS_WIN_95              3
  551. #define MAPIFORM_OS_MAC_7x              4
  552. #define MAPIFORM_OS_WINNT_40            5
  553.  
  554. #define MAPIFORM_PLATFORM(CPU, OS) ((ULONG) ((((ULONG) CPU) << 16) | OS))
  555.  
  556.  
  557. /*-- IMAPIFormContainer -------------------------------------------------*/
  558.  
  559. /*  Flags for IMAPIFormMgr::CalcFormPropSet */
  560.  
  561. /* #define FORMPROPSET_UNION            0   */
  562. /* #define FORMPROPSET_INTERSECTION     1   */
  563.  
  564. /*  Flags for IMAPIFormMgr::InstallForm     */
  565.  
  566. #define MAPIFORM_INSTALL_DIALOG                 MAPI_DIALOG
  567. #define MAPIFORM_INSTALL_OVERWRITEONCONFLICT    0x0010
  568.  
  569. /*  Flags for IMAPIFormContainer::ResolveMessageClass and
  570.     IMAPIFormContainer::ResolveMultipleMessageClasses */
  571. /* #define MAPIFORM_EXACTIMATCH    0x0020   */
  572.  
  573. #define MAPI_IMAPIFORMCONTAINER_METHODS(IPURE)                       \
  574.     MAPIMETHOD(InstallForm)(THIS_                                   \
  575.         /*in*/  ULONG ulUIParam,                                        \
  576.         /*in*/  ULONG ulFlags,                                          \
  577.         /*in*/  LPCTSTR szCfgPathName) IPURE;                           \
  578.     MAPIMETHOD(RemoveForm)(THIS_                                        \
  579.         /*in*/  LPCSTR szMessageClass) IPURE;                           \
  580.     MAPIMETHOD(ResolveMessageClass) (THIS_                              \
  581.         /*in*/  LPCSTR szMessageClass,                                  \
  582.         /*in*/  ULONG ulFlags,                                          \
  583.         /*out*/ LPMAPIFORMINFO FAR * pforminfo) IPURE;                  \
  584.     MAPIMETHOD(ResolveMultipleMessageClasses) (THIS_                    \
  585.         /*in*/  LPSMESSAGECLASSARRAY pMsgClassArray,                    \
  586.         /*in*/  ULONG ulFlags,                                          \
  587.         /*out*/ LPSMAPIFORMINFOARRAY FAR * ppfrminfoarray) IPURE;       \
  588.     MAPIMETHOD(CalcFormPropSet)(THIS_                                   \
  589.         /*in*/  ULONG ulFlags,                                          \
  590.         /*out*/ LPMAPIFORMPROPARRAY FAR * ppResults) IPURE;             \
  591.     MAPIMETHOD(GetDisplay)(THIS_                                        \
  592.         /*in*/  ULONG ulFlags,                                          \
  593.         /*out*/ LPTSTR FAR * pszDisplayName) IPURE;                     \
  594.  
  595. #undef INTERFACE
  596. #define INTERFACE IMAPIFormContainer
  597. DECLARE_MAPI_INTERFACE_(IMAPIFormContainer, IUnknown)
  598. {
  599.     BEGIN_INTERFACE
  600.     MAPI_IUNKNOWN_METHODS(PURE)
  601.     MAPI_GETLASTERROR_METHOD(PURE)
  602.     MAPI_IMAPIFORMCONTAINER_METHODS(PURE)
  603. };
  604.  
  605. /*-- IMAPIFormFactory ------------------------------------------------------*/
  606.  
  607. #define MAPI_IMAPIFORMFACTORY_METHODS(IPURE)                            \
  608.     MAPIMETHOD(CreateClassFactory) (THIS_                               \
  609.         /*in*/  REFCLSID clsidForm,                                     \
  610.         /*in*/  ULONG ulFlags,                                          \
  611.         /*out*/ LPCLASSFACTORY FAR * lppClassFactory) IPURE;            \
  612.     MAPIMETHOD(LockServer) (THIS_                                       \
  613.         /*in*/  ULONG ulFlags,                                          \
  614.         /*in*/  ULONG fLockServer) IPURE;                               \
  615.  
  616. #undef INTERFACE
  617. #define INTERFACE IMAPIFormFactory
  618. DECLARE_MAPI_INTERFACE_(IMAPIFormFactory, IUnknown)
  619. {
  620.     BEGIN_INTERFACE
  621.     MAPI_IUNKNOWN_METHODS(PURE)
  622.     MAPI_GETLASTERROR_METHOD(PURE)
  623.     MAPI_IMAPIFORMFACTORY_METHODS(PURE)
  624. };
  625.  
  626. #pragma option pop /*P_O_Pop*/
  627. #endif                          /* MAPIFORM_H */
  628.  
  629.