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

📄 realevvi.cpp

📁 电力监控系统 实时告警处理程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// RealEvView.cpp : implementation of the CRealEvView class
//

#include "stdafx.h"
#include "RealEv.h"
#include "afxpriv.h"

#include "RealEvDoc.h"
#include "RealEvView.h"
#include "EvtTypeConfigDlg.h"

#include "mainfrm.h"
#include "dlgcolor.h"

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



/////////////////////////////////////////////////////////////////////////////
// CRealEvView
#define WARNMSG "WarnMsg"
#define REQSAFEMSG "SafeDay"


static const UINT nMsgWarn = ::RegisterWindowMessage(WARNMSG);
static const UINT nSafeDay = ::RegisterWindowMessage(REQSAFEMSG);

IMPLEMENT_DYNCREATE(CRealEvView, CFormView)

BEGIN_MESSAGE_MAP(CRealEvView, CFormView)
//{{AFX_MSG_MAP(CRealEvView)
ON_WM_SIZE()
ON_WM_CREATE()
ON_WM_TIMER()
ON_COMMAND(ID_COLOR, OnColor)
ON_COMMAND(ID_EvtTypeConfig,OnEvtTypeConfig)
ON_COMMAND(ID_CONFIRM, OnConfirm)
ON_COMMAND(ID_DIS_ORD, OnDisOrd)
ON_COMMAND(ID_ORD, OnOrd)
ON_COMMAND(ID_SELECT_NEW, OnSelectNew)
ON_UPDATE_COMMAND_UI(ID_SELECT_NEW, OnUpdateSelectNew)
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
ON_COMMAND(ID_PRINT_NEW_EVENT, OnPrintNewEvent)
ON_UPDATE_COMMAND_UI(ID_PRINT_NEW_EVENT, OnUpdatePrintNewEvent)
ON_COMMAND(ID_SHOW_MSG_WND, OnShowMsgWnd)
ON_UPDATE_COMMAND_UI(ID_SHOW_MSG_WND, OnUpdateShowMsgWnd)
ON_COMMAND(IDR_SHAPE_RECT, OnShapeRect)
ON_COMMAND(IDR_SHAPE_ELLIPSE, OnShapeEllipse)
ON_COMMAND(IDR_BROWSE, OnBrowse)
ON_COMMAND(ID_VOICE, OnVoice)
ON_UPDATE_COMMAND_UI(ID_VOICE, OnUpdateVoice)
ON_COMMAND(ID_VoiceSet, OnAlarmSet)
	ON_UPDATE_COMMAND_UI(ID_ORD, OnUpdateOrd)
	ON_UPDATE_COMMAND_UI(ID_DIS_ORD, OnUpdateDisOrd)
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_ALARM_SET, OnAlarmSet)
	//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)

ON_CBN_SELCHANGE(IDC_COMBOX, OnSelchangeCombo)
//  ON_CBN_EDITCHANGE(IDC_COMBOX, OnEditchangeCombo)

ON_MESSAGE(WM_CHECKALL,OnCheckAll)
ON_MESSAGE(WM_XLISTCTRL_CHECKBOX_CLICKED,OnCheck)
ON_COMMAND (IDR_ACK,OnAck)
ON_COMMAND (IDR_ACK_ALL,OnAckAll)
ON_COMMAND (IDR_EXIT,OnExit)
ON_COMMAND (IDR_HIDE_MSG_WND,OnHideMsgWnd)
ON_MESSAGE (WM_MSGWINDBCLICK,OnDbClickMsgWnd)

ON_UPDATE_COMMAND_UI(ID_INDICATOR_NAME, OnUpdateINDICATOR_NAME)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_NAME1, OnUpdateINDICATOR_NAME)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRealEvView construction/destruction

CRealEvView::CRealEvView()
: CFormView(CRealEvView::IDD)
{
	//{{AFX_DATA_INIT(CRealEvView)
	// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	m_direct = down;
	m_bManulUpdate = 0;
	m_bOnlyNew = true;
	m_bShow= true;
	m_bPrint = 0;
	m_bVoice = 0;
	//m_voiceF=false;
	m_pPreviewList = NULL;
	m_updeF=0;
}

CRealEvView::~CRealEvView()
{
}

void CRealEvView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRealEvView)
	DDX_Control(pDX, IDC_LIST_EVENT, m_lsEvent);
	//}}AFX_DATA_MAP
}



