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

📄 alarmdynamicdisp.cpp

📁 远程视频监控系统最新程序代码
💻 CPP
字号:
// AlarmDynamicDisp.cpp : implementation file
//

#include "stdafx.h"
#include "operat.h"
#include "AlarmDynamicDisp.h"
#include "math.h"
#include "Mmsystem.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAlarmDynamicDisp

CAlarmDynamicDisp::CAlarmDynamicDisp()
{
}

CAlarmDynamicDisp::~CAlarmDynamicDisp()
{
}


BEGIN_MESSAGE_MAP(CAlarmDynamicDisp, CWnd)
	//{{AFX_MSG_MAP(CAlarmDynamicDisp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CAlarmDynamicDisp message handlers
void CAlarmDynamicDisp::InitData(CWnd *pWnd)
{  
	InitMsFlexGrid(pWnd);
}

void CAlarmDynamicDisp::InitMsFlexGrid(CWnd *pWnd)
{   
	CRect nRect,nGridRect;
	pWnd->GetClientRect(&nRect);
    nGridRect=nRect;
	nGridRect.right=nRect.left+nRect.Width()/2;
	nGridRect.bottom=65;
	char sTitle[4][64]={"         名    称","      报警时间","      报警值"};	 
 //   m_nDynamicGrid.Create(NULL,WS_CHILD|WS_VISIBLE| WS_BORDER,nGridRect,pWnd,IDC_DYNAMICALARM_GRID,NULL,FALSE); 
	m_nDynamicGrid.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|WS_HSCROLL|WS_BORDER|LVS_NOCOLUMNHEADER,nGridRect,pWnd,IDC_DYNAMICALARM_GRID);

	nGridRect.left=nGridRect.right+1;
	nGridRect.right=nRect.right;
	nGridRect.bottom=65;     
    m_nStaticGrid.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|WS_HSCROLL|WS_BORDER|LVS_NOCOLUMNHEADER,nGridRect,pWnd,IDC_STATICALARM_GRID);


    LV_COLUMN pLvc;
	pLvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
	pLvc.fmt=LVCFMT_CENTER;
	  // pLvc.cx=100;
	pLvc.cchTextMax=40;
	short nRange=(nGridRect.Width()-20)/13;
	for(int i=0;i<3;i++)
	{       
      switch(i)
	  {
	  case 0:
		   pLvc.cx=nRange*7;
		  break;
	  case 1:
		   pLvc.cx=nRange*4;
		   break;
	  case 2:
		    pLvc.cx=nRange*2;
		  break;
	  default :
		  break;
	  }
	  pLvc.fmt=LVCFMT_CENTER;
      pLvc.iSubItem=i;
      pLvc.pszText=sTitle[i];
	  m_nDynamicGrid.InsertColumn(i,&pLvc);
	  m_nStaticGrid.InsertColumn(i,&pLvc);
	} 
	m_nDynamicGrid.DeleteAllItems(); 
	CFont nFont;
	nFont.CreatePointFont(180,"宋体");
	m_nDynamicGrid.SetFont(&nFont);
	m_nDynamicGrid.SetTextColor(RGB(255,0,0));
	m_nDynamicGrid.ShowWindow(TRUE);
    
	m_nStaticGrid.SetFont(&nFont);
	m_nStaticGrid.SetTextColor(RGB(255,0,0));
	m_nStaticGrid.ShowWindow(TRUE);    
//	m_nDynamicGrid.SetForeColorFixed(RGB(255,0,0));
}





void CAlarmDynamicDisp::DestoryData()
{
   if (m_nDynamicGrid.GetSafeHwnd()!=NULL) m_nDynamicGrid.DestroyWindow();
   if (m_nStaticGrid.GetSafeHwnd()!=NULL)  m_nStaticGrid.DestroyWindow();
}


