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 / chsfld.cli / tvdlg.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-11  |  4.8 KB  |  186 lines

  1. ////////////////////////////////////////////////////////////////////////////
  2. //
  3. //      TVDLG.H
  4. //
  5. //  Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
  6. ////////////////////////////////////////////////////////////////////////////
  7.  
  8. #ifndef __TVDLG__H__
  9. #define __TVDLG__H__
  10.  
  11.  
  12. enum { iEID, iDispName, iSubfldrs, nhtProps};
  13. static SizedSPropTagArray(nhtProps, spthtProps) =
  14. { nhtProps,
  15.     {   PR_ENTRYID,
  16.         PR_DISPLAY_NAME,
  17.         PR_SUBFOLDERS
  18.     }
  19. };  
  20.  
  21. #define Align4(_cb) (((_cb) + 3) & ~3)
  22.  
  23. extern LPSTR g_szNoFolderName;
  24. extern LPSTR g_szAllStores;
  25.  
  26. class CTVNodeFactory;
  27. class CChsFldDlg;
  28.  
  29.  
  30. /////////////////////////////////////////////////////////////////////////
  31. // CTVNode
  32.  
  33. class CTVNode;
  34. typedef CTVNode * LPTVNODE;
  35.  
  36. class CTVNode
  37. {
  38.  
  39. friend CTVNodeFactory;
  40. friend HTREEITEM HtiFindChild(HWND hwTreeCtl, HTREEITEM hti, ULONG cb,
  41.                 LPENTRYID pbEID, CChsFldDlg *pCFDlg, LPTVNODE *ppNode);
  42.  
  43.  
  44. public:
  45.     LPSTR GetName(void);
  46.     HRESULT HrExpand(CChsFldDlg * pCFDlg);
  47.     HRESULT HrGetFolder(CChsFldDlg * pCFDlg, LPMAPIFOLDER * ppfld,
  48.                             LPMDB *ppmdb);
  49.  
  50.     void SetHandle(HTREEITEM hItem) { m_htiMe = hItem;}
  51.     void SetKidsLoaded(BOOL fLoaded) { m_fKidsLoaded = fLoaded;}
  52.  
  53.     HRESULT HrNewFolder(CChsFldDlg * pCFDlg, LPSTR szFldName);
  54.  
  55.     static LPVOID operator new( size_t cb );
  56.     static VOID   operator delete( LPVOID pv );
  57.  
  58.     void Write(BOOL fWrite, LONG iLevel, LPBYTE * ppb);
  59.     
  60.     ~CTVNode();
  61.  
  62. private:
  63.     
  64.     //can only be created in CTVNodeFactory::HrCreateNode
  65.     CTVNode(LPSPropValue pvals, ULONG cprops, LPMDB pmdb);
  66.  
  67.     HRESULT HrOpenMDB(CChsFldDlg * pCFDlg);
  68.     HRESULT HrOpenFolder(CChsFldDlg * pCFDlg);
  69.     
  70.     HTREEITEM       m_htiMe;
  71.     LPSPropValue    m_pval;
  72.     BOOL            m_fKidsLoaded;
  73.     LPMAPIFOLDER    m_pfld;
  74.     CTVNode         *m_pNext;
  75.     LPMDB           m_pmdb;
  76. };
  77.  
  78.  
  79.  
  80.  
  81. //
  82. //  CTVNode::GetName
  83. //
  84. inline LPSTR CTVNode::GetName(void)
  85. {
  86.  
  87.     if(m_pval[iDispName].ulPropTag == PR_DISPLAY_NAME)
  88.         return m_pval[iDispName].Value.lpszA;
  89.     else
  90.         return g_szNoFolderName;
  91. }
  92.  
  93.  
  94. ////////////////////////////////////////////////////////////////////////
  95. // CTVNodeFactory
  96.  
  97. class CTVNodeFactory
  98. {
  99. public:
  100.     HRESULT HrCreateNode(LPSPropValue pval, ULONG cVals, LPMDB pmdb,
  101.                             LPTVNODE * pptvnode);
  102.  
  103.     CTVNodeFactory();
  104.     ~CTVNodeFactory();
  105.  
  106. private:
  107.     void Insert(CTVNode * ptvnode);
  108.  
  109.     LPTVNODE    m_pHead;
  110. };
  111.  
  112.  
  113. ////////////////////////////////////////////////////////////////////////
  114. // CChsFldDlg
  115.  
  116. class CChsFldDlg
  117. {
  118. public:
  119.     HRESULT HrPick(LPCTSTR lpTemplateName, HWND hWnd,
  120.                 DLGPROC pfnDlgProc, LPMAPIFOLDER * ppfld, LPMDB *ppmdb);
  121.     HRESULT HrInitTree(HWND hDlg, HWND hwTreeCtl);
  122.     HRESULT HrLoadRoots(void);
  123.     HRESULT HrInsertRoot(LPSPropValue pval);
  124.     BOOL    IsTreeRoot(HTREEITEM hti) { return (hti == m_hiRoot); }
  125.  
  126.     int     IndAllStores(void)  { return m_iIconAllStores; }
  127.     int     IndRootFld(void)    { return m_iIconRootFld; }
  128.     int     IndOpenFld(void)    { return m_iIconOpenFld; }
  129.     int     IndClsdFld(void)    { return m_iIconClsdFld; }
  130.     HWND    hwDialog(void)      { return m_hDlg; }
  131.     HWND    hwTreeCtl(void)     { return m_hwTreeCtl; }
  132.  
  133.     LPMAPISESSION   Session(void) { return m_pses; }
  134.  
  135.     
  136.     HINSTANCE hInst(void)   { return m_hInst; }
  137.  
  138.     HRESULT HrCreateNode(LPSPropValue pval, ULONG cvals, LPMDB pmdb,
  139.                             LPTVNODE * ppNode)
  140.         { return m_NodeFactory.HrCreateNode(pval, cvals, pmdb, ppNode);}
  141.  
  142.     void    SetFolder(LPMAPIFOLDER plfd, LPMDB pmdb);
  143.     void    SetError(HRESULT hr)    { m_hr = hr;}
  144.  
  145.     HRESULT HrSaveTreeState(void);
  146.     HRESULT HrRestoreTreeState(void);
  147.  
  148.     CChsFldDlg(LPMAPISESSION pses, HINSTANCE hInst, ULONG * pcb, LPBYTE * ppb);
  149.     ~CChsFldDlg();
  150.  
  151.     CLastError      m_lsterr;
  152.     
  153. private:
  154.  
  155.     HRESULT HrSaveTreeStateEx(BOOL fWrite, ULONG * pcb, LPBYTE * ppb);
  156.     HRESULT HrRestoreTreeState(ULONG cb, LPBYTE pb);
  157.     
  158.     LPMAPISESSION   m_pses;
  159.     LPMAPIFOLDER    m_pfld;
  160.     LPMDB           m_pmdb;
  161.     HRESULT         m_hr;
  162.     HTREEITEM       m_hiRoot;
  163.     HINSTANCE       m_hInst;
  164.     HWND            m_hDlg;
  165.     HWND            m_hwTreeCtl;
  166.  
  167.     HIMAGELIST      m_hIml;
  168.     int             m_iIconAllStores;
  169.     int             m_iIconRootFld;
  170.     int             m_iIconOpenFld;
  171.     int             m_iIconClsdFld;
  172.     
  173.     ULONG           *m_pcbState;
  174.     LPBYTE          *m_ppbState;
  175.     
  176.     CTVNodeFactory  m_NodeFactory;
  177.     
  178. };
  179.  
  180.  
  181. HTREEITEM AddOneItem( HTREEITEM hParent, HTREEITEM hInsAfter, 
  182.     int iImage, int iImageSel, HWND hwndTree, LPTVNODE pNode, int cKids);
  183.  
  184.  
  185. #endif //__TVDLG__H__
  186.