void CRealEvView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	m_pWndMsg = new CMsgWnd;
	m_pWndMsg->Create(m_hWnd);
	//	m_pWndMsg->ShowWindow(SW_SHOW);4.16
	m_bdbInitialed = m_evtdb.InitDbApi("sa","");
	m_bShow=m_evtdb.IsNeedShow(m_evtdb.evt[m_evtdb.cursor].TypeID,m_evtdb.evt[m_evtdb.cursor].SubtypeID);//BYTE TypeID, BYTE SubtypeID);
	if(m_bShow)
	{
	m_pWndMsg->ShowWindow(SW_SHOW);//SW_HIDE);
	}
	else
	{
	m_pWndMsg->ShowWindow(SW_HIDE);
	}
	m_pWndMsg->m_bStuck = true;
	int cx = GetSystemMetrics(SM_CXSCREEN);
	int cy = GetSystemMetrics(SM_CYSCREEN);
	CRect rectCl ;
	m_pWndMsg->GetClientRect(&rectCl);
	rectCl.left = 0;
	rectCl.top = cy -rectCl.bottom;
	rectCl.bottom = cy;
	m_pWndMsg->MoveWindow(&rectCl);
	
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit(); 
	InitListCtrl();
	m_bLastIsShow = 0;
//	UpdateWarn();
	InitDropList();
	SetTimer(1111,300,NULL);
	
}

/////////////////////////////////////////////////////////////////////////////
// CRealEvView printing

BOOL CRealEvView::OnPreparePrinting(CPrintInfo* pInfo)
{
	return DoPreparePrinting(pInfo);
}

void CRealEvView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
}

void CRealEvView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
}

void CRealEvView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
}

/////////////////////////////////////////////////////////////////////////////
// CRealEvView diagnostics

#ifdef _DEBUG
void CRealEvView::AssertValid() const
{
	CFormView::AssertValid();
}

void CRealEvView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CRealEvDoc* CRealEvView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRealEvDoc)));
	return (CRealEvDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CRealEvView message handlers

void CRealEvView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	if(!m_lsEvent)return;
	CRect rect;
	GetClientRect(&rect);
	m_lsEvent.MoveWindow(&rect,0);	
}

int CRealEvView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	return 0;
}

void CRealEvView::OnSelchangeCombo() 
{
	if(!m_evtdb.IsInit())return;
	int cursel = m_pCombo->GetCurSel();
	
	//int ddd = (m_pCombo->GetItemData(cursel));
	WORD type = WORD(LOWORD(m_pCombo->GetItemData(cursel)));
	
	if(HIBYTE(type)==10)
	{if((LOBYTE(type)==0))
	Sleep(1);
	}
	m_evtdb.SetCurDisType(type);
	m_bManulUpdate = 1;
	UpdateWarn();
	m_bManulUpdate = 0;
	//	UpdateWarn();
	
}

#define DELETE_EXCEPTION(e) do { e->Delete(); } while (0)


UINT VoiceAlarm(LPVOID pData)
{
	evtdb* pObject = (evtdb*)pData;
	while(true)
	{
			TRY		pObject->VoiceWarn();//执行线程
			CATCH_ALL(e)
			{
				TRACE("Error: exception by Hdata Sample\n");
				DELETE_EXCEPTION(e);
				continue;
			}
			END_CATCH_ALL
	}
	
	return 10l;
}
//////////////////////////////////2004.6.30 zjh//////////////////////////////
UINT OnTimePrint(LPVOID pData)
{
	evtdb* pObject = (evtdb*)pData;
	while(true)
	{
		
		TRY		pObject->PrintWarn();//执行线程
		CATCH_ALL(e)
		{
			TRACE("Error: exception by Hdata Sample\n");
			DELETE_EXCEPTION(e);
			continue;
		}
		END_CATCH_ALL
	}
	
	return 102;
}
//////////////////////////////////2004.6.30 zjh//////////////////////////////