void CAlarmDynamicDisp::NewAlarm(short nNo)
{   
  short nAdd,nCh;
  if (nNo<=0) return;
  nAdd=nNo/100;nCh=nNo%100;
  if ((nAdd>MAX_ADNUM)||(nCh>MAX_CHNUM)) return;
  aps=aps1+nAdd*(MAX_CHNUM+1)+nCh;
  code_name_tab=code_name_tab1+nAdd*(MAX_CHNUM+1)+nCh;
  float nAlarmAnaval;
  long  nAlarmTime;
  if (strstr(m_sPointCode,aps->psCode)!=NULL)  //取反
  {
     nAlarmAnaval=-aps->anaVal;
  }
  else
  {
     nAlarmAnaval=aps->anaVal;
  }
  nAlarmTime=aps->alrmtime;

  char sTitle[4][64];
  char *sTitlePoint[4];
  for(int i=0;i<4;i++) sTitlePoint[i]=&sTitle[i][0];
  strcpy(sTitle[0],code_name_tab->psName);
  CTime nTime=nAlarmTime;
  sprintf(sTitle[1],"%2d/%2d/%2d:%2d",nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute());

  if (fabs(nAlarmAnaval)>=10.0) sprintf(sTitle[2],"%7.0f",nAlarmAnaval);
  else sprintf(sTitle[2],"%7.2f",nAlarmAnaval); 
  InsertRows(&m_nDynamicGrid,sTitlePoint);
  for (i=0;i<MAX_TOTAL;i++) 
  {
	  if (m_nDynamicRowNo[i]>0) m_nDynamicRowNo[i]++;
  }
  m_nDynamicRowNo[aps->AlarmNo]=1;
}

void CAlarmDynamicDisp::MaxAlarm(short nNo)
{
  short nAdd,nCh;
  if (nNo<=0) return;
  nAdd=nNo/100;nCh=nNo%100;
  if ((nAdd>MAX_ADNUM)||(nCh>MAX_CHNUM)) return;
  aps=aps1+nAdd*(MAX_CHNUM+1)+nCh;
  code_name_tab=code_name_tab1+nAdd*(MAX_CHNUM+1)+nCh;

  float nAlarmAnaval;
  long  nAlarmTime;
  CString nStr;
  if (strstr(m_sPointCode,aps->psCode)!=NULL)  //取反
  {
     nAlarmAnaval=-aps->anaVal;
  }
  else
  {
     nAlarmAnaval=aps->anaVal;
  }
  if (fabs(aps->anaVal)>=10.0) nStr.Format("%7.1f",nAlarmAnaval);
  else nStr.Format("%7.2f",nAlarmAnaval); 

  if (m_nDynamicRowNo[aps->AlarmNo]>=1) 
  {
	  if (m_nDynamicGrid.GetItemCount()>=m_nDynamicRowNo[aps->AlarmNo])
	  {
	    m_nDynamicGrid.SetItemText(m_nDynamicRowNo[aps->AlarmNo]-1,2,nStr);
	  }
  }
  else
  {
    if (m_nStaticRowNo[aps->AlarmNo]>=1) 
	{
	  if (m_nStaticGrid.GetItemCount()>=m_nStaticRowNo[aps->AlarmNo])
	  {
	      m_nStaticGrid.SetItemText(m_nStaticRowNo[aps->AlarmNo]-1,2,nStr);
	  }
	}
  }
}

void CAlarmDynamicDisp::EndAlarm(short nNo)
{ 
  if (nNo<=0) return;
  short nAdd,nCh;
  nAdd=nNo/100;nCh=nNo%100;
  if ((nAdd>MAX_ADNUM)||(nCh>MAX_CHNUM)) return;

  aps=aps1+nAdd*(MAX_CHNUM+1)+nCh;
  if ((m_nDynamicRowNo[aps->AlarmNo]>=1)&&(m_nDynamicRowNo[aps->AlarmNo])<=m_nDynamicGrid.GetItemCount())
  {
   	 DeleteGrid(&m_nDynamicGrid,m_nDynamicRowNo[aps->AlarmNo]-1);
     for (int i=0;i<MAX_TOTAL;i++)
	 {
		if (m_nDynamicRowNo[i]>m_nDynamicRowNo[aps->AlarmNo]) m_nDynamicRowNo[i]--;
	 }
	 m_nDynamicRowNo[aps->AlarmNo]=0;
  }

  if ((m_nStaticRowNo[aps->AlarmNo]>=1)&&(m_nStaticRowNo[aps->AlarmNo])<=m_nStaticGrid.GetItemCount())
  {
   	 DeleteGrid(&m_nStaticGrid,m_nStaticRowNo[aps->AlarmNo]-1);
     for (int i=0;i<MAX_TOTAL;i++)
	 {
		if (m_nStaticRowNo[i]>m_nStaticRowNo[aps->AlarmNo]) m_nStaticRowNo[i]--;
	 }
	 m_nStaticRowNo[aps->AlarmNo]=0;
  }
}


