adcctl.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 7k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. // adcctl.h : Declaration of the CADCCtl
  2. #ifndef __ADCCTL_H_
  3. #define __ADCCTL_H_
  4. #include "resource.h"       // main symbols
  5. #include "event.h"          // for CEventBroker
  6. #include "iface.h"          // for IARPSimpleProvider
  7. #include <shdispid.h>       // DISPID_ constants
  8. #define NUM_ARP_SIMPLE_PROVIDERS 4
  9. //------------------------------------------------------------------------
  10. //
  11. //  Class:     CADCCtl
  12. //
  13. //  Synopsis:  This is the AppDataControl COM object.
  14. //             It creates a CADCArr object to manage the control's data.
  15. //
  16. //------------------------------------------------------------------------
  17. // CADCCtl
  18. class ATL_NO_VTABLE CADCCtl :
  19.     public CComObjectRootEx<CComSingleThreadModel>,
  20.     public CComCoClass<CADCCtl, &CLSID_ADCCtl>,
  21.     public CComControl<CADCCtl>,
  22.     public CStockPropImpl<CADCCtl, IADCCtl, &IID_IADCCtl, &LIBID_SHAPPMGRLib>,
  23.     public IProvideClassInfo2Impl<&CLSID_ADCCtl, NULL, &LIBID_SHAPPMGRLib>,
  24.     public IPersistStreamInitImpl<CADCCtl>,
  25.     public IPersistStorageImpl<CADCCtl>,        // new
  26.     public IQuickActivateImpl<CADCCtl>,         // new
  27.     public IOleControlImpl<CADCCtl>,
  28.     public IOleObjectImpl<CADCCtl>,
  29.     public IOleInPlaceActiveObjectImpl<CADCCtl>,
  30.     public IViewObjectExImpl<CADCCtl>,
  31.     public IConnectionPointContainerImpl<CADCCtl>,
  32.     public IOleInPlaceObjectWindowlessImpl<CADCCtl>,
  33.     public IPersistPropertyBagImpl<CADCCtl>,         // missing
  34.     public IRunnableObjectImpl<CADCCtl>,             // missing
  35.     public IPropertyNotifySinkCP<CADCCtl>,           // missing
  36.     public IDataObjectImpl<CADCCtl>,            // new
  37.     public ISpecifyPropertyPagesImpl<CADCCtl>   // new
  38. {
  39. public:
  40.     CADCCtl();
  41.     virtual ~CADCCtl();
  42.     
  43.     DECLARE_REGISTRY_RESOURCEID(IDR_ADCCTL)
  44.     DECLARE_NOT_AGGREGATABLE(CADCCtl)
  45.     BEGIN_COM_MAP(CADCCtl) 
  46.         COM_INTERFACE_ENTRY(IADCCtl)
  47.         COM_INTERFACE_ENTRY(IDispatch)          // does order matter?  TDC has IDispatch first
  48.         COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
  49.         COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
  50.         COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
  51.         COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
  52.         COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
  53.         COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
  54.         COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
  55.         COM_INTERFACE_ENTRY_IMPL(IOleControl)
  56.         COM_INTERFACE_ENTRY_IMPL(IOleObject)
  57.         COM_INTERFACE_ENTRY_IMPL(IQuickActivate)        // new
  58.         COM_INTERFACE_ENTRY_IMPL(IPersistStorage)       // new
  59.         COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
  60.         COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  61.         COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages) // new
  62.         COM_INTERFACE_ENTRY_IMPL(IDataObject)           // new
  63.         COM_INTERFACE_ENTRY(IProvideClassInfo)
  64.         COM_INTERFACE_ENTRY(IProvideClassInfo2)
  65.         COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag)   // missing
  66.         COM_INTERFACE_ENTRY_IMPL(IRunnableObject)       // missing
  67.     END_COM_MAP()
  68.     BEGIN_PROPERTY_MAP(CADCCtl)
  69.         PROP_ENTRY("Dirty",         DISPID_IADCCTL_DIRTY, CLSID_ADCCtl)
  70.         PROP_ENTRY("Category",      DISPID_IADCCTL_PUBCAT,   CLSID_ADCCtl)
  71.         PROP_ENTRY("ShowPostSetup", DISPID_IADCCTL_SHOWPOSTSETUP, CLSID_ADCCtl)
  72.         PROP_ENTRY("OnDomain",         DISPID_IADCCTL_ONDOMAIN, CLSID_ADCCtl)                
  73.         PROP_ENTRY("DefaultCategory",  DISPID_IADCCTL_DEFAULTCAT, CLSID_ADCCtl)                
  74.     END_PROPERTY_MAP()
  75.     BEGIN_CONNECTION_POINT_MAP(CADCCtl)
  76.         CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
  77.     END_CONNECTION_POINT_MAP()
  78.     BEGIN_MSG_MAP(CADCCtl)
  79.         MESSAGE_HANDLER(WM_PAINT, OnPaint)
  80.         MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
  81.         MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
  82.     END_MSG_MAP()
  83.     // These members and methods expose the IADCCtl interface
  84.     
  85.     // Control methods
  86.     STDMETHOD(IsRestricted) (BSTR bstrPolicy, VARIANT_BOOL * pbRestricted);
  87.     STDMETHOD(Reset)        (BSTR bstrQualifier);
  88.     STDMETHOD(Exec)         (BSTR bstrQualifier, BSTR bstrCmd, LONG nRecord);
  89.     //  Control Properties
  90.     //
  91.     STDMETHOD(get_Dirty)    (VARIANT_BOOL * pbDirty); 
  92.     STDMETHOD(put_Dirty)    (VARIANT_BOOL bDirty);
  93.     STDMETHOD(get_Category) (BSTR * pbstr); 
  94.     STDMETHOD(put_Category) (BSTR bstr);
  95.     STDMETHOD(get_Sort)     (BSTR * pbstr); 
  96.     STDMETHOD(put_Sort)     (BSTR bstr);
  97.     STDMETHOD(get_Forcex86) (VARIANT_BOOL * pbForce); 
  98.     STDMETHOD(put_Forcex86) (VARIANT_BOOL bForce);
  99.     STDMETHOD(get_ShowPostSetup)(VARIANT_BOOL * pbShow);
  100.     STDMETHOD(get_OnDomain) (VARIANT_BOOL * pbOnDomain); 
  101.     STDMETHOD(put_OnDomain) (VARIANT_BOOL bOnDomain);
  102.     STDMETHOD(get_DefaultCategory) (BSTR * pbstr); 
  103.     
  104.     //  Data source notification methods
  105.     STDMETHOD(msDataSourceObject)   (BSTR qualifier, IUnknown **ppUnk);
  106.     STDMETHOD(addDataSourceListener)(IUnknown *pEvent);
  107.     // *** IViewObjectEx ***
  108.     STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
  109.     {
  110.         ATLTRACE(_T("IViewObjectExImpl::GetViewStatusn"));
  111.         *pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;
  112.         return S_OK;
  113.     }
  114.     // *** Overriding ATL functions ***  
  115.     virtual STDMETHODIMP IOleObject_SetClientSite(IOleClientSite *pClientSite);
  116.         
  117. private:
  118.     HRESULT     _CreateMatrixObject(DWORD dwEnum, IARPSimpleProvider ** pparposp);
  119.     HRESULT     _ReleaseMatrixObject(DWORD dwIndex);
  120.     HRESULT     _InitEventBrokers(DataSourceListener * pdsl, BOOL bRecreate);
  121.     // Release all of the matrix objects
  122.     HRESULT     _ReleaseAllMatrixObjects(void);
  123.     HRESULT     _ReleaseAllEventBrokers();
  124.     DWORD       _GetEnumAreaFromQualifier(BSTR bstrQualifier);
  125.     BOOL        _IsMyComputerOnDomain();
  126.     HRESULT     _CheckSecurity(IOleClientSite * pClientSite);
  127.     HRESULT     _KillDatasrcWorkerThread(IARPSimpleProvider * parp);    
  128.     HRESULT     _GetToplevelHWND(void);
  129.     
  130.     IShellAppManager * _psam;               // shell app manager    
  131.     IARPEvent * _rgparpevt[NUM_ARP_SIMPLE_PROVIDERS];
  132.                                             // array of event brokers, each OSP has one cooresponding
  133.     IARPSimpleProvider * _rgparposp[NUM_ARP_SIMPLE_PROVIDERS];
  134.                                             // array of OSP's we carry in this data source object
  135.     
  136.     IOleClientSite * _pclientsite;          // cached client site
  137.     
  138.     CComBSTR    _cbstrCategory;
  139.     CComBSTR    _cbstrSort;
  140.     DWORD       _dwEnum;                    // enumerate which items? (ENUM_*)
  141.     
  142.     BITBOOL     _fInReset: 1;               // TRUE if Reset has already been entered
  143.     BITBOOL     _fDirty : 1;                // TRUE if the recordset is dirty. 
  144.     BITBOOL     _fCategoryChanged: 1;       // TRUE if Category property has changed
  145.     BITBOOL     _fSecure : 1;               // TRUE if we don't have security problem
  146.     BITBOOL     _fOnDomain : 1;             // TRUE if we are running on a machine connected to a domain
  147.     HWND        _hwndTB;                    // Toplevel browser hwnd
  148. };
  149. #endif //__ADCCTL_H_