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