www.pudn.com > PropBrowser_demo.zip > PBDemoCtrl.h
// PBDemoCtrl.h : Declaration of the CPBDemoCtrl #ifndef __PBDEMOCTRL_H_ #define __PBDEMOCTRL_H_ #include "resource.h" // main symbols #include "DemoCtrlPage.h" class ATL_NO_VTABLE CFontNotifyImpl : public CComObjectRootEx, public IPropertyNotifySink { public: CFontNotifyImpl(){} ~CFontNotifyImpl(){} BEGIN_COM_MAP(CFontNotifyImpl) COM_INTERFACE_ENTRY(IPropertyNotifySink) END_COM_MAP() DWORD m_FontNotifyCookie; // void SetParent(CRSCalculator* pParent){m_pParent = pParent;} // *m_pParent; STDMETHOD(OnChanged)(DISPID dispid){return S_OK;} STDMETHOD(OnRequestEdit)(DISPID dispid){return S_OK;} }; ///////////////////////////////////////////////////////////////////////////// // CPBDemoCtrl class ATL_NO_VTABLE CPBDemoCtrl : public CComObjectRootEx , public CComCoClass , public CComControl , public CStockPropImpl , public IProvideClassInfo2Impl<&CLSID_PBDemoCtrl, NULL, &LIBID_PROPBROWSERLib>, public IPersistStreamInitImpl , public IPersistStorageImpl , public IQuickActivateImpl , public IOleControlImpl , public IOleObjectImpl , public IOleInPlaceActiveObjectImpl , public IViewObjectExImpl , public IOleInPlaceObjectWindowlessImpl , public IDataObjectImpl , public ISpecifyPropertyPagesImpl , public IPropertyNotifySinkCP , public IPerPropertyBrowsingImpl , public IConnectionPointContainerImpl { public: CPBDemoCtrl() { m_bEnabled = TRUE; m_FillStyle = sSolid; m_clrTextColor = 0; m_nAppearance = 0; m_Number = 0; CComObject ::CreateInstance(&m_pFontNotifySink); if(m_pFontNotifySink) m_pFontNotifySink->AddRef(); } ~CPBDemoCtrl() { if(m_pFontNotifySink) m_pFontNotifySink->Release(); } DECLARE_REGISTRY_RESOURCEID(IDR_PBDEMOCTRL) BEGIN_COM_MAP(CPBDemoCtrl) COM_INTERFACE_ENTRY(IPBDemoCtrl) COM_INTERFACE_ENTRY(IDispatch) 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) COM_INTERFACE_ENTRY_IMPL(IPersistStorage) COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit) COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages) COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer) COM_INTERFACE_ENTRY_IMPL(IDataObject) COM_INTERFACE_ENTRY_IMPL(IPerPropertyBrowsing) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) END_COM_MAP() BEGIN_PROPERTY_MAP(CPBDemoCtrl) // Example entries // PROP_ENTRY("Property Description", dispid, clsid) // PROP_PAGE(CLSID_StockColorPage) PROP_PAGE(CLSID_DemoCtrlPage) PROP_ENTRY(_T("Text"),1,CLSID_DemoCtrlPage) PROP_ENTRY(_T("Number"),2,CLSID_DemoCtrlPage) PROP_ENTRY(_T("TextColor"),3,CLSID_DemoCtrlPage) PROP_ENTRY(_T("Font"),4,CLSID_DemoCtrlPage) PROP_ENTRY(_T("Picture"),5,CLSID_DemoCtrlPage) END_PROPERTY_MAP() BEGIN_CONNECTION_POINT_MAP(CPBDemoCtrl) CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink) END_CONNECTION_POINT_MAP() BEGIN_MSG_MAP(CPBDemoCtrl) MESSAGE_HANDLER(WM_PAINT, OnPaint) MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus) MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus) END_MSG_MAP() // IViewObjectEx STDMETHOD(GetViewStatus)(DWORD* pdwStatus) { ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n")); *pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE; return S_OK; } // IPBDemoCtrl public: BOOL m_bEnabled; STDMETHOD(get_Enabled)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(put_Enabled)(/*[in]*/ VARIANT_BOOL newVal); cDemoFillStyles m_FillStyle; STDMETHOD(get_FillStyle)(/*[out, retval]*/ cDemoFillStyles *pVal); STDMETHOD(put_FillStyle)(/*[in]*/ cDemoFillStyles newVal); short m_nAppearance; STDMETHOD(get_Appearance)(/*[out, retval]*/ short *pVal); STDMETHOD(put_Appearance)(/*[in]*/ short newVal); long m_Number; STDMETHOD(get_TextColor)(/*[out, retval]*/ OLE_COLOR *pVal); STDMETHOD(put_TextColor)(/*[in]*/ OLE_COLOR newVal); STDMETHOD(get_Number)(/*[out, retval]*/ long *pVal); STDMETHOD(put_Number)(/*[in]*/ long newVal); STDMETHOD(SetClientSite)(LPOLECLIENTSITE pSite); STDMETHOD(GetPredefinedStrings)(DISPID dispID, CALPOLESTR* pcaStringsOut, CADWORD* pcaCookiesOut); STDMETHOD(GetPredefinedValue)(DISPID dispID, DWORD dwCookie, VARIANT* pVarOut); STDMETHOD(GetDisplayString)(DISPID dispID, BSTR* pbstr); // just helper STDMETHOD(InitPredefinedStrings)(CALPOLESTR* pcaStringsOut, CADWORD* pcaCookiesOut, long numElems); HRESULT OnDraw(ATL_DRAWINFO& di); CComObject *m_pFontNotifySink; //holder for sink object OLE_COLOR m_clrTextColor; CComPtr m_pFont; CComPtr m_pPicture; CComBSTR m_bstrText; }; #endif //__PBDEMOCTRL_H_