描述:
在ATL控件中创建一个WMP控件,怎样获取这个WMP控件的事件,并将一些状态信息显示在开发的ATL控件界面上?
有人做过类似的控件的话给些提示,谢谢
解决方案1:
这是我开发的一个ie工具条中,截取IE程序中浏览器控件事件的方法,对你应该有所启发
HRESULT CBeeToolBar::Connect(void)
{
HRESULT hr;
// 为 WebBrowser 事件查找连接点
hr = m_spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &m_spCP);
if (FAILED(hr))
return hr;
// 将我们的事件处理器传递给容器。事件发生时容器将调用我们实现的
// IDispatch 接口函数
hr = m_spCP->Advise( reinterpret_cast<IDispatch*>(this), &m_dwCookie);
return hr;
}
HRESULT CBeeToolBar::Invoke(DISPID dispIdMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pvarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{
switch (dispIdMember) {
case DISPID_NEWWINDOW2 :
{
if(AntiPopWindow())
{
*(pDispParams->rgvarg[0].pboolVal) =true;
}else
{
// *(pDispParams->rgvarg[1].pdispVal)=this;
*(pDispParams->rgvarg[0].pboolVal) =false;
}
}
break;
case DISPID_ONQUIT :
if(m_spCP)
{
m_spCP->Unadvise(m_dwCookie);
m_spCP=NULL;
m_dwCookie=0;
};
break;
}
return NOERROR;
}
现在能获取静态的控件事件,怎么处理在ATL下动态创建的WMP控件的EVENT呢?
--------
ConnectionPoint
从sohu网页上看到的。
unction play() {
try {
if( !isItself ) {
playorpause.innerHTML = pausebtnstr;
wmplayer.style.display = "block";
vmask.style.display = "none";
if( isAfterPause ) {
wmplayer.play();
} else {
wmplayer.FileName = playurl;
setPosition( 0 );
wmplayer.play();
}
isAfterPause = false;
isPlaying = true;
isItself = true;
setVolume( volumeNum );
openTime();
}
} catch( e ) {
setTimeout( "play()", 1000 );
}
return false;
}
--------------
wmp player?
除了自己写控件,用wmp控件外,也可以用flash播放。