home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / dbmsg / mapi / simple.frm / formbase.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-11  |  5.9 KB  |  182 lines

  1. //
  2. //  FORMBASE.H
  3. //  
  4. //  Base form class definition
  5. //
  6. //  Copyright (c) 1986-1996, Microsoft Corporation.
  7. //  All rights reserved.
  8. //
  9.  
  10.  
  11. #include        <chsfld.h>
  12.  
  13. //
  14. //  Form states
  15. //
  16.  
  17. enum { stateUninit, stateNormal, stateNoScribble, stateHandsOffFromNormal,
  18.         stateHandsOffFromSave, stateDead };
  19.  
  20. //
  21. //  Message properties held in memory
  22. //
  23.  
  24. enum { irtTo, irtCc, irtSubject, irtTime, irtFrom, irtClass, irtBody,
  25.         irtNormSubject, irtConvIdx, irtConvTopic, cpropMsg};
  26. #define MESSAGE_TAGS { cpropMsg, \
  27.     { PR_DISPLAY_TO, PR_DISPLAY_CC, PR_SUBJECT, \
  28.       PR_CLIENT_SUBMIT_TIME, PR_SENDER_NAME, PR_MESSAGE_CLASS, \
  29.       PR_BODY, PR_NORMALIZED_SUBJECT, PR_CONVERSATION_INDEX, PR_CONVERSATION_TOPIC } }
  30.  
  31. //form type
  32. enum { eformRead, eformSend};
  33.  
  34. //reply type  (this form does not implement reply all)
  35. enum eREPLYTYPE {eREPLY, eFORWARD, eREPLY_ALL}; 
  36.  
  37. //message class
  38. //has to be the same as MessageClass in smpfrm.cfg
  39. #define FormClassName "IPM.Note.Sample.Simple"
  40.  
  41.  
  42.  
  43. //all the MAPI form interfaces we'll need
  44. class CBaseForm : public IPersistMessage, public IMAPIForm,
  45.                     public IMAPIFormAdviseSink
  46. {
  47.     CBaseForm *         m_pfrmNext;             // Linked list of forms
  48.  
  49.     ULONG               m_cRef;                 // Reference Count on object
  50.     ULONG               m_state;                //uses state enum
  51.     CLastError          m_lsterr;               // Last Error Implementation
  52.  
  53.  
  54.     CClassFactory *     m_pClassFactory;        // The factory that created us
  55.     CViewNotifier       m_viewnotify;
  56.  
  57.     LPMAPIVIEWCONTEXT   m_pviewctxOverride;
  58.     LPMAPIVIEWCONTEXT   m_pviewctx;             // View context interface
  59.  
  60.     LPMESSAGE           m_pmsg;                 // our message
  61.     LPMAPIMESSAGESITE   m_pmsgsite;             // our message site
  62.     LPMAPISESSION       m_pses;                 // our MAPI session
  63.     LPADRBOOK           m_pab;                  // our address book
  64.  
  65.     LPADRLIST           m_padrlist;             // Current recipient list
  66.     LPSPropValue        m_pval;                 // Current message contents
  67.  
  68.     ULONG               m_ulMsgFlags;           // Message flags
  69.     ULONG               m_ulMsgStatus;          // Message status flags
  70.     ULONG               m_ulSiteStatus;         // Message Site status flags
  71.     ULONG               m_ulViewStatus;         // View context status flags
  72.  
  73.     ULONG               m_cxMin;                // Minimium size of window
  74.     ULONG               m_cyMin;                //
  75.  
  76.     int                 m_eFormType;            //read/write
  77.  
  78.     unsigned int        m_fSameAsLoaded:1;      // Copy of ::Save flag
  79.     unsigned int        m_fRecipientsDirty:1;   // Is the recip list dirty?
  80.     unsigned int        m_fDirty:1;
  81.     unsigned int        m_fConvTopicSet:1;
  82.  
  83.     ULONG               m_cbConvIdx;
  84.     LPBYTE              m_lpbConvIdx;
  85.     
  86.     HACCEL              m_HAccelTable;
  87.  
  88.     HMODULE             m_hChsFldDll;
  89.     HRPICKFOLDER        m_lpfnHrPickFolder;
  90.     ULONG               m_cbCFDState;
  91.     LPBYTE              m_pbCFDState;
  92.  
  93.     
  94. public:
  95.     
  96.     HWND                m_hwnd;
  97.     HWND                m_hwndDialog;
  98.  
  99. public:
  100.     CBaseForm(CClassFactory *);
  101.     ~CBaseForm(void);
  102.  
  103.     MAPI_IUNKNOWN_METHODS(IMPL);
  104.     MAPI_GETLASTERROR_METHOD(IMPL);
  105.     MAPI_IPERSISTMESSAGE_METHODS(IMPL);
  106.     MAPI_IMAPIFORM_METHODS(IMPL);
  107.     MAPI_IMAPIFORMADVISESINK_METHODS(IMPL);
  108.  
  109.     //utility methods
  110.  
  111.     
  112.     BOOL                TranslateMessage(MSG&);
  113.     LPMESSAGE           Message(void) { return m_pmsg; }
  114.     LPMAPIMESSAGESITE   MsgSite(void) { return m_pmsgsite; }
  115.     LPMAPIVIEWCONTEXT   ViewCtx(void) { return (m_pviewctxOverride ? m_pviewctxOverride:m_pviewctx); }
  116.     void                Address(int);
  117.     void                ClearWindow(void);  
  118.     void                ConfigMenu(HMENU hMenu);
  119.     HRESULT             HrQuerySave (DWORD ulSaveOptions);
  120.     void                SetMinSize(int cx, int cy) { m_cxMin = cx; m_cyMin = cy; return; }
  121.     CBaseForm *         GetNext(void) { return m_pfrmNext; }
  122.     void                DoSubmit(void);
  123.     void                DoSave(void);
  124.     void                DoDelete(void);
  125.     void                DoCopy(void);
  126.     void                DoMove(void);
  127.     void                DoNext(ULONG ulDir);                
  128.     void                DoReply(eREPLYTYPE);
  129.  
  130. private:
  131.                                             
  132.     void                DisplayMessage(void);
  133.     HRESULT             HrGetMsgDataFromUI(HWND hDlg);
  134.     HRESULT             HrGetMsgDataFromMsg(LPMESSAGE pmsg, ULONG ulMsgFlags);
  135.     BOOL                IsAddressed(void);
  136.     HRESULT             HrReply(eREPLYTYPE eType, HWND hwndParent, LPCRECT rcPos);
  137.     void                DeInitObjects(void);
  138.     HRESULT             HrOpenForm(HWND, LPCRECT, ULONG);
  139.     HRESULT             HrSaveInto(LPMESSAGE);
  140.     void                UpdateRecipientsDisplay(void);
  141.     int                 ShowMessageBox(HWND, LPCTSTR, LPCTSTR, UINT);
  142.     void                ShowError();
  143.     inline void         ConfigWinMenu(void);
  144.     HRESULT             HrSaveToString(LPSTR *);
  145.     void                ClearDirty(void);
  146.     BOOL                FGetFoldChooser(void);
  147.  
  148. };
  149.  
  150.  
  151.  
  152. //
  153. //  Linked list of form objects
  154. //
  155.  
  156. extern CBaseForm *      g_PfrmFirst;
  157.  
  158. //
  159. //  Other globals
  160. //
  161.  
  162. extern HINSTANCE        g_hinst;
  163. extern LPVOID           g_lpCtl3d;
  164.  
  165. void FormatTime(FILETIME *pft, LPSTR szTime);
  166. HRESULT GetMsgAdrlist (LPMESSAGE pmsg, LPADRLIST *  ppAdrList, CLastError *);
  167. HRESULT HrStreamInMsgBody(LPMESSAGE pmsg, LPVOID pbase, LPSTR *  pszBody, CLastError * plsterr);
  168. HRESULT HrStreamOutMsgBody(LPMESSAGE pmsg, LPSTR szBody, CLastError * plsterr);
  169.  
  170.  
  171. ///     CBaseForm::ConfigWinMenu()
  172. //
  173. inline void CBaseForm::ConfigWinMenu()
  174. {
  175.     if(NULL != m_hwnd)
  176.     {
  177.         HMENU hmenu = GetMenu(m_hwnd);
  178.         if(NULL != hmenu)
  179.             ConfigMenu(hmenu);
  180.     }
  181. }
  182.