TVDLG.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

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