void CAlarmDynamicDisp::ConfirmAlarm()
{
   if (m_nDynamicGrid.GetItemCount()<1) return;
   short nRow;
   POSITION pos; 
   pos = m_nDynamicGrid.GetFirstSelectedItemPosition(); 

// 得到项目索引 
   nRow = m_nDynamicGrid.GetNextSelectedItem(pos); 
   if (nRow==-1) return;
   nRow+=1;
   short nCodeNo=GetAlarmCodeNo(nRow);
   if ((nRow>=1)&&(nCodeNo>0))
   {
	  char sTitle[4][64];
      char *sTitlePoint[4];
	  short adr,ch;
	  adr=nCodeNo/100;ch=nCodeNo%100;
	  if((adr<1)||(adr>(MAX_ADNUM+2))) return;
      if((ch<1)||(ch>MAX_CHNUM)) return;  
	  aps=aps1+adr*(MAX_CHNUM+1)+ch;
      for(int i=0;i<4;i++) sTitlePoint[i]=&sTitle[i][0];
	  for(int j=0;j<3;j++)
	  {
	     strcpy(sTitle[j],(LPSTR)(LPCTSTR)m_nDynamicGrid.GetItemText(nRow-1,j));
	  }
      DeleteGrid(&m_nDynamicGrid,nRow-1);
      for (i=0;i<MAX_TOTAL;i++)
	  {
		if (m_nDynamicRowNo[i]==nRow)  //动态表格中对应的列清零
		{
			m_nDynamicRowNo[i]=0;
			break;
		}
	  }
      for (i=0;i<MAX_TOTAL;i++)
	  {
		if (m_nDynamicRowNo[i]>nRow) m_nDynamicRowNo[i]--;
	  }
      
	  //加入到静态显示的表格中
	  InsertRows(&m_nStaticGrid,sTitlePoint);
	  for (i=0;i<MAX_TOTAL;i++) if (m_nStaticRowNo[i]>0) m_nStaticRowNo[i]++;
      m_nStaticRowNo[aps->AlarmNo]=1;
   }
   
}

void CAlarmDynamicDisp::InsertRows(CListCtrl *pMsFlexGrid,char **pStr)
{
  LVITEM pLitem; 
  pLitem.mask= LVCF_TEXT|LVCF_SUBITEM|LVIF_STATE;
  pLitem.state=0;
  pLitem.stateMask=0;
  pLitem.iImage=0;
  pLitem.iSubItem=0;	  
  pLitem.iItem=0;
  pMsFlexGrid->InsertItem(&pLitem);
  for(int i=0;i<3;i++) pMsFlexGrid->SetItemText(0,i,*(pStr+i));
}

void CAlarmDynamicDisp::DeleteGrid(CListCtrl *pMsFlexGrid,short nRow)
{  
  pMsFlexGrid->DeleteItem(nRow);
}


BOOL CAlarmDynamicDisp::PlayResource(char* lpname)
{
    BOOL  brtn;
	char*  lpres;
    HANDLE hres;
	HRSRC  hresinfo;
    HINSTANCE nl=AfxGetInstanceHandle();
   // find the wave resource */
    hresinfo=FindResource(nl,lpname,"wave");
    if (hresinfo==NULL)  return false;
   // load the wave resource. */
    hres = LoadResource(nl,hresinfo);
	if (hres==NULL) return false;
    //lock the wave resource and play it. */
	lpres=(LPSTR)LockResource(hres);
	if(lpres==NULL)
    return false;
	brtn = sndPlaySound(lpres, SND_MEMORY|SND_ASYNC);
	if(brtn == NULL) return false;

  //free the wave resource and return success or failure. 
	FreeResource(hres);
	return true;
}

short CAlarmDynamicDisp::GetAlarmCodeNo(short nRow)
{

     for (int i=0;i<MAX_TOTAL;i++)
	 {
		if (m_nDynamicRowNo[i]==nRow) break;
	 }
	 if (i<MAX_TOTAL)
	 {  
         for(int adr=1;adr<MAX_ADNUM;adr++)
		 {
	       for(int chi=1;chi<=20;chi++)
		   {
	         aps = aps1 + adr*(MAX_CHNUM+1)+chi;
	         if (aps->psNo<=0) continue;
			 if (aps->AlarmNo==i) return adr*100+chi;
		   }
		 }
	 }
	 return -1;
}

BOOL CAlarmDynamicDisp::HaveAlarm()
{
   if (m_nDynamicGrid.GetItemCount()<1) return false;
   else return true;
}

⌨️ 快捷键说明

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