簡體   English   中英

在Mfc中嵌入Window Media Player

[英]Embedding Window Media Player in mfc

我在基於對話框的mfc應用程序中嵌入了窗口媒體播放器activex控件。 現在,所有播放/暫停按鈕都被禁用。 我要啟用它們。

正如我所說的put_uiMode(_T("mini")); 在寫這些行時

hr = m_spWMPPlayer->put_fullScreen(VARIANT_TRUE)
 hr = m_spWMPPlayer->get_fullScreen(&b); // returned b = VARIANT_FALSE

b的值即將變為FALSE。

可能是什么錯誤? 有人知道嗎?

謝謝

BOOL CLuminPlayerDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    CComPtr<IWMPPlayer>         m_spWMPPlayer;
    CComPtr<IWMPRemoteMediaServices> m_spServices;
    CComPtr<IWMPControls>           m_spControls;

    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon

    // TODO: Add extra initialization here
    HRESULT hr = NULL;
    if(SUCCEEDED(hr))
    {
        hr = CoCreateInstance(__uuidof(WindowsMediaPlayer), 0, CLSCTX_INPROC_SERVER, IID_IOleObject, (void**)&m_spServices);

        if(SUCCEEDED(hr))
        {
            BSTR str = NULL;

            VARIANT_BOOL b ;
            hr = m_spServices->QueryInterface(__uuidof(IWMPPlayer), (void**)&m_spWMPPlayer);
            if(SUCCEEDED(hr))
            {

                hr = m_spWMPPlayer->get_enabled(&b); // returned b= VARIANT_TRUE
                hr = m_spWMPPlayer->get_enableContextMenu(&b); //returned b = VARIANT_TRUE
                hr = m_spWMPPlayer->get_uiMode(&str); // returned str = L"full"
                hr = m_spWMPPlayer->put_uiMode(_T("mini")); //hr = S_OK
                hr = m_spWMPPlayer->get_uiMode(&str); // str = L"mini"
                hr = m_spWMPPlayer->put_fullScreen(VARIANT_TRUE); 
                hr = m_spWMPPlayer->get_fullScreen(&b); // returned b = VARIANT_FALSE
                hr = m_spWMPPlayer->put_URL(_T("C:\\Visual Studio 2012\\Projects\\Lumin-Player\\Debug\\abc.mp4")); //returned hr = S_OK

                hr = m_spServices->QueryInterface(__uuidof(IWMPControls), (void**)&m_spControls); // returned hr = S_OK
                if(SUCCEEDED(hr))
                {
                    hr = m_spControls->play(); //returned hr = S_OK
                }
            }
        }
    }

    return TRUE;  // return TRUE  unless you set the focus to a control
}

MSDN說

為了在嵌入Windows Media Player控件時使全屏模式正常工作,視頻顯示區域的高度和寬度必須至少為一個像素。 如果在IWMPPlayer :: put_uiMode中指定的BSTR設置為“ mini”或“ full”,則控件本身的高度必須為65像素或更大,以容納除用戶界面之外的視頻顯示區域。

這假定播放器已經正確初始化為ActiveX控件。 在您的代碼中,您只需創建一個COM對象,而無需進行任何ActiveX控件初始化。 大概是播放器檢測到此錯誤並報告錯誤。

”在各個put_fullScreen調用中,您的hr put_fullScreen應為0xC00D0FD2 NS_E_WMPOCX_NO_ACTIVE_CORE “所請求的方法或屬性不可用,因為Windows Media Player ActiveX控件未正確激活。” 指出問題所在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM