📄 montunit.cpp
字号:
// MontUnit.cpp: implementation of the CMontUnit class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "MonClient.h"
#include "MontUnit.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMontUnit::CMontUnit()
{
m_iMontID=0;
for(int i=0;i<4;i++)
m_IPArr[i]=0;
m_iPort=0;
m_pShowPicWnd = NULL;
m_pShowAddrWnd = NULL;
m_pShowRateWnd = NULL;
m_pShowPicDC = NULL;
m_fFrameRate = 0;
for(i=0;i<FRAMERATE_RANGE;i++)
m_iFrameNumArr[i] = 0;
m_iFrameSecond = 0;
m_iFrameNumInLastSecond = 0;
m_pPic = NULL;
}
CMontUnit::~CMontUnit()
{
if(m_pShowPicDC)
{
m_pShowPicWnd->ReleaseDC(m_pShowPicDC);
m_pShowPicDC = NULL;
}
if(m_pPic)
{
delete m_pPic;
m_pPic = NULL;
}
CTitleFile::releaseInstance();
}
//初始化显示单元
void CMontUnit::InitUnit(UINT nID,CWnd* pPicWnd,CWnd* pAddrWnd,CWnd* pRateWnd)
{
int i,j;
m_iMontID = nID;
m_pShowPicWnd = pPicWnd;
m_pShowAddrWnd = pAddrWnd;
m_pShowRateWnd = pRateWnd;
//初始化JPG显示对象
m_pPic = new CPicture();
//从配置文件中初始化IP地址信息
CString strKey,strIP,strPort;
strKey.Format("终端%d",m_iMontID);
CTitleFile::getInstance()->InitFile("init.txt");
CTitleFile::getInstance()->GetValue(strKey,INITFILE_IPNAME,strIP);
CTitleFile::getInstance()->GetValue(strKey,INITFILE_PORTNAME,strPort);
if(strIP.IsEmpty() || strPort.IsEmpty())
goto RET;
//把字符串IP/PORT转换到IP/PORT变量中
int iPosArr[5] ;
iPosArr[0]=-1;
iPosArr[4] = strIP.GetLength();
j=0;
for(i=0;i<strIP.GetLength();i++)
{
if(strIP[i]=='.')
{
iPosArr[j+1]=i;
j++;
}
}
for(i=0;i<4;i++)
{
CString strtt = strIP.Mid(iPosArr[i]+1,iPosArr[i+1]-iPosArr[i]-1);
m_IPArr[i] = atoi(strtt.GetBuffer(1));
strtt.ReleaseBuffer(-1);
}
m_iPort = atoi(strPort.GetBuffer(1));
strPort.ReleaseBuffer(-1);
RET:
SetAddrData(m_IPArr,m_iPort);
}
//接收并显示IP地址
void CMontUnit::SetAddrData(BYTE* pIPArr,UINT iport)
{
if(pIPArr)
{
for(int i=0;i<4;i++)
m_IPArr[i]=*(pIPArr+i);
}
m_iPort = iport;
//把地址写入到配置文件中
CString strKey,strIP,strPort;
strKey.Format("终端%d",m_iMontID);
strIP.Format("%d.%d.%d.%d",m_IPArr[0],m_IPArr[1],m_IPArr[2],m_IPArr[3]);
strPort.Format("%d",m_iPort);
CTitleFile::getInstance()->InitFile("init.txt");
CTitleFile::getInstance()->SetValue(strKey,INITFILE_IPNAME,strIP);
CTitleFile::getInstance()->SetValue(strKey,INITFILE_PORTNAME,strPort);
//显示地址
if(m_pShowAddrWnd)
{
CString str;
str.Format("终端地址:%d.%d.%d.%d:%d",m_IPArr[0],
m_IPArr[1],m_IPArr[2],m_IPArr[3],m_iPort);
m_pShowAddrWnd->SetWindowText(str);
}
}
//获得IP地址
void CMontUnit::GetAddrData(BYTE* pIPArr,UINT& iport)
{
if(pIPArr)
{
for(int i=0;i<4;i++)
*(pIPArr+i)=m_IPArr[i];
}
iport = m_iPort;
}
//显示帧速率(该函数每1秒调用一次)
void CMontUnit::ShowFrameRate()
{
//更新显示帧速率
for(int i=FRAMERATE_RANGE-1;i>=1;i--)
m_iFrameNumArr[i] = m_iFrameNumArr[i-1];
m_iFrameNumArr[0] = m_iFrameNumInLastSecond;
int iSum = 0;
for(i=0;i<FRAMERATE_RANGE;i++)
{
iSum += m_iFrameNumArr[i];
}
m_fFrameRate = (float)iSum / FRAMERATE_RANGE;
//显示帧速率
if(m_pShowRateWnd)
{
CString str;
str.Format("编码帧率:%d帧/秒",m_iFrameNumInLastSecond);
m_pShowRateWnd->SetWindowText(str);
}
m_iFrameNumInLastSecond = 0;
}
//接收JPG数据并显示
void CMontUnit::RcvPicData(BYTE* pBuf,int ilen)
{
//增加帧速率计数器
m_iFrameNumInLastSecond++;
//显示图像
if(m_pShowPicWnd)
{
//得到画图的DC
if(m_pShowPicDC==NULL)
m_pShowPicDC = m_pShowPicWnd->GetDC();
//画图
if(m_pShowPicDC)
{
CRect rect;
m_pShowPicWnd->GetWindowRect(&rect);
m_pShowPicWnd->ScreenToClient(&rect);
m_pPic->LoadPictureData(pBuf,ilen);
m_pPic->Render(m_pShowPicDC,rect);
m_pPic->UnloadPicture();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -