windows-nt/Source/XPSP1/NT/shell/cpls/appwzdui/adcctl.h
2020-09-26 16:20:57 +08:00

175 lines
7 KiB
C++

// adcctl.h : Declaration of the CADCCtl
#ifndef __ADCCTL_H_
#define __ADCCTL_H_
#include "resource.h" // main symbols
#include "event.h" // for CEventBroker
#include "iface.h" // for IARPSimpleProvider
#include <shdispid.h> // DISPID_ constants
#define NUM_ARP_SIMPLE_PROVIDERS 4
//------------------------------------------------------------------------
//
// Class: CADCCtl
//
// Synopsis: This is the AppDataControl COM object.
// It creates a CADCArr object to manage the control's data.
//
//------------------------------------------------------------------------
// CADCCtl
class ATL_NO_VTABLE CADCCtl :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CADCCtl, &CLSID_ADCCtl>,
public CComControl<CADCCtl>,
public CStockPropImpl<CADCCtl, IADCCtl, &IID_IADCCtl, &LIBID_SHAPPMGRPLib>,
public IProvideClassInfo2Impl<&CLSID_ADCCtl, NULL, &LIBID_SHAPPMGRPLib>,
public IPersistStreamInitImpl<CADCCtl>,
public IPersistStorageImpl<CADCCtl>, // new
public IQuickActivateImpl<CADCCtl>, // new
public IOleControlImpl<CADCCtl>,
public IOleObjectImpl<CADCCtl>,
public IOleInPlaceActiveObjectImpl<CADCCtl>,
public IViewObjectExImpl<CADCCtl>,
public IConnectionPointContainerImpl<CADCCtl>,
public IOleInPlaceObjectWindowlessImpl<CADCCtl>,
public IPersistPropertyBagImpl<CADCCtl>, // missing
public IRunnableObjectImpl<CADCCtl>, // missing
public IPropertyNotifySinkCP<CADCCtl>, // missing
public IDataObjectImpl<CADCCtl>, // new
public ISpecifyPropertyPagesImpl<CADCCtl> // new
{
public:
CADCCtl();
virtual ~CADCCtl();
DECLARE_REGISTRY_RESOURCEID(IDR_ADCCTL)
DECLARE_NOT_AGGREGATABLE(CADCCtl)
BEGIN_COM_MAP(CADCCtl)
COM_INTERFACE_ENTRY(IADCCtl)
COM_INTERFACE_ENTRY(IDispatch) // does order matter? TDC has IDispatch first
COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY_IMPL(IOleControl)
COM_INTERFACE_ENTRY_IMPL(IOleObject)
COM_INTERFACE_ENTRY_IMPL(IQuickActivate) // new
COM_INTERFACE_ENTRY_IMPL(IPersistStorage) // new
COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages) // new
COM_INTERFACE_ENTRY_IMPL(IDataObject) // new
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)
COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag) // missing
COM_INTERFACE_ENTRY_IMPL(IRunnableObject) // missing
END_COM_MAP()
BEGIN_PROPERTY_MAP(CADCCtl)
PROP_ENTRY("Dirty", DISPID_IADCCTL_DIRTY, CLSID_ADCCtl)
PROP_ENTRY("Category", DISPID_IADCCTL_PUBCAT, CLSID_ADCCtl)
PROP_ENTRY("ShowPostSetup", DISPID_IADCCTL_SHOWPOSTSETUP, CLSID_ADCCtl)
PROP_ENTRY("OnDomain", DISPID_IADCCTL_ONDOMAIN, CLSID_ADCCtl)
PROP_ENTRY("DefaultCategory", DISPID_IADCCTL_DEFAULTCAT, CLSID_ADCCtl)
END_PROPERTY_MAP()
BEGIN_CONNECTION_POINT_MAP(CADCCtl)
CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
END_CONNECTION_POINT_MAP()
BEGIN_MSG_MAP(CADCCtl)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
END_MSG_MAP()
// These members and methods expose the IADCCtl interface
// Control methods
STDMETHOD(IsRestricted) (BSTR bstrPolicy, VARIANT_BOOL * pbRestricted);
STDMETHOD(Reset) (BSTR bstrQualifier);
STDMETHOD(Exec) (BSTR bstrQualifier, BSTR bstrCmd, LONG nRecord);
// Control Properties
//
STDMETHOD(get_Dirty) (VARIANT_BOOL * pbDirty);
STDMETHOD(put_Dirty) (VARIANT_BOOL bDirty);
STDMETHOD(get_Category) (BSTR * pbstr);
STDMETHOD(put_Category) (BSTR bstr);
STDMETHOD(get_Sort) (BSTR * pbstr);
STDMETHOD(put_Sort) (BSTR bstr);
STDMETHOD(get_Forcex86) (VARIANT_BOOL * pbForce);
STDMETHOD(put_Forcex86) (VARIANT_BOOL bForce);
STDMETHOD(get_ShowPostSetup)(VARIANT_BOOL * pbShow);
STDMETHOD(get_OnDomain) (VARIANT_BOOL * pbOnDomain);
STDMETHOD(put_OnDomain) (VARIANT_BOOL bOnDomain);
STDMETHOD(get_DefaultCategory) (BSTR * pbstr);
// Data source notification methods
STDMETHOD(msDataSourceObject) (BSTR qualifier, IUnknown **ppUnk);
STDMETHOD(addDataSourceListener)(IUnknown *pEvent);
// *** IViewObjectEx ***
STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
{
ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n"));
*pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;
return S_OK;
}
// *** Overriding ATL functions ***
virtual STDMETHODIMP IOleObject_SetClientSite(IOleClientSite *pClientSite);
private:
HRESULT _CreateMatrixObject(DWORD dwEnum, IARPSimpleProvider ** pparposp);
HRESULT _ReleaseMatrixObject(DWORD dwIndex);
HRESULT _InitEventBrokers(DataSourceListener * pdsl, BOOL bRecreate);
// Release all of the matrix objects
HRESULT _ReleaseAllMatrixObjects(void);
HRESULT _ReleaseAllEventBrokers();
DWORD _GetEnumAreaFromQualifier(BSTR bstrQualifier);
BOOL _IsMyComputerOnDomain();
HRESULT _CheckSecurity(IOleClientSite * pClientSite);
HRESULT _KillDatasrcWorkerThread(IARPSimpleProvider * parp);
HRESULT _GetToplevelHWND(void);
IShellAppManager * _psam; // shell app manager
IARPEvent * _rgparpevt[NUM_ARP_SIMPLE_PROVIDERS];
// array of event brokers, each OSP has one cooresponding
IARPSimpleProvider * _rgparposp[NUM_ARP_SIMPLE_PROVIDERS];
// array of OSP's we carry in this data source object
IOleClientSite * _pclientsite; // cached client site
CComBSTR _cbstrCategory;
CComBSTR _cbstrSort;
DWORD _dwEnum; // enumerate which items? (ENUM_*)
BITBOOL _fInReset: 1; // TRUE if Reset has already been entered
BITBOOL _fDirty : 1; // TRUE if the recordset is dirty.
BITBOOL _fCategoryChanged: 1; // TRUE if Category property has changed
BITBOOL _fSecure : 1; // TRUE if we don't have security problem
BITBOOL _fOnDomain : 1; // TRUE if we are running on a machine connected to a domain
HWND _hwndTB; // Toplevel browser hwnd
};
#endif //__ADCCTL_H_