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

📄 gtmpegwnd.cpp

📁 一个完整的数字硬盘录像机系统软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  else
  {
    CFile AlarmFile;
    if(AlarmFile.Open(sAlarmFile,CFile::modeRead))
	{
	    CArchive ar(&AlarmFile,CArchive::load);
        m_lstAlarmChunnel.Serialize(ar);
		ar.Close();
        AlarmFile.Close();
	}
  }
  for(int i=0;i<8;i++)
	  m_nAlarmOffLine[i]=0;
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
void CGtMpegWnd::AdjustMpegWindow(int nChannel)
{
	m_DisplaySize.cx=(m_rMpegRect.Width()-2*20-(m_nPicNumX-1)*3)/m_nPicNumX;
    m_DisplaySize.cy=(m_rMpegRect.Height()-2*20-m_nPicNumY*_SHOW_WIDTH)/m_nPicNumY;
	if(m_DisplaySize.cx>768)
         m_DisplaySize.cx=760;
	if(m_DisplaySize.cy>576)
         m_DisplaySize.cy=576;
	if(AfxGetApp()->GetProfileInt("系统参数","采集方式",0)==1)
	{
	   if(m_nPicNumX==1&&m_nPicNumY==1)
	   {
	     m_DisplaySize.cy=576/2;
		 m_DisplaySize.cx=m_DisplaySize.cx/2;
	   }
	}
    //
	CRect rPicRect,rTempRect;
	int nStartX=m_rMpegRect.left+20,nStartY=m_rMpegRect.top+20;
	int nSort=0;
	for(int k=0;k<9;k++)
	{
	     GetDlgItem(IDC_VIDEO_POS+k)->ShowWindow(SW_HIDE);
	     GetDlgItem(IDC_CHANNEL_SHOW0+k)->ShowWindow(SW_HIDE);
	}
	if(nChannel==-1)
	{
		for(int i=0;i<m_nPicNumX;i++)
		{
		   for(int j=0;j<m_nPicNumY;j++)
		   {
			   GetDlgItem(IDC_VIDEO_POS+nSort)->GetWindowRect(rPicRect);
			   ScreenToClient(rPicRect);
			   rPicRect.left=nStartX;
			   rPicRect.top=nStartY;
			   rPicRect.right=rPicRect.left+m_DisplaySize.cx;
			   rPicRect.bottom=rPicRect.top+m_DisplaySize.cy;
			   ClientToScreen(rPicRect);
			   GetDlgItem(IDC_VIDEO_POS+nSort)->MoveWindow(rPicRect);
			   GetDlgItem(IDC_VIDEO_POS+nSort)->Invalidate();
			   int nPosX=rPicRect.left;
			   int nPosY=rPicRect.bottom;
			   int nWidth=rPicRect.Width();
			   GetDlgItem(IDC_CHANNEL_SHOW0+nSort)->GetWindowRect(rTempRect);
			   ScreenToClient(rTempRect);
			   rTempRect.left=nPosX;
			   rTempRect.top=nPosY;
			   rTempRect.right=rTempRect.left+nWidth;
			   rTempRect.bottom=rTempRect.top+_SHOW_WIDTH;
			   GetDlgItem(IDC_CHANNEL_SHOW0+nSort)->MoveWindow(rTempRect);
			   GetDlgItem(IDC_VIDEO_POS+nSort)->ShowWindow(SW_SHOW);
			   if(nSort>=theApp.m_nChannels)
				   GetDlgItem(IDC_CHANNEL_SHOW0+nSort)->ShowWindow(SW_HIDE);
			   else
				   GetDlgItem(IDC_CHANNEL_SHOW0+nSort)->ShowWindow(SW_SHOW);
			   nStartX+=m_DisplaySize.cx+3;  
			   nSort++;
		   }
		   nStartX=m_rMpegRect.left+20;
		   nStartY+=m_DisplaySize.cy+_SHOW_WIDTH;
		}
	}
	else
	{
		 GetDlgItem(IDC_VIDEO_POS+nChannel)->GetWindowRect(rPicRect);
		 ScreenToClient(rPicRect);
		 rPicRect.left=nStartX;
		 rPicRect.top=nStartY;
		 rPicRect.right=rPicRect.left+m_DisplaySize.cx;
		 rPicRect.bottom=rPicRect.top+m_DisplaySize.cy;
		 ClientToScreen(rPicRect);
		 GetDlgItem(IDC_VIDEO_POS+nChannel)->MoveWindow(rPicRect);
		 int nPosX=rPicRect.left;
		 int nPosY=rPicRect.bottom;
		 int nWidth=rPicRect.Width();
		 GetDlgItem(IDC_CHANNEL_SHOW0+nChannel)->GetWindowRect(rTempRect);
		 ScreenToClient(rTempRect);
		 rTempRect.left=nPosX;
		 rTempRect.top=nPosY;
		 rTempRect.right=rTempRect.left+nWidth;
		 rTempRect.bottom=rTempRect.top+_SHOW_WIDTH;
		 GetDlgItem(IDC_CHANNEL_SHOW0+nChannel)->MoveWindow(rTempRect);
		 GetDlgItem(IDC_VIDEO_POS+nChannel)->ShowWindow(SW_SHOW);
         GetDlgItem(IDC_VIDEO_POS+nChannel)->Invalidate();
		 GetDlgItem(IDC_CHANNEL_SHOW0+nChannel)->ShowWindow(SW_SHOW);
	}
}
//////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////
void CGtMpegWnd::ChangShowText()
{
	for(int i=0;i<theApp.m_nChannels;i++)
	{
		CString sCaption;
		sCaption.Format("频道%02d:",i+1);
		CString sEntry;
		sEntry.Format("Channel%02d_Txt",i+1);
		sCaption+=AfxGetApp()->GetProfileString("Info",sEntry);
		((CCaption* )GetDlgItem(IDC_CHANNEL_SHOW0+i))->SetCaptionText(sCaption);
	}
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
void CGtMpegWnd::MoveMenu()
{
    CRect rScrRect;
	GetWindowRect(rScrRect);
	ScreenToClient(rScrRect);
	rScrRect.bottom=m_MaxVertSize;
    rScrRect.right=m_MaxHorzSize;
	rScrRect.left=0;
	rScrRect.top=0;
	MoveWindow(rScrRect);
	ClientToScreen(rScrRect);
	//菜单部分
	CRect rSetingRect,rOldSetingRect,rTempRect;
	int nSpace;
	GetDlgItem(IDC_SETING_POS)->GetWindowRect(rSetingRect);
	ScreenToClient(rSetingRect);
	rOldSetingRect=rSetingRect;
	rSetingRect.right=m_MaxHorzSize;
	rSetingRect.left=rScrRect.right-rOldSetingRect.Width();
	rSetingRect.bottom=rScrRect.bottom;
	nSpace=rSetingRect.left-rOldSetingRect.left;
    GetDlgItem(IDC_SETING_POS)->MoveWindow(rSetingRect);
	ScreenToClient(rSetingRect);
	//IDC_VIDEO_SETTING
	CRect rVideoSeting;
	GetDlgItem(IDC_VIDEO_SETTING)->GetWindowRect(rVideoSeting);
	ScreenToClient(rVideoSeting);
	rVideoSeting.OffsetRect(nSpace,0);
    GetDlgItem(IDC_VIDEO_SETTING)->MoveWindow(rVideoSeting);
	//
	for(int j=0;j<theApp.m_nMaxChannels;j++)
	{
	   GetDlgItem(IDC_CHANNEL0+j)->GetWindowRect(rTempRect);
	   ScreenToClient(rTempRect);
	   rTempRect.OffsetRect(nSpace,0);
       GetDlgItem(IDC_CHANNEL0+j)->MoveWindow(rTempRect);
	   
	   GetDlgItem(IDC_CHANNEL_STATES0+j)->GetWindowRect(rTempRect);
	   ScreenToClient(rTempRect);
	   rTempRect.OffsetRect(nSpace,0);
       GetDlgItem(IDC_CHANNEL_STATES0+j)->MoveWindow(rTempRect);
	   if(j>=theApp.m_nChannels)
	   {
          GetDlgItem(IDC_CHANNEL0+j)->EnableWindow(FALSE);
          GetDlgItem(IDC_CHANNEL_STATES0+j)->EnableWindow(FALSE);
	   }
		   if(theApp.m_bAlarm)
		   {
			   GetDlgItem(IDC_LAMP_1+j)->GetWindowRect(rTempRect);
			   ScreenToClient(rTempRect);
			   rTempRect.OffsetRect(nSpace,0);
			   rTempRect.right=rTempRect.left+16;
			   rTempRect.bottom=rTempRect.top+16;
			   GetDlgItem(IDC_LAMP_1+j)->MoveWindow(rTempRect);
			   CString sCaption="";
			   sCaption.Format("%02d频道报警指示灯",j+1); 
			   m_wndAlarm[j].Create(sCaption,rTempRect,this,IDC_LAMP_1+j);
		   }
	}
	m_cStop.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cStop.MoveWindow(rTempRect);
	m_cStop.EnableWindow(theApp.m_bRecord);
    //	
	m_cRecord.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cRecord.MoveWindow(rTempRect);
	m_cRecord.EnableWindow(theApp.m_bRecord);
    //	
	m_cPlay.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cPlay.MoveWindow(rTempRect);
	m_cPlay.EnableWindow(theApp.m_bRecord);
	//
    m_cDiskSpace.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cDiskSpace.MoveWindow(rTempRect);
	//
    m_cDiskSpaceTxt.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cDiskSpaceTxt.MoveWindow(rTempRect);
	//IDOK
	m_cOK.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cOK.MoveWindow(rTempRect);
	//IDC_START_VIDEO
	m_cStartVideo.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cStartVideo.MoveWindow(rTempRect);
    //
	m_cPicPlane9.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cPicPlane9.MoveWindow(rTempRect);
    //
	m_cPicPlane4.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cPicPlane4.MoveWindow(rTempRect);
    //
	m_cPicPlane1.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cPicPlane1.MoveWindow(rTempRect);
	//
	m_cSnap.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cSnap.MoveWindow(rTempRect);
	//
	m_cBackup.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cBackup.MoveWindow(rTempRect);
	m_cBackup.EnableWindow(theApp.m_bRecord);
    //
	m_cSystemSet.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cSystemSet.MoveWindow(rTempRect);
    //
	m_cOpenMap.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cOpenMap.MoveWindow(rTempRect);
	//IDC_MSGWND
	GetDlgItem(IDC_MSGWND)->GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    GetDlgItem(IDC_MSGWND)->MoveWindow(rTempRect);
	//IDC_MENUWND
	GetDlgItem(IDC_MENUWND)->GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    GetDlgItem(IDC_MENUWND)->MoveWindow(rTempRect);
	//IDC_MSG_LIST
	GetDlgItem(IDC_MSG_LIST)->GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    GetDlgItem(IDC_MSG_LIST)->MoveWindow(rTempRect);
	//
	GetWindowRect(rScrRect);
	ScreenToClient(rScrRect);
	//
	m_cLogo.GetWindowRect(rTempRect);
	rTempRect.bottom=rScrRect.bottom-22;
    rTempRect.top=rTempRect.bottom-m_pLogoObject->GetHeight();
	rTempRect.right=rTempRect.left+m_pLogoObject->GetWidth();
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cLogo.MoveWindow(rTempRect);
	//	IDC_BUILD_UNIT
	m_wndBuildLogo.GetWindowRect(rTempRect);
	CRect rTopRect,rBottomRect;
    m_cClock.GetWindowRect(rTopRect);
    rTempRect.right=rTopRect.right;
    GetDlgItem(IDC_MENUWND)->GetWindowRect(rBottomRect);
    rTempRect.bottom=rBottomRect.top-3;
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_wndBuildLogo.MoveWindow(rTempRect);
	//m_cAbout
	m_cAbout.GetWindowRect(rTempRect);
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    m_cAbout.MoveWindow(rTempRect);
	//
	CRect rClockRect;
	m_cClock.GetWindowRect(rClockRect);
	ScreenToClient(rClockRect);
	rClockRect.OffsetRect(nSpace,0);
    m_cClock.MoveWindow(rClockRect);
	m_cClock.SetStyle(CDigitClock::XDC_SECOND);
	////////////////////////////////
	GetDlgItem(IDC_RUDDER_POS)->GetWindowRect(rTempRect);
	rTempRect.right=rTempRect.left+90;
	rTempRect.bottom=rTempRect.top+90;
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    GetDlgItem(IDC_RUDDER_POS)->MoveWindow(rTempRect);   
	CStringArray asCaption;
    asCaption.SetSize(0);
	asCaption.Add("云台控制");
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","自动","自动/停止"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","抬头","向上"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","低头","向下"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","左转","向左"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","停止","向右"));
	m_wndRudderButton.Create(asCaption,rTempRect,this,IDC_RUDDER_POS);
    asCaption.SetSize(0);
	asCaption.Add("镜头控制");
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","光圈增大","光圈增大"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","光圈减少","光圈减少"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","短焦变倍","镜头拉近"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","长焦变倍","镜头拉远"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","聚焦前移","聚焦前移"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","聚焦后移","聚焦后移"));
	asCaption.Add(AfxGetApp()->GetProfileString("控制名称","K1接通","雨刷工作"));
	GetDlgItem(IDC_PLATE_POS)->GetWindowRect(rTempRect);
	rTempRect.right=rTempRect.left+100;
	rTempRect.bottom=rTempRect.top+100;
	ScreenToClient(rTempRect);
	rTempRect.OffsetRect(nSpace,0);
    GetDlgItem(IDC_PLATE_POS)->MoveWindow(rTempRect);   
	m_wndPlate.Create(asCaption,rTempRect,this,IDC_PLATE_POS);
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
void CGtMpegWnd::SetMenuIcon()
{
	CString sPath=AfxGetApp()->GetProfileString("Face","ButtonBK",GetAppPath()+"FacePlug\\按钮背景.JPG");
    m_cStop.SetIcon("停止监控/录像/回放",sPath,IDI_STOP);
	m_cRecord.SetIcon("开始录像",sPath,IDI_RECORD);
	m_cPlay.SetIcon("回放",sPath,IDI_PLAY);
    m_cOK.SetIcon("退出",sPath,IDI_EXIT);  
	m_cOpenMap.SetIcon("电子地图",sPath,IDI_MAP);  
	m_cVideoSeting.SetIcon("视频参数设置",sPath,IDI_VIDEO_SETING);
	m_cStartVideo.SetIcon("实时监控",sPath,IDI_START_VIDEO);
	m_cPicPlane9.SetIcon("9画面分割",sPath,IDI_PIC_PLANE_9);
	m_cPicPlane4.SetIcon("4画面分割",sPath,IDI_PIC_PLANE_4);
	m_cPicPlane1.SetIcon("单画面",sPath,IDI_PIC_PLANE_1);
	m_cSystemSet.SetIcon("系统参数设置",sPath,IDI_SYS_SET);
	m_cSnap.SetIcon("单帧捕捉",sPath,IDI_SNAP);
	m_cBackup.SetIcon("视频备份",sPath,IDI_BACKUP);
    m_cAbout.SetIcon("关于...",sPath,IDI_ABOUT);
	//
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
void CGtMpegWnd::StartMpeg()
{
	for(DWORD k=0;k<g_dwNumberOfSlots;k++)
	{
        if((int)k<m_nPicNumX*m_nPicNumY)
		{
	      OpenSlot(k);   
		}
	}
	SendMessage(WM_LBUTTONDOWN,0,0);
	m_bStart=TRUE;
	if(!OpenComm())
	{
	      m_cMsgListBox.AddString("串口通讯失败!");	   
	}
	if(theApp.m_bAlarm)
	{
	    InitAlarmChunnel();
	  	m_bComWorking=TRUE;
	    if(AfxBeginThread((AFX_THREADPROC) ReadCom,(LPVOID)this)==NULL)
		{
	      m_cMsgListBox.AddString("创建串口线程失败!");	   
		}
        EscapeCommFunction(m_hCom,SETDTR) ;
	    if(!m_AlarmSound.InitAudio(GetAppPath()+"Sound\\ALARM.WAV"))
		{
	       m_cMsgListBox.AddString("声音初始失败!");
		}
        InitZoneSet();
	}
	EndWaitCursor();
}
//////////////////////////
//
//////////////////////////
void CGtMpegWnd::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	CRect rTempRect;
	m_cLogo.GetWindowRect(rTempRect);
	if(m_pLogoObject!=NULL)
	   m_pLogoObject->DrawInRect(&dc,rTempRect);
	if (IsIconic())
	{
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}
//////////////////////////////////////
//
//
/////////////////////////////////////
HCURSOR CGtMpegWnd::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
/////////////////////////////////////////
//
//////////////////////////////////////////
void CGtMpegWnd::CloseSlot(DWORD  dwSlotNumber) 
{
	if(dwSlotNumber!=-1)
	{
		if (g_pDevice[dwSlotNumber] == NULL)
			return;
		g_pDevice[dwSlotNumber]->StopCheck();
		if(g_pDevice[dwSlotNumber]->m_bRePlay)
		{
		  g_pDevice[dwSlotNumber]->StopPlayback();
		  m_nPlays--;
		}
		if(g_pDevice[dwSlotNumber]->m_bRecord)
		{
		    g_pDevice[dwSlotNumber]->StopRecord();
			m_nRecords--;
		}
		g_pDevice[dwSlotNumber]->Close();
		delete g_pDevice[dwSlotNumber];
		g_pDevice[dwSlotNumber] = NULL;
		GetDlgItem(IDC_VIDEO_POS+dwSlotNumber)->Invalidate();
		g_bSlotOpened[dwSlotNumber]= FALSE;

⌨️ 快捷键说明

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