⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propertydlg.cpp

📁 media player 控件源码 用EVC编译可以进行对WINCE下media player控制
💻 CPP
📖 第 1 页 / 共 4 页
字号:

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;

        item.iItem = itemNumber;
        item.pszText = durationText;
        if( ListView_InsertItem( m_hListView, &item ) != -1 )
            itemNumber++;

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;
    }

    // Fill in our audio-specific information
    AUDIOINFO audioInfo;
	memset( &audioInfo, 0, sizeof( AUDIOINFO ) );
    if( SUCCEEDED( AudioInfo( &audioInfo, piba, pnsep, psmc ) ) )
    {
        // Codec description
        if( audioInfo.bstrCodecDescription && *audioInfo.bstrCodecDescription )
        {
            item.iItem = itemNumber;
            item.pszText = L"Audio Codec:";
            if( ListView_InsertItem( m_hListView, &item ) != -1 )
                itemNumber++;

            if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
                && size.cx > cx)
                cx = size.cx;

            item.iItem = itemNumber;
            item.pszText = audioInfo.bstrCodecDescription;
            if( ListView_InsertItem( m_hListView, &item ) != -1 )
                itemNumber++;

            if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
                && size.cx > cx)
                cx = size.cx;

            SysFreeString(audioInfo.bstrCodecDescription);
        }

        // audio bitrate
        if( audioInfo.lpwcCodecBitrate && *audioInfo.lpwcCodecBitrate )
        {
            item.iItem = itemNumber;
            item.pszText = L"Audio Bitrate:";
            if( ListView_InsertItem( m_hListView, &item ) != -1 )
                itemNumber++;

            if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
                && size.cx > cx)
                cx = size.cx;

            item.iItem = itemNumber;
            item.pszText = audioInfo.lpwcCodecBitrate;
            if( ListView_InsertItem( m_hListView, &item ) != -1 )
                itemNumber++;

            if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
                && size.cx > cx)
                cx = size.cx;

            delete [] audioInfo.lpwcCodecBitrate;
        }

        // What's the frequency, Kenneth?
        WCHAR frequency[8];
        if( audioInfo.wfmtWaveFormat.nSamplesPerSec )
        {
            wsprintf( frequency, L"%2.1fKHz", (float)(audioInfo.wfmtWaveFormat.nSamplesPerSec) / 1000.0 );

            item.iItem = itemNumber;
            item.pszText = L"Audio Frequency:";
            if( ListView_InsertItem( m_hListView, &item ) != -1 )
                itemNumber++;

            if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
                && size.cx > cx)
                cx = size.cx;

            item.iItem = itemNumber;
            item.pszText = frequency;
            if( ListView_InsertItem( m_hListView, &item ) != -1 )
                itemNumber++;

            if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
                && size.cx > cx)
                cx = size.cx;
        }

        // stereo or mono sound?
        WCHAR stereo[4];
        if( audioInfo.wfmtWaveFormat.nChannels )
        {
            wcscpy( stereo, audioInfo.wfmtWaveFormat.nChannels > 1 ? L"Yes" : L"No" );

            item.iItem = itemNumber;
            item.pszText = L"Stereo:";
            if( ListView_InsertItem( m_hListView, &item ) != -1 )
                itemNumber++;

            if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
                && size.cx > cx)
                cx = size.cx;

            item.iItem = itemNumber;
            item.pszText = stereo;
            if( ListView_InsertItem( m_hListView, &item ) != -1 )
                itemNumber++;

            if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
                && size.cx > cx)
                cx = size.cx;
        }
    }

    // Fill in our video-codec information
    BSTR videoCodec = NULL;
    if( SUCCEEDED( VideoInfo( &videoCodec, pnsep ) ) )
    {
        item.iItem = itemNumber;
        item.pszText = L"Video Codec:";
        if( ListView_InsertItem( m_hListView, &item ) != -1 )
            itemNumber++;

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;

        item.iItem = itemNumber;
        item.pszText = videoCodec;
        if( ListView_InsertItem( m_hListView, &item ) != -1 )
            itemNumber++;

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;

        SysFreeString(videoCodec);
    }

    // Fill in our video resolution
    long lWidth, lHeight;
    WCHAR resolution[10] = L"";
    if( SUCCEEDED( g_pPlayerWindow->m_pMP->get_ImageSourceWidth( &lWidth ) ) &&
        SUCCEEDED( g_pPlayerWindow->m_pMP->get_ImageSourceHeight( &lHeight ) ) &&
        lWidth && lHeight )
    {
        wsprintf( resolution, L"%d x %d", lWidth, lHeight );

        item.iItem = itemNumber;
        item.pszText = L"Video Size:";
        if( ListView_InsertItem( m_hListView, &item ) != -1 )
            itemNumber++;

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;

        item.iItem = itemNumber;
        item.pszText = resolution;
        if( ListView_InsertItem( m_hListView, &item ) != -1 )
            itemNumber++;

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;
    }

    // Fill in our "protected" information
    item.iItem = itemNumber;
    item.pszText = L"Protected:";
    if( ListView_InsertItem( m_hListView, &item ) != -1 )
        itemNumber++;

    if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
        && size.cx > cx)
        cx = size.cx;

    item.iItem = itemNumber;
    item.pszText = audioInfo.bSecure ? L"Yes" : L"No";
    if( ListView_InsertItem( m_hListView, &item ) != -1 )
        itemNumber++;

    if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
        && size.cx > cx)
        cx = size.cx;

    // Tidy up the ListView...
    if (hdc)
    {
        ::ReleaseDC(m_hListView, hdc);
    }

    // First, check if our ListView is too tall...
    RECT rc;
    LONG width;

    GetClientRect(m_hListView, &rc);

    width = rc.right - rc.left;

    if (ListView_GetCountPerPage(m_hListView) < ListView_GetItemCount(m_hListView))
    {
        width -= GetSystemMetrics(SM_CXVSCROLL);
    }

    if (cx < width)
    {
        cx = width;
    }

    ListView_SetColumnWidth(m_hListView, 0, cx);

    SendMessage(m_hListView, WM_SETREDRAW, TRUE, 0);

    InvalidateRect(m_hListView, NULL, TRUE);

    if (NULL != piba)
    {
        piba->Release();
        piba = NULL;
    }

    if (NULL != pnsep)
    {
        pnsep->Release();
        pnsep = NULL;
    }

    if (NULL != psmc)
    {
        psmc->Release();
        psmc = NULL;
    }
}

