293 lines
6.8 KiB
C++
293 lines
6.8 KiB
C++
//************************************************************
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1999
|
|
//
|
|
// FileName: wmp.h
|
|
//
|
|
// Description: Modified template for wmp pluging
|
|
//************************************************************
|
|
|
|
|
|
#ifndef _WMPPLUGINIMPL_H_
|
|
#define _WMPPLUGINIMPL_H_
|
|
|
|
|
|
#pragma once
|
|
|
|
//#include "wmputil.h"
|
|
#include "c:\wmp\private\wmp\dev\idl\plugin.h"
|
|
//#include "c:\wmp\private\wmp\dev\include\wmpcore.h"
|
|
//#include "color.h"
|
|
#include "c:\wmp\private\wmp\dev\include\dynarray.h"
|
|
#include "atlbase.h"
|
|
|
|
// Example usage:
|
|
// class CMyNodeActiveX :
|
|
// public IWMPUIPluginImpl<CMyNodeActiveX>
|
|
// {
|
|
// DECLARE_WMP_NODE( IWMPSpectrumAnalyzer )
|
|
// }
|
|
//
|
|
|
|
#define DECLARE_WMP_NODE( NODE ) \
|
|
CComPtr<NODE> m_spNode; \
|
|
STDMETHODIMP GetPrimaryIID( IID * pMainIID ) \
|
|
{ \
|
|
E_POINTER_RETURN( pMainIID ); \
|
|
*pMainIID = IID_##NODE; \
|
|
return S_OK; \
|
|
} \
|
|
STDMETHODIMP ConnectNode( IUnknown * pBaseNode ) \
|
|
{ \
|
|
E_POINTER_RETURN( pBaseNode ); \
|
|
HRESULT hr = pBaseNode->QueryInterface( IID_##NODE, reinterpret_cast<LPVOID *>(&m_spNode) ); \
|
|
if (SUCCEEDED(hr)) \
|
|
{ \
|
|
hr = OnConnectNode(); \
|
|
if (FAILED(hr)) \
|
|
{ \
|
|
DPF( 3, A, "OnConnectNode() Failed (%s)", #NODE ); \
|
|
m_spNode.Release(); \
|
|
} \
|
|
} \
|
|
else \
|
|
{ \
|
|
DPF( 3, A, "The node given to this ActiveX control failed a QI for: %s", #NODE ); \
|
|
} \
|
|
return hr; \
|
|
} \
|
|
STDMETHODIMP DisconnectNode() \
|
|
{ \
|
|
HRESULT hr = OnDisconnectNode(); \
|
|
if (FAILED(hr)) \
|
|
{ \
|
|
DPF( 3, A, "OnDisconnectNode() Failure: %s", #NODE ); \
|
|
} \
|
|
m_spNode.Release(); \
|
|
return hr; \
|
|
} \
|
|
|
|
|
|
|
|
//************************************************************
|
|
|
|
class ATL_NO_VTABLE IWMPUIPluginEventsImpl :
|
|
public IWMPUIPluginEvents
|
|
{
|
|
public:
|
|
|
|
#ifdef DEBUG
|
|
~IWMPUIPluginEventsImpl(){};
|
|
#endif
|
|
|
|
// IWMPUIPluginEvents
|
|
|
|
STDMETHOD(FireStateChange)( DISPID dispid ){return E_NOTIMPL;};
|
|
STDMETHOD(WMPAdvise)( IUnknown * pUnknown, DWORD * pdwCookie ){return E_NOTIMPL;};
|
|
STDMETHOD(WMPUnadvise)( DWORD dwCookie ){return E_NOTIMPL;};
|
|
|
|
// Helper functions for the derriving object
|
|
|
|
void DoNotify( int nType, DISPID dspidProperty, const VARIANT varParam );
|
|
void DoPropertyChange( DISPID dispid );
|
|
void DoStateChange( DISPID dispid, bool fEnabled );
|
|
void DoRegionChange();
|
|
|
|
protected:
|
|
|
|
|
|
DynamicArray<IWMPUIPluginNotify *> m_EventSites;
|
|
};
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
class ATL_NO_VTABLE IWMPUIPluginImpl :
|
|
public IWMPUIPlugin2
|
|
{
|
|
public:
|
|
|
|
IWMPUIPluginImpl();
|
|
|
|
STDMETHOD(OnConnectNode)();
|
|
STDMETHOD(OnDisconnectNode)();
|
|
STDMETHOD(SetTransparencyColor)( WCHAR * pwszColor );
|
|
STDMETHOD(GetTransparencyColor)( BSTR * pbstrColor );
|
|
|
|
// IWMPUIPlugin
|
|
|
|
STDMETHOD(SetCore)(IUnknown *pMediaPlayer);
|
|
STDMETHOD(GetPrimaryIID)(IID *pMainIID);
|
|
STDMETHOD(ConnectNode)(IUnknown *pBaseNode);
|
|
STDMETHOD(DisconnectNode)();
|
|
|
|
// IWMPUIPlugin2
|
|
|
|
STDMETHOD(CreateInstance)( BSTR bstrObjectType, IDispatch ** ppDispatch );
|
|
STDMETHOD(GetTransparencyColor)( OLE_COLOR * pColor );
|
|
|
|
protected:
|
|
|
|
//CComPtr<IWMPCore> m_spCore;
|
|
COLORREF m_crTransparent;
|
|
bool m_fTransparent;
|
|
};
|
|
|
|
|
|
|
|
//************************************************************
|
|
// IWMPUIPluginImpl
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
IWMPUIPluginImpl<T>::IWMPUIPluginImpl() :
|
|
m_crTransparent(0x00000000),
|
|
m_fTransparent(false)
|
|
{
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::OnConnectNode()
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::OnDisconnectNode()
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::SetTransparencyColor( WCHAR * pwszColor )
|
|
{
|
|
#if 1
|
|
return E_NOTIMPL;
|
|
#else
|
|
E_POINTER_RETURN( pwszColor );
|
|
|
|
bool fTransparent = m_fTransparent;
|
|
COLORREF crTransparent = m_crTransparent;
|
|
|
|
HRESULT hr = StringToColor( pwszColor, &m_crTransparent, &m_fTransparent );
|
|
DPF_HR( hr, L, "StringToColor" );
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
m_fTransparent = !m_fTransparent;
|
|
}
|
|
|
|
if (SUCCEEDED(hr) && ((fTransparent != m_fTransparent) || (crTransparent != m_crTransparent)))
|
|
{
|
|
T* pT = static_cast<T*>(this);
|
|
|
|
hr = pT->FireViewChange();
|
|
DPF_HR( hr, L, "pT->FireViewChange" );
|
|
}
|
|
return hr;
|
|
#endif
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::GetTransparencyColor( BSTR * pbstrColor )
|
|
{
|
|
#if 1
|
|
return E_NOTIMPL;
|
|
#else
|
|
WString wsz;
|
|
WCHAR * pwsz = wsz;
|
|
HRESULT hr = ColorToString( &pwsz, m_crTransparent, m_fTransparent );
|
|
DPF_HR( hr, L, "ColorToString" );
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
m_fTransparent = !m_fTransparent;
|
|
|
|
*pbstrColor = wsz.CopyToBSTR();
|
|
HRMEMCHECK( hr, *pbstrColor );
|
|
}
|
|
|
|
return hr;
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
//************************************************************
|
|
// IWMPUIPlugin
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::SetCore( IUnknown * pMediaPlayer )
|
|
{
|
|
#if 1
|
|
return E_NOTIMPL;
|
|
#else
|
|
m_spCore.Release();
|
|
if (pMediaPlayer)
|
|
{
|
|
return pMediaPlayer->QueryInterface( IID_IWMPCore, reinterpret_cast<LPVOID *>(&m_spCore) );
|
|
}
|
|
return S_OK;
|
|
#endif
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::GetPrimaryIID( IID * pMainIID )
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::ConnectNode( IUnknown * pBaseNode )
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::DisconnectNode()
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::CreateInstance( BSTR bstrObjectType, IDispatch ** ppDispatch )
|
|
{
|
|
// E_POINTER_RETURN( bstrObjectType );
|
|
// E_POINTER_RETURN( ppDispatch );
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
template <class T>
|
|
STDMETHODIMP IWMPUIPluginImpl<T>::GetTransparencyColor( OLE_COLOR * pColor )
|
|
{
|
|
|
|
*pColor = static_cast<OLE_COLOR>(m_crTransparent);
|
|
return S_OK;
|
|
}
|
|
|
|
//************************************************************
|
|
|
|
|
|
|
|
#endif // _WMPPLUGINIMPL_H_
|