📄 propertydlg.cpp
字号:
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 + -