WMP.DLL生成的CWMPPlayer4类的事件关联问题

飘云 2011-07-11 04:46:10
工程是VS2008 MFC工程。
CWMPPlayer4类由VS2008从wmp.dll生成。里面有些自动函数:
void close();
CString get_URL();
void put_URL(LPCTSTR newValue);
long get_openState();
等。现在由下例代码:
CRect rect;
GetClientRect(rect);
//rect.right = rect.left + 300;
rect.bottom -= 45;
HCURSOR hCursor = ::LoadCursor(NULL, IDC_ARROW);
if ( m_video == NULL )
{
m_video = new CWMPPlayer4;
m_video->Create(AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_PARENTDC, hCursor), NULL, WS_VISIBLE|WS_CHILD, rect, this, 0);
m_video->put_enableContextMenu(false);
m_video->put_enabled(false);
m_video->put_uiMode(_T("none")); //该句去掉下面的状态条
CWMPSettings wmpSettings(m_video->get_settings());
wmpSettings.put_autoStart(true);
wmpSettings.put_playCount(1000);
m_video->put_URL(m_strVideo);
}

成功生成了一个WMP播放对象。但是现在我需要获取它的播放状态,比如加载视频文件是否失败,播放是否停止等。当它的播放状态发生改变时,需要进行处理。现在CWMPPlayer4中的成员函数long get_openState() 和 long get_playState()是获取这些状态的,但是现在我需要的是通过事件处理来自动通知函数处理。
MFC可以通过下面形式注册事件:
ON_BN_CLICKED(IDOK, &CMediaPlayerDlg::OnBnClickedOk)
ON_EN_CHANGE(IDC_INPUT, &CPhonePad::OnEnChangeText)
不知道WMP的事件通过什么来注册。
CWMPOCXEvents里面有所有事件函数,不知道怎么和我的MFC工程关联起来,求高手指导。
...全文
347 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoXiaoRab 2011-07-11
  • 打赏
  • 举报
回复
可以接分不
飘云 2011-07-11
  • 打赏
  • 举报
回复
终于找到解决方案了,呵呵。
在对话框里添加下面代码:

BEGIN_EVENTSINK_MAP(CMediaPlayerDlg, CDialog)
ON_EVENT(CMediaPlayerDlg, ID_VIDEO, 5821, CMediaPlayerDlg::MediaErrorOcx1, VTS_DISPATCH)
ON_EVENT(CMediaPlayerDlg, ID_VIDEO, 5101, CMediaPlayerDlg::PlayStateChangeOcx1, VTS_I4)
ON_EVENT(CMediaPlayerDlg, ID_VIDEO, 5002, CMediaPlayerDlg::StatusChangeOcx1, VTS_NONE)
ON_EVENT(CMediaPlayerDlg, ID_VIDEO, 5501, CMediaPlayerDlg::ErrorOcx1, VTS_NONE)
ON_EVENT(CMediaPlayerDlg, ID_VIDEO, 6505, CMediaPlayerDlg::ClickOcx1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
ON_EVENT(CMediaPlayerDlg, ID_VIDEO, 5001, CMediaPlayerDlg::OpenStateChangeOcx1, VTS_I4)
ON_EVENT(CMediaPlayerDlg, ID_VIDEO, 6514, CMediaPlayerDlg::DeviceDisconnectOcx1, VTS_UNKNOWN)
ON_EVENT(CMediaPlayerDlg, ID_VIDEO, 5601, CMediaPlayerDlg::WarningOcx1, VTS_I4 VTS_I4 VTS_BSTR)
END_EVENTSINK_MAP()

比如播放状态改变,在CWMPOCXEvents里可以查到:

void PlayStateChange(long NewState)
{
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0x13ed, DISPATCH_METHOD, VT_EMPTY, NULL, parms, NewState);
}

其中0x13ed就是十进制的5101了。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