📄 statisticsdlg.cpp
字号:
{
m_szFilename = new TCHAR[_tcslen(pStats->szFilename) + 1];
if (NULL != m_szFilename)
{
_tcscpy(m_szFilename, pStats->szFilename);
}
}
m_bFNChanged = true;
}
Refresh();
return;
}
///////////////////////////////////////////////////////////////////////////////
// Name: CStatisticsDlg::Refresh()
// Desc: This function copies what is currently in member variables into the
// associated edit box on the dialog.
///////////////////////////////////////////////////////////////////////////////
void CStatisticsDlg::Refresh()
{
LONG cx;
TCHAR szText[REGKEY_SIZE];
TCHAR szBuf[20];
HDC hdc = NULL;
RECT rc;
int width;
int itemNumber = 2;
hdc = ::GetDC(m_hListView);
cx = m_iMaxWidth;
if (m_bFNChanged || -1 == m_iFNIndex)
{
if (-1 == m_iFNIndex)
{
ListView_DeleteAllItems(m_hListView);
InsertTwoItems(0);
m_iMaxWidth = 0;
m_iFNIndex = 0;
m_iFRIndex = -1;
m_iARIndex = -1;
m_iFDIndex = -1;
m_iBWIndex = -1;
m_iSPIndex = -1;
m_iRCIndex = -1;
m_iRPIndex = -1;
m_iLPIndex = -1;
m_iECIndex = -1;
m_iMIIndex = -1;
m_iADIndex = -1;
}
TCHAR * pszFilename = (m_szFilename ? m_szFilename : L"");
TCHAR * pszSlash = wcsrchr(pszFilename, L'\\');
RefreshItem(m_iFNIndex, L"Filename:", (pszSlash ? ++pszSlash : pszFilename), hdc, cx);
}
if (-1 == m_iFRIndex && m_bFRChanged && 0.0 != m_dFrameRate)
{
m_iFRIndex = itemNumber;
InsertTwoItems(m_iFRIndex);
if (-1 != m_iARIndex) m_iARIndex += 2;
if (-1 != m_iFDIndex) m_iFDIndex += 2;
if (-1 != m_iBWIndex) m_iBWIndex += 2;
if (-1 != m_iSPIndex) m_iSPIndex += 2;
if (-1 != m_iRCIndex) m_iRCIndex += 2;
if (-1 != m_iRPIndex) m_iRPIndex += 2;
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iECIndex) m_iECIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
if (-1 != m_iADIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iFRIndex)
{
itemNumber = m_iFRIndex + 2;
}
if (0.0 != m_dFrameRate && m_bFRChanged)
{
wsprintf(szBuf, TEXT("%.2f"), m_dFrameRate);
RefreshItem(m_iFRIndex, L"Desired Frame Rate:", szBuf, hdc, cx);
}
if (-1 == m_iARIndex && m_bARChanged && 0.0 != m_dActualRate)
{
m_iARIndex = itemNumber;
InsertTwoItems(m_iARIndex);
if (-1 != m_iFDIndex) m_iFDIndex += 2;
if (-1 != m_iBWIndex) m_iBWIndex += 2;
if (-1 != m_iSPIndex) m_iSPIndex += 2;
if (-1 != m_iRCIndex) m_iRCIndex += 2;
if (-1 != m_iRPIndex) m_iRPIndex += 2;
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iECIndex) m_iECIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
if (-1 != m_iADIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iARIndex)
{
itemNumber = m_iARIndex + 2;
}
if (0.0 != m_dActualRate && m_bARChanged)
{
wsprintf(szBuf, L"%.2f", m_dActualRate);
RefreshItem(m_iARIndex, L"Frame Rate:", szBuf, hdc, cx);
}
// 10/15/03 - meirab - adding audio glitches counts
if( -1 == m_iADIndex )
{
m_iADIndex = itemNumber;
InsertTwoItems(m_iADIndex);
if (-1 != m_iBWIndex) m_iBWIndex += 2;
if (-1 != m_iSPIndex) m_iSPIndex += 2;
if (-1 != m_iRCIndex) m_iRCIndex += 2;
if (-1 != m_iRPIndex) m_iRPIndex += 2;
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iECIndex) m_iECIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
itemNumber += 2;
wsprintf(szBuf, L"%ld", m_lDroppedAudioPackets);
RefreshItem( m_iADIndex, L"Audio Glitches", szBuf, hdc, cx);
}
if (-1 == m_iFDIndex && m_bFDChanged && 0 != m_lFramesDropped)
{
m_iFDIndex = itemNumber;
InsertTwoItems(m_iFDIndex);
if (-1 != m_iBWIndex) m_iBWIndex += 2;
if (-1 != m_iSPIndex) m_iSPIndex += 2;
if (-1 != m_iRCIndex) m_iRCIndex += 2;
if (-1 != m_iRPIndex) m_iRPIndex += 2;
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iECIndex) m_iECIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iFDIndex)
{
itemNumber = m_iFDIndex + 2;
}
if (0 != m_lFramesDropped && m_bFDChanged)
{
wsprintf(szBuf, L"%ld", m_lFramesDropped);
RefreshItem(m_iFDIndex, L"Frames Dropped:", szBuf, hdc, cx);
}
if (-1 == m_iBWIndex && m_bBWChanged && 0 != m_lBandwidth)
{
m_iBWIndex = itemNumber;
InsertTwoItems(m_iBWIndex);
if (-1 != m_iSPIndex) m_iSPIndex += 2;
if (-1 != m_iRCIndex) m_iRCIndex += 2;
if (-1 != m_iRPIndex) m_iRPIndex += 2;
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iECIndex) m_iECIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iBWIndex)
{
itemNumber = m_iBWIndex + 2;
}
if (0 != m_lBandwidth && m_bBWChanged)
{
wsprintf(szBuf, L"%ld", m_lBandwidth);
RefreshItem(m_iBWIndex, L"Bandwidth:", szBuf, hdc, cx);
}
szText[0] = L'\0';
switch (m_lSourceProtocol)
{
case nsMulticast:
LoadString( g_hInst, IDS_STREAM_MULTICAST_NO_CONNECTION, szText, REGKEY_SIZE );
break;
case nsMulticastPlus:
LoadString( g_hInst, IDS_STREAM_MULTICAST, szText, REGKEY_SIZE );
break;
case nsUDP:
LoadString( g_hInst, IDS_STREAM_UNICAST_UDP, szText, REGKEY_SIZE );
break;
case nsTCP:
LoadString( g_hInst, IDS_STREAM_UNICAST_TCP, szText, REGKEY_SIZE );
break;
case nsDistribution:
LoadString( g_hInst, IDS_STREAM_UNICAST_DISTRIBUTION, szText, REGKEY_SIZE );
break;
case nsHTTP:
LoadString( g_hInst, IDS_STREAM_UNICAST_HTTP, szText, REGKEY_SIZE );
break;
case nsFile:
LoadString( g_hInst, IDS_STREAM_NETWORKED_FILE, szText, REGKEY_SIZE );
break;
default:
wcscpy(szText, L"Local File");
break;
}
if (-1 == m_iSPIndex && m_bSPChanged && L'\0' != szText[0])
{
m_iSPIndex = itemNumber;
InsertTwoItems(m_iSPIndex);
if (-1 != m_iRCIndex) m_iRCIndex += 2;
if (-1 != m_iRPIndex) m_iRPIndex += 2;
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iECIndex) m_iECIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iSPIndex)
{
itemNumber = m_iSPIndex + 2;
}
if (L'\0' != szText[0] && m_bSPChanged)
{
RefreshItem(m_iSPIndex, L"Source Protocol:", szText, hdc, cx);
}
if (-1 == m_iECIndex && m_bECChanged && NULL != m_szErrorCorrection && L'\0' != m_szErrorCorrection[0])
{
m_iECIndex = itemNumber;
InsertTwoItems(m_iECIndex);
if (-1 != m_iRCIndex) m_iRCIndex += 2;
if (-1 != m_iRPIndex) m_iRPIndex += 2;
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iECIndex)
{
itemNumber = m_iECIndex + 2;
}
if (NULL != m_szErrorCorrection
&& L'\0' != m_szErrorCorrection[0])
{
RefreshItem(m_iECIndex, L"Error Correction:", m_szErrorCorrection, hdc, cx);
}
if (-1 == m_iRCIndex && (m_bRCChanged || m_bRPChanged || m_bLPChanged)
&& (0 != m_lReceivedPackets || 0 != m_lRecoveredPackets || 0 != m_lLostPackets))
{
m_iRCIndex = itemNumber;
InsertTwoItems(m_iRCIndex);
if (-1 != m_iRPIndex) m_iRPIndex += 2;
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iRCIndex)
{
itemNumber = m_iRCIndex + 2;
}
if (-1 == m_iRPIndex && (m_bRCChanged || m_bRPChanged || m_bLPChanged)
&& (0 != m_lReceivedPackets || 0 != m_lRecoveredPackets || 0 != m_lLostPackets))
{
m_iRPIndex = itemNumber;
InsertTwoItems(m_iRPIndex);
if (-1 != m_iLPIndex) m_iLPIndex += 2;
if (-1 != m_iMIIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iRPIndex)
{
itemNumber = m_iRPIndex + 2;
}
if (-1 == m_iLPIndex && (m_bRCChanged || m_bRPChanged || m_bLPChanged)
&& (0 != m_lReceivedPackets || 0 != m_lRecoveredPackets || 0 != m_lLostPackets))
{
m_iLPIndex = itemNumber;
InsertTwoItems(m_iLPIndex);
if (-1 != m_iMIIndex) m_iMIIndex += 2;
itemNumber += 2;
}
else if (-1 != m_iLPIndex)
{
itemNumber = m_iLPIndex + 2;
}
if ( (0 != m_lReceivedPackets
|| 0 != m_lRecoveredPackets
|| 0 != m_lLostPackets)
&& (m_bRCChanged || m_bRPChanged || m_bLPChanged))
{
wsprintf(szBuf, TEXT("%ld"), m_lReceivedPackets);
RefreshItem(m_iRCIndex, L"Received Packets:", szBuf, hdc, cx);
wsprintf(szBuf, TEXT("%ld"), m_lRecoveredPackets);
RefreshItem(m_iRPIndex, L"Recovered Packets:", szBuf, hdc, cx);
wsprintf(szBuf, TEXT("%ld"), m_lLostPackets);
RefreshItem(m_iLPIndex, L"Lost Packets:", szBuf, hdc, cx);
}
//
// Get memory information
//
MEMORYSTATUS memstat;
memstat.dwLength = sizeof (MEMORYSTATUS);
GlobalMemoryStatus(&memstat);
if (-1 == m_iMIIndex)
{
m_iMIIndex = ListView_GetItemCount(m_hListView);
InsertTwoItems(m_iMIIndex);
}
wsprintf(szText, L"%d%% Used (%d KB Available)", memstat.dwMemoryLoad, memstat.dwAvailPhys/1024);
RefreshItem(m_iMIIndex, L"Memory Usage", szText, hdc, cx);
m_bFRChanged = false;
m_bARChanged = false;
m_bFDChanged = false;
m_bBWChanged = false;
m_bSPChanged = false;
m_bRCChanged = false;
m_bRPChanged = false;
m_bLPChanged = false;
m_bECChanged = false;
m_bFNChanged = false;
if (hdc)
{
::ReleaseDC(m_hListView, hdc);
}
// clean up the list view
GetClientRect(m_hListView, &rc);
width = rc.right - rc.left;
if (cx < width)
{
cx = width;
}
ListView_SetColumnWidth(m_hListView, 0, cx);
return;
}
void CStatisticsDlg::RefreshItem(int iIndex,
TCHAR * pszTitle,
TCHAR * pszText,
HDC hdc,
LONG & cx)
{
LVITEM item;
SIZE size;
int itemNumber = 0;
item.mask = LVIF_TEXT;
item.iSubItem = 0;
item.state = 0;
item.stateMask = 0;
item.iItem = iIndex;
item.pszText = pszTitle;
if (-1 != ListView_SetItem(m_hListView, &item))
itemNumber++;
if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
&& size.cx > cx)
cx = size.cx;
item.iItem = iIndex + 1;
item.pszText = pszText;
if (-1 != ListView_SetItem(m_hListView, &item))
itemNumber++;
if (GetTextExtentExPoint(hdc, item.pszText, _tcslen(item.pszText), 0, NULL, NULL, &size)
&& size.cx > cx)
cx = size.cx;
if (cx > m_iMaxWidth)
m_iMaxWidth = cx;
}
void CStatisticsDlg::InsertTwoItems(int iIndex)
{
LVITEM item;
item.mask = LVIF_TEXT;
item.pszText = L"";
item.iSubItem = 0;
item.state = 0;
item.stateMask = 0;
item.iItem = iIndex;
ListView_InsertItem(m_hListView, &item);
ListView_InsertItem(m_hListView, &item);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -