//------------------------------------------------------------------------------ // File: CompositeControl.h // // Desc: Declaration of the CCompositeControl // for the Windows XP MSVidCtl C++ sample // // Copyright (c) 2001 Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ #ifndef __COMPOSITECONTROL_H_ #define __COMPOSITECONTROL_H_ #include "resource.h" // main symbols #include #include #pragma warning(disable:4100) /* Disable 'unused parameter' warning */ #define SAFE_RELEASE(x) { if (x) { (x)->Release(); x=NULL; }} ///////////////////////////////////////////////////////////////////////////// // CCompositeControl class ATL_NO_VTABLE CCompositeControl : public CComObjectRootEx, public IDispatchImpl, public CComCompositeControl, public IPersistStreamInitImpl, public IOleControlImpl, public IOleObjectImpl, public IOleInPlaceActiveObjectImpl, public IViewObjectExImpl, public IOleInPlaceObjectWindowlessImpl, public IPersistStorageImpl, public ISpecifyPropertyPagesImpl, public IQuickActivateImpl, public IDataObjectImpl, public IProvideClassInfo2Impl<&CLSID_CompositeControl, NULL, &LIBID_CPPVIDEOCONTROLLib>, public CComCoClass { public: CCompositeControl() { m_bWindowOnly = TRUE; CalcExtent(m_sizeExtent); // Initialize internal data m_pTuningSpaceContainer = NULL; m_pATSCTuningSpace = NULL; m_pATSCLocator = NULL; m_pMSVidCtl = NULL; m_hwndChannelID = NULL; } DECLARE_REGISTRY_RESOURCEID(IDR_COMPOSITECONTROL) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CCompositeControl) COM_INTERFACE_ENTRY(ICompositeControl) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IViewObjectEx) COM_INTERFACE_ENTRY(IViewObject2) COM_INTERFACE_ENTRY(IViewObject) COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceObject) COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceActiveObject) COM_INTERFACE_ENTRY(IOleControl) COM_INTERFACE_ENTRY(IOleObject) COM_INTERFACE_ENTRY(IPersistStreamInit) COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit) COM_INTERFACE_ENTRY(ISpecifyPropertyPages) COM_INTERFACE_ENTRY(IQuickActivate) COM_INTERFACE_ENTRY(IPersistStorage) COM_INTERFACE_ENTRY(IDataObject) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) END_COM_MAP() BEGIN_PROP_MAP(CCompositeControl) PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4) PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4) END_PROP_MAP() BEGIN_MSG_MAP(CCompositeControl) CHAIN_MSG_MAP(CComCompositeControl) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_HANDLER(IDC_CHANNELDOWN, BN_CLICKED, OnClickedChanneldown) COMMAND_HANDLER(IDC_CHANNELUP, BN_CLICKED, OnClickedChannelup) COMMAND_ID_HANDLER(WM_CLOSE, OnExit) MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand) END_MSG_MAP() // Handler prototypes: LRESULT OnExit(WORD /*wNotifyCode*/, WORD /* wID */, HWND /*hWndCtl*/, BOOL& /*bHandled*/); LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); // LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); // LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); // LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); BEGIN_SINK_MAP(CCompositeControl) //Make sure the Event Handlers have __stdcall calling convention END_SINK_MAP() STDMETHOD(OnAmbientPropertyChange)(DISPID dispid) { if (dispid == DISPID_AMBIENT_BACKCOLOR) { SetBackgroundColorFromAmbient(); FireViewChange(); } return IOleControlImpl::OnAmbientPropertyChange(dispid); } // IViewObjectEx DECLARE_VIEW_STATUS(0) // ICompositeControl public: enum { IDD = IDD_COMPOSITECONTROL }; IMSVidCtl * m_pMSVidCtl; ITuningSpaceContainer * m_pTuningSpaceContainer; IATSCTuningSpace * m_pATSCTuningSpace; IATSCLocator * m_pATSCLocator; HWND m_hwndChannelID; LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnClickedChannelup(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnClickedChanneldown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); HRESULT SetChannel(long lChannel); void ShowChannelNumber(long lChannel); }; #endif //__COMPOSITECONTROL_H_