void CPropertyDlg::UpdateAndRender(TCHAR * szFilename)
{
    IGraphBuilder   * pGraphBuilder = NULL;
    IAMMediaContent * pMediaContent = NULL;
    IEnumFilters    * pEnum         = NULL;
    IBaseFilter     * pFilter       = NULL;
    IBasicAudio           * piba    = NULL;
    IBasicVideo           * pibv    = NULL;
    IAMNetShowExProps     * pnsep   = NULL;
    IAMSecureMediaContent * psmc    = NULL;
    IMediaSeeking         * pims    = NULL;
    BSTR              property      = L"";
    int               itemNumber    = 0;
    LVITEM            item;
    HRESULT           hr            = S_OK;

    SIZE size;
    LONG cx = 0;
    HDC  hdc;

    hdc = ::GetDC(m_hListView);

    item.mask      = LVIF_TEXT;
    item.iSubItem  = 0;
    item.state     = 0;
    item.stateMask = 0;

    ListView_DeleteAllItems(m_hListView);

    //
    // Render file
    //

    HCURSOR hPrevCursor;

    // Display an hour glass while rendering the file
    hPrevCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));

    hr = CoCreateInstance(CLSID_FilterGraph,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_IGraphBuilder,
                          (void**)&pGraphBuilder);

    if (SUCCEEDED(hr))
    {
        hr = pGraphBuilder->RenderFile(szFilename, NULL);
    }

    //
    // Get IAMMediaContent interface
    //

    if (SUCCEEDED(hr))
    {
         hr = pGraphBuilder->EnumFilters(&pEnum);
    }

    if (NULL != pEnum)
    {
        hr = E_NOINTERFACE;

        while ( ( NULL == pMediaContent
                  || NULL == piba
                  || NULL == pnsep
                  || NULL == psmc )
               && S_OK == pEnum->Next(1, &pFilter, NULL))
        {
            if (NULL == pMediaContent)
                pFilter->QueryInterface(IID_IAMMediaContent,       (void**)&pMediaContent);
            if (NULL == piba)
                pFilter->QueryInterface(IID_IBasicAudio,           (void**)&piba);
            if (NULL == pibv)
                pFilter->QueryInterface(IID_IBasicVideo,           (void**)&pibv);
            if (NULL == pnsep)
                pFilter->QueryInterface(IID_IAMNetShowExProps,     (void**)&pnsep);
            if (NULL == psmc)
                pFilter->QueryInterface(IID_IAMSecureMediaContent, (void**)&psmc);
            if (NULL == pims)
                pFilter->QueryInterface(IID_IMediaSeeking,         (void**)&pims);

            pFilter->Release();
            pFilter = NULL;
        }

        pEnum->Release();
        pEnum = NULL;
    }

    // Restore the old cursor
    SetCursor(hPrevCursor);
 
    //
    // Display info
    //

    // Clip Title
    if (pMediaContent)
    {
        pMediaContent->get_Title(&property);
    }

    if (*property)
    {
        item.iItem   = itemNumber;
        item.pszText = L"Clip Title:";
        if (ListView_InsertItem(m_hListView, &item) != -1)
            itemNumber++;

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;

        item.iItem   = itemNumber;
        item.pszText = property;
        if (ListView_InsertItem(m_hListView, &item) != -1)
            itemNumber++;

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;

        SysFreeString(property);
    }
 
    // Clip Author
    if (pMediaContent)
    {
        property = L"";
        pMediaContent->get_AuthorName(&property);
    }

    if (*property)
    {
        item.iItem   = itemNumber;
        item.pszText = L"Clip Artist:";
        if (ListView_InsertItem(m_hListView, &item) != -1)
            itemNumber++;

        if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
            && size.cx > cx)
            cx = size.cx;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -