在 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 媒体播放器控件,请执行以下步骤:

  1. 包含以下标头:

    #include "wmp.h"
    #include <atlbase.h>
    #include <atlcom.h>
    #include <atlhost.h>
    #include <atlctl.h>
    
  2. 声明成员变量,如下所示:

    CAxWindow  m_wndView;  // ActiveX host window class.
    CComPtr<IWMPPlayer>  m_spWMPPlayer;  // Smart pointer to IWMPPlayer interface.
    
    
  3. 创建应用程序窗口后,调用 AtlAxWinInit,这是使用 ATL ActiveX 主机窗口时所必需的。

    AtlAxWinInit();
    
    
  4. 声明返回代码的局部变量,并包含指向主机窗口接口的指针:

    CComPtr<IAxWinHostWindow>  spHost;
    HRESULT  hr;
    
    
  5. 创建主机窗口:

    GetClientRect(&rcClient);
    m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
    
    
  6. 检索主机窗口接口指针:

    hr = m_wndView.QueryHost(&spHost);
    
    
  7. 使用类 ID 在主机窗口中创建Windows 媒体播放器控件:

    hr = spHost->CreateControl(CComBSTR(_T("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")), m_wndView, 0);
    
    
  8. 检索 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 项目中找到单元线程的所有实例,并将它们更改为使用自由线程。

示例

在 C++ 程序中使用 Windows 媒体播放器 控件