home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winbase / cluster / smbsmp / smbsmpex / extobj.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-29  |  7.2 KB  |  237 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. //    Copyright (c) 1997 <company name>
  4. //
  5. //    Module Name:
  6. //        ExtObj.h
  7. //
  8. //    Abstract:
  9. //        Definition of the CExtObject class, which implements the
  10. //        extension interfaces required by a Microsoft Windows NT Cluster
  11. //        Administrator Extension DLL.
  12. //
  13. //    Implementation File:
  14. //        ExtObj.cpp
  15. //
  16. //    Author:
  17. //        <name> (<e-mail name>) Mmmm DD, 1997
  18. //
  19. //    Revision History:
  20. //
  21. //    Notes:
  22. //
  23. /////////////////////////////////////////////////////////////////////////////
  24.  
  25. #ifndef _EXTOBJ_H_
  26. #define _EXTOBJ_H_
  27.  
  28. /////////////////////////////////////////////////////////////////////////////
  29. // Include Files
  30. /////////////////////////////////////////////////////////////////////////////
  31.  
  32. #ifndef __cluadmex_h__
  33. #include <CluAdmEx.h>    // for CLUADMEX_OBJECT_TYPE and interfaces
  34. #endif
  35.  
  36. #ifndef __extobj_idl_h__
  37. #include "ExtObjID.h"    // for CLSID_CoSmbSmpEx
  38. #endif
  39.  
  40. /////////////////////////////////////////////////////////////////////////////
  41. // Forward Class Declarations
  42. /////////////////////////////////////////////////////////////////////////////
  43.  
  44. class CExtObject;
  45. class CObjData;
  46. class CResData;
  47.  
  48. /////////////////////////////////////////////////////////////////////////////
  49. // External Class Declarations
  50. /////////////////////////////////////////////////////////////////////////////
  51.  
  52. class CBasePropertyPage;
  53.  
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CPageList
  56. /////////////////////////////////////////////////////////////////////////////
  57.  
  58. typedef CList<CBasePropertyPage *, CBasePropertyPage *> CPageList;
  59.  
  60. /////////////////////////////////////////////////////////////////////////////
  61. // class CObjData
  62. /////////////////////////////////////////////////////////////////////////////
  63.  
  64. class CObjData
  65. {
  66. public:
  67.     CString                    m_strName;
  68.     CLUADMEX_OBJECT_TYPE    m_cot;
  69.  
  70.     virtual ~CObjData(void) { }
  71.  
  72. };  //*** class CObjData
  73.  
  74. /////////////////////////////////////////////////////////////////////////////
  75. // class CNodeData
  76. /////////////////////////////////////////////////////////////////////////////
  77.  
  78. class CNodeData : public CObjData
  79. {
  80. public:
  81.     HNODE        m_hnode;
  82.  
  83. };  //*** class CNodeData
  84.  
  85. /////////////////////////////////////////////////////////////////////////////
  86. // class CGroupData
  87. /////////////////////////////////////////////////////////////////////////////
  88.  
  89. class CGroupData : public CObjData
  90. {
  91. public:
  92.     HGROUP        m_hgroup;
  93.  
  94. };  //*** class CGroupData
  95.  
  96. /////////////////////////////////////////////////////////////////////////////
  97. // class CResData
  98. /////////////////////////////////////////////////////////////////////////////
  99.  
  100. class CResData : public CObjData
  101. {
  102. public:
  103.     HRESOURCE    m_hresource;
  104.     CString        m_strResTypeName;
  105.  
  106. };  //*** class CResData
  107.  
  108. /////////////////////////////////////////////////////////////////////////////
  109. // class CNetworkData
  110. /////////////////////////////////////////////////////////////////////////////
  111.  
  112. class CNetworkData : public CObjData
  113. {
  114. public:
  115.     HNETWORK    m_hnetwork;
  116.  
  117. };  //*** class CNetworkData
  118.  
  119. /////////////////////////////////////////////////////////////////////////////
  120. // class CNetInterfaceData
  121. /////////////////////////////////////////////////////////////////////////////
  122.  
  123. class CNetInterfaceData : public CObjData
  124. {
  125. public:
  126.     HNETINTERFACE    m_hnetinterface;
  127.  
  128. };  //*** class CNetInterfaceData
  129.  
  130. /////////////////////////////////////////////////////////////////////////////
  131. // class CExtObject
  132. /////////////////////////////////////////////////////////////////////////////
  133.  
  134. //REVIEW -- using pointers to ID's is necessary because some compilers don't like
  135. //references as template arguments.
  136.  
  137. class CExtObject :
  138.     public IWEExtendPropertySheet,
  139.     public IWEExtendWizard,
  140.     public ISupportErrorInfo,
  141.     public CComObjectRoot,
  142.     public CComCoClass<CExtObject, &CLSID_CoSmbSmpEx>
  143. {
  144. public:
  145.     CExtObject(void);
  146. BEGIN_COM_MAP(CExtObject)
  147.     COM_INTERFACE_ENTRY(IWEExtendPropertySheet)
  148.     COM_INTERFACE_ENTRY(IWEExtendWizard)
  149.     COM_INTERFACE_ENTRY(ISupportErrorInfo)
  150. END_COM_MAP()
  151. //DECLARE_NOT_AGGREGATABLE(CExtObject) 
  152. // Remove the comment from the line above if you don't want your object to 
  153. // support aggregation.  The default is to support it
  154.  
  155. DECLARE_REGISTRY(CExtObject, _T("CLUADMEX.SmbSmpEx"), _T("CLUADMEX.SmbSmpEx"), IDS_CLUADMEX_COMOBJ_DESC, THREADFLAGS_APARTMENT)
  156.  
  157. // ISupportsErrorInfo
  158.     STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  159.  
  160. // IWEExtendPropertySheet
  161. public:
  162.     STDMETHOD(CreatePropertySheetPages)(
  163.                     IN IUnknown *                    piData,
  164.                     IN IWCPropertySheetCallback *    piCallback
  165.                     );
  166.  
  167. // IWEExtendWizard
  168. public:
  169.     STDMETHOD(CreateWizardPages)(
  170.                     IN IUnknown *            piData,
  171.                     IN IWCWizardCallback *    piCallback
  172.                     );
  173.  
  174. // Attributes
  175. protected:
  176.     IUnknown *                    m_piData;
  177.     IWCWizardCallback *            m_piWizardCallback;
  178.     BOOL                        m_bWizard;
  179.     DWORD                        m_istrResTypeName;
  180.  
  181.     // IGetClusterUIInfo data
  182.     LCID                        m_lcid;
  183.     HFONT                        m_hfont;
  184.     HICON                        m_hicon;
  185.  
  186.     // IGetClusterDataInfo data
  187.     HCLUSTER                    m_hcluster;
  188.     LONG                        m_cobj;
  189.  
  190.     CObjData *                    m_podObjData;
  191.  
  192.     CObjData *                    PodObjDataRW(void) const        { return m_podObjData; }
  193.     CResData *                    PrdResDataRW(void) const        { return (CResData *) m_podObjData; }
  194.  
  195. public:
  196.     IUnknown *                    PiData(void) const                { return m_piData; }
  197.     IWCWizardCallback *            PiWizardCallback(void) const    { return m_piWizardCallback; }
  198.     BOOL                        BWizard(void) const                { return m_bWizard; }
  199.     DWORD                        IstrResTypeName(void) const        { return m_istrResTypeName; }
  200.  
  201.     // IGetClusterUIInfo data
  202.     LCID                        Lcid(void) const                { return m_lcid; }
  203.     HFONT                        Hfont(void) const                { return m_hfont; }
  204.     HICON                        Hicon(void) const                { return m_hicon; }
  205.  
  206.     // IGetClusterDataInfo data
  207.     HCLUSTER                    Hcluster(void) const            { return m_hcluster; }
  208.     LONG                        Cobj(void) const                { return m_cobj; }
  209.  
  210.     const CObjData *            PodObjData(void) const            { return m_podObjData; }
  211.     const CNodeData *            PndNodeData(void) const            { ASSERT(Cot() == CLUADMEX_OT_NODE); return (CNodeData *) m_podObjData; }
  212.     const CGroupData *            PgdGroupData(void) const        { ASSERT(Cot() == CLUADMEX_OT_GROUP); return (CGroupData *) m_podObjData; }
  213.     const CResData *            PrdResData(void) const            { ASSERT(Cot() == CLUADMEX_OT_RESOURCE); return (CResData *) m_podObjData; }
  214.     const CNetworkData *        PndNetworkData(void) const        { ASSERT(Cot() == CLUADMEX_OT_NETWORK); return (CNetworkData *) m_podObjData; }
  215.     const CNetInterfaceData *    PndNetInterfaceData(void) const    { ASSERT(Cot() == CLUADMEX_OT_NETINTERFACE); return (CNetInterfaceData *) m_podObjData; }
  216.  
  217.     CLUADMEX_OBJECT_TYPE        Cot(void) const                    { ASSERT(PodObjData() != NULL); return PodObjData()->m_cot; }
  218.  
  219.     HRESULT                        HrGetUIInfo(IUnknown * piData);
  220.     HRESULT                        HrSaveData(IUnknown * piData);
  221.     HRESULT                        HrGetObjectInfo(void);
  222.     HRESULT                        HrGetObjectName(IN OUT IGetClusterObjectInfo * pi);
  223.     HRESULT                        HrGetResourceTypeName(IN OUT IGetClusterResourceInfo * pi);
  224.  
  225. // Implementation
  226. protected:
  227.     virtual ~CExtObject(void);
  228.  
  229.     CPageList                    m_lpg;
  230.     CPageList &                    Lpg(void)                        { return m_lpg; }
  231.  
  232. };  //*** class CExtObject
  233.  
  234. /////////////////////////////////////////////////////////////////////////////
  235.  
  236. #endif // _EXTOBJ_H_
  237.