在 Windows 应用程序中承载Windows 媒体播放器控件
[与此页面关联的功能(Windows 媒体播放器 SDK)是旧版功能。 它已被 MediaPlayer 取代。 MediaPlayer 已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用 MediaPlayer 而不是 Windows 媒体播放器 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
若要使用 Windows 媒体播放器 ActiveX 控件 (包括基于 Windows 的程序中的用户界面) ,必须提供 ActiveX 控件容器。 ATL 提供 CAxWindow 类来提供 ActiveX 主机窗口功能。
若要使用 CAxWindow 类承载Windows 媒体播放器控件,请执行以下步骤:
包含以下标头:
#include "wmp.h" #include <atlbase.h> #include <atlcom.h> #include <atlhost.h> #include <atlctl.h>
声明成员变量,如下所示:
CAxWindow m_wndView; // ActiveX host window class. CComPtr<IWMPPlayer> m_spWMPPlayer; // Smart pointer to IWMPPlayer interface.
创建应用程序窗口后,调用 AtlAxWinInit,这是使用 ATL ActiveX 主机窗口时所必需的。
AtlAxWinInit();
声明返回代码的局部变量,并包含指向主机窗口接口的指针:
CComPtr<IAxWinHostWindow> spHost; HRESULT hr;
创建主机窗口:
GetClientRect(&rcClient); m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
检索主机窗口接口指针:
hr = m_wndView.QueryHost(&spHost);
使用类 ID 在主机窗口中创建Windows 媒体播放器控件:
hr = spHost->CreateControl(CComBSTR(_T("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")), m_wndView, 0);
检索 IWMPPlayer 接口指针:
hr = m_wndView.QueryControl(&m_spWMPPlayer);
编写自己的代码时,请务必检查每个 HRESULT 返回代码以查找错误。
有关演示如何使用 CAxWindow 类托管 Windows 媒体播放器 ActiveX 控件的完整示例,请参阅 WMPHost 示例。
在 Windows CE 中托管 Windows 媒体播放器 10 Mobile 控件
在开发托管 Windows 媒体播放器 10 Mobile 控件的基于 Windows CE 的应用程序时,必须安装 Microsoft eMbedded Visual C++ 4.0 和 Pocket PC 2003 SDK 或智能手机 2003 SDK。 此外,与 ATL for Windows 不同,ATL for Windows CE 不支持单元线程模型。 因此,必须在 ATL 项目中找到单元线程的所有实例,并将它们更改为使用自由线程。
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将推出:在整个 2024 年,我们将逐步取消以“GitHub 问题”作为内容的反馈机制,并将其替换为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