void CRealEvView::InitListCtrl()
{
	CXListCtrl * pList = (CXListCtrl *)GetDlgItem(IDC_LIST_EVENT);
	
	pList->SetBkColor(COLORREF(RGB(0,0,0)));
	CFont font;
	font.CreateFont(-18,0,0,0,400,0,0,0,1,OUT_DEFAULT_PRECIS,
		CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
		DEFAULT_PITCH,"宋体" );
	pList->SetFont(&font,0);
	
	int w = GetSystemMetrics(0)-10;
	m_lenList=w*48/64;
	
	int colwidths[4] = {5,13,25 };	// sixty-fourths
	
	TCHAR *	lpszHeaders[] = {   _T("确认"),
		_T("时间"),
		_T("事件信息"),
		NULL };
	int i;
	int total_cx = 0;
	LV_COLUMN lvcolumn;
	memset(&lvcolumn, 0, sizeof(lvcolumn));
	
	// add columns
	for (i = 0; ; i++)
	{
		if (lpszHeaders[i] == NULL)
			break;
		
		lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
		//		lvcolumn.fmt = (i == 1 ) ? LVCFMT_LEFT : LVCFMT_CENTER;
		lvcolumn.fmt = LVCFMT_CENTER;
		lvcolumn.pszText = lpszHeaders[i];
		lvcolumn.iSubItem = i;
//		lvcolumn.cx = (lpszHeaders[i+1] == NULL) ? w - total_cx - 10 : (w * colwidths[i]) / 64;
		lvcolumn.cx =  (w * colwidths[i]) / 64;
		total_cx += lvcolumn.cx;
		pList->InsertColumn(i, &lvcolumn);
	}
	
	
	// create the image list from bitmap resource
	VERIFY(pList->m_cImageList.Create(IDB_CHECKBOXES1, 16, 3, RGB(255, 0, 255)));
	pList->m_HeaderCtrl.SetImageList(&pList->m_cImageList);
	
	// iterate through header items and attach the image list
	HDITEM hditem;
	
	for (i = 0; i < pList->m_HeaderCtrl.GetItemCount(); i++)
	{
		hditem.mask = HDI_IMAGE | HDI_FORMAT;
		pList->m_HeaderCtrl.GetItem(i, &hditem);
		hditem.fmt |=  HDF_IMAGE;
		if (i == 0 )
			hditem.iImage = MyHeaderCtrl1_UNCHECKED_IMAGE;
		else  
			hditem.iImage = MyHeaderCtrl1_NO_IMAGE;
		
		pList->m_HeaderCtrl.SetItem(i, &hditem);
	}
	
	memset(&lvcolumn, 0, sizeof(lvcolumn));
	
	// set the format again - must do this twice or first column does not get set
	for (i = 0; ; i++)
	{
		if (lpszHeaders[i] == NULL)
			break;
		
		lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM;
		//		lvcolumn.fmt = (i == 1 ) ? LVCFMT_LEFT : LVCFMT_CENTER;
		lvcolumn.fmt = LVCFMT_CENTER;
		lvcolumn.iSubItem = i;
		pList->SetColumn(i, &lvcolumn);
	}

	pThread=AfxBeginThread(VoiceAlarm,&m_evtdb,THREAD_PRIORITY_BELOW_NORMAL,0,0,NULL);	
	pThreadPrint=AfxBeginThread(OnTimePrint,&m_evtdb,THREAD_PRIORITY_BELOW_NORMAL,0,0,NULL);//2004.6.30 zjh	
}

void CRealEvView::UpdateWarn()
{
	int TypeID,SubtypeID;
	COLORREF crText;
	COLORREF crBk = (COLORREF)RGB(0,0,0);
	
	if(!m_bdbInitialed)return;
	/*	m_evtdb.GetSafeDays(m_safedays);
	CString msg;
	msg.Format("%d",m_safedays);
	WPARAM wParm = 0;
	ATOM atom = GlobalAddAtom(msg.GetBuffer(msg.GetLength()));
	msg.ReleaseBuffer();
	::PostMessage(HWND_BROADCAST,nMsgWarn,wParm,(LPARAM)atom);
	*/
	
	//更新数据
	m_evtdb.ReadAllEvt();
	//打印新事件
	//if(m_bPrint)m_evtdb.PrintWarn();
	//if(m_bVoice)m_evtdb.VoiceWarn();
	
	m_evtdb.SelectNewEvt();//选择一条新记录,
	
	int nItem = 0, nSubItem= 0;
	int chg=m_evtdb.IsDisRecChanged();
	if(m_evtdb.nEvt <=0)return;
	if(m_updeF==0)
	{
		if(chg==0)
		{
			if(!m_bManulUpdate)
				return;
		}
	}
	m_bLastIsShow = 1;
	crText = m_evtdb.GetWarnColor(m_evtdb.evt[m_evtdb.cursor].TypeID,m_evtdb.evt[m_evtdb.cursor].SubtypeID);
	m_bShow=m_evtdb.IsNeedShow(m_evtdb.evt[m_evtdb.cursor].TypeID,m_evtdb.evt[m_evtdb.cursor].SubtypeID);//BYTE TypeID, BYTE SubtypeID);
	if(m_bShow)
	{
		m_evtdb.GetDTMStr(m_evtdb.evt[m_evtdb.cursor].Time,m_evtdb.evt[m_evtdb.cursor].MilliSec,dt);
		sprintf(dt,"%s  %s",dt,m_evtdb.evt[m_evtdb.cursor].Describe);
		m_pWndMsg->SetText(dt,crText);
		//m_pWndMsg->ShowWindow(SW_HIDE);//4.16
	}
	ShowWindow(SW_RESTORE);
	
	g_New=1;
	m_updeF=1;
//	CWindowDC  dc(this); // device context for painting	
//   dc.GetClipBox(&rectUpdate);
//	if(rectUpdate.bottom==0) return;
	m_updeF=0;


//	if((m_evtdb.m_iCurEvtDisType!=0xffff)&&(chg!=2)) return;
	m_lsEvent.LockWindowUpdate();	// lock window updates while filling list 
	
	int nEvent = m_evtdb.nEvt;
	if(!m_lsEvent.DeleteAllItems())return;
//	Invalidate();
	DWORD type;	

	if(m_direct == down) //顺序
	{	
		if((WORD)(m_evtdb.m_iCurEvtDisType)!=0xffff)
		{
			for(int i =0;i<m_evtdb.nEvt;i++)
			{
				type = MAKEWORD(m_evtdb.evt[i].SubtypeID,m_evtdb.evt[i].TypeID);
				if(m_evtdb.evt[i].TypeID == m_evtdb.m_iCurEvtDisType)
				{
					if(m_bOnlyNew)
					{
						if(m_evtdb.evt[i].AffirmF == 1)
						{
							continue;
						}
					}
					m_bShow=m_evtdb.IsNeedShow(m_evtdb.evt[i].TypeID,m_evtdb.evt[i].SubtypeID);//BYTE TypeID, BYTE SubtypeID);
					if(m_bShow)
					{
						crText = m_evtdb.GetWarnColor(m_evtdb.evt[i].TypeID,m_evtdb.evt[i].SubtypeID);
						nSubItem= 0; 
						m_lsEvent.InsertItem(nItem,str,crText,crBk);
						m_lsEvent.SetItemData(nItem,i);
						if(m_evtdb.evt[nItem].AffirmF ==0)
						{
							m_lsEvent.SetEnabled(nItem,1);
							m_lsEvent.SetCheckbox(nItem, nSubItem, 0);
							str = "N";
							m_lsEvent.SetItemText(nItem,nSubItem,str,crText,crBk);
						}
						else
						{
							m_lsEvent.SetCheckbox(nItem,nSubItem,1);
							m_lsEvent.SetEnabled(nItem,FALSE);
							str = "Y";
							m_lsEvent.SetItemText(nItem,nSubItem,str,crText,crBk);
						}
						nSubItem ++;
						m_evtdb.GetDTMStr(m_evtdb.evt[i].Time,m_evtdb.evt[i].MilliSec,dt);
						str = dt;
						m_lsEvent.SetItemText(nItem,nSubItem,str,crText,crBk);
						str.Empty();
						nSubItem ++;
						m_lsEvent.SetItemText(nItem,nSubItem,m_evtdb.evt[i].Describe,crText,crBk);
						nItem++;
					}
				}
			}
		}
		else//显示所有
		{
			nItem = 0;
			for(int i =0;i<m_evtdb.nEvt;i++)
			{
				//	if(m_evtdb.evt[i].prcF !=1) continue;
				if(m_bOnlyNew)
				{
					if(m_evtdb.evt[i].AffirmF == 1)
					{
						continue;
					}
				}
				m_bShow=m_evtdb.IsNeedShow(m_evtdb.evt[i].TypeID,m_evtdb.evt[i].SubtypeID);//BYTE TypeID, BYTE SubtypeID);
				if(m_bShow)
				{
					crText = m_evtdb.GetWarnColor(m_evtdb.evt[i].TypeID,m_evtdb.evt[i].SubtypeID);
					nSubItem = 0;
					m_lsEvent.InsertItem(nItem,str,crText,crBk);
					m_lsEvent.SetItemData(nItem,i);
					if(m_evtdb.evt[i].AffirmF ==0)
					{
						m_lsEvent.SetEnabled(nItem,1);
						m_lsEvent.SetCheckbox(nItem, nSubItem, 0);
						str = "N";
						m_lsEvent.SetItemText(nItem,nSubItem,str,crText,crBk);
					}
					else
					{
						m_lsEvent.SetCheckbox(nItem,nSubItem,1);
						m_lsEvent.SetEnabled(nItem,FALSE);
						str = "Y";
						m_lsEvent.SetItemText(nItem,nSubItem,str,crText,crBk);
					}
					nSubItem ++;
					m_evtdb.GetDTMStr(m_evtdb.evt[i].Time,m_evtdb.evt[i].MilliSec,dt);
					str = dt;
					m_lsEvent.SetItemText(nItem,nSubItem,str,crText,crBk);
					str.Empty();
					
					TypeID = m_evtdb.evt[i].TypeID;
					SubtypeID = m_evtdb.evt[i].SubtypeID;
					crText =   m_evtdb.GetWarnColor(TypeID,SubtypeID);//
					nSubItem ++	;
					m_lsEvent.SetItemText(nItem,nSubItem,m_evtdb.evt[i].Describe,crText,crBk);

⌨️ 快捷键说明

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