From 02fb493f0903013e5258c2ff5e2cb27de873378a Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 12 十二月 2024 10:51:43 +0800
Subject: [PATCH] 1.警告性息弹窗; 2.警告性息列表;
---
SourceCode/Bond/BondEq/CBonder.cpp | 23 ++
SourceCode/Bond/BondEq/InputDialog.cpp | 1
SourceCode/Bond/BondEq/Resource.h | 0
SourceCode/Bond/BondEq/AlarmMonitor.cpp | 44 +++-
SourceCode/Bond/BondEq/BondEqDlg.h | 4
SourceCode/Bond/BondEq/HorizontalLine.h | 1
SourceCode/Bond/BondEq/BondEq.rc | 0
SourceCode/Bond/BondEq/AlarmMonitor.h | 5
SourceCode/Bond/BondEq/HorizontalLine.cpp | 6
SourceCode/Bond/BondEq/Component.h | 4
SourceCode/Bond/BondEq/BondEqDlg.cpp | 32 +++
SourceCode/Bond/x64/Debug/Res/Alarm_o_64.ico | 0
SourceCode/Bond/BondEq/BondEq.vcxproj | 2
SourceCode/Bond/BondEq/AlarmPopupDlg.h | 53 +++++
SourceCode/Bond/x64/Debug/Res/Alarm_red_128.ico | 0
SourceCode/Bond/BondEq/AlarmPopupDlg.cpp | 216 ++++++++++++++++++++++++
SourceCode/Bond/BondEq/CPageAlarm.h | 6
SourceCode/Bond/x64/Debug/Res/Alarm_white_128.ico | 0
SourceCode/Bond/x64/Debug/Res/Alarm_white_24.ico | 0
SourceCode/Bond/x64/Debug/Res/close_blcak_24.ico | 0
SourceCode/Bond/x64/Debug/Res/Alarm_o_24.ico | 0
SourceCode/Bond/BondEq/CPageAlarm.cpp | 109 +++++++++++
SourceCode/Bond/BondEq/Common.h | 18 ++
23 files changed, 506 insertions(+), 18 deletions(-)
diff --git a/SourceCode/Bond/BondEq/AlarmMonitor.cpp b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
index 8d3c9f5..4e23b8d 100644
--- a/SourceCode/Bond/BondEq/AlarmMonitor.cpp
+++ b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
@@ -95,13 +95,14 @@
for (auto iter = m_mapAlarming.begin(); iter != m_mapAlarming.end();/* iter++*/) {
if (!findAlarm(alarmIds, iter->first)) {
// 消除警告, 同时将信息发出,以使界面显示和历史记录保存
- iter->second->alarmOff();
- addAlarmToHistoryRecord(iter->second);
- LOGE("消除了警告:%s", iter->second->toString().c_str());
- SendBroadcast(&CIntent(BC_CODE_ALARM_OFF, "", iter->second));
-
- iter->second->release();
+ CAlarm* pAlarm = iter->second;
+ pAlarm->alarmOff();
+ addAlarmToHistoryRecord(pAlarm);
m_mapAlarming.erase(iter++);
+
+ LOGE("消除了警告:%s", pAlarm->toString().c_str());
+ SendBroadcast(&CIntent(BC_CODE_ALARM_OFF, "", pAlarm));
+ pAlarm->release();
}
else {
iter++;
@@ -190,11 +191,9 @@
}
}
-void CAlarmMonitor::getAlarmingMap(std::map<int, CAlarm*>& alarms)
+std::map<int, CAlarm*>& CAlarmMonitor::getAlarmingMap()
{
- Lock();
- alarms = m_mapAlarming;
- Unlock();
+ return m_mapAlarming;
}
BOOL CAlarmMonitor::isAlarming()
@@ -205,6 +204,31 @@
return bAlarming;
}
+CAlarm* CAlarmMonitor::getActiveAlarm()
+{
+ Lock();
+ if (m_mapAlarming.empty()) {
+ Unlock();
+ return nullptr;
+ }
+ auto iter = m_mapAlarming.begin();
+ Unlock();
+
+ return iter->second;
+}
+
+std::list< CAlarm*>& CAlarmMonitor::getAlarmRecords()
+{
+ return m_alarms;
+}
+
+void CAlarmMonitor::getAlarmRecords(std::list< CAlarm*>& list)
+{
+ Lock();
+ list = m_alarms;
+ Unlock();
+}
+
BOOL CAlarmMonitor::compareData(const char* pScrData, const char* pTarData, int len)
{
for (int i = 0; i < len; i++) {
diff --git a/SourceCode/Bond/BondEq/AlarmMonitor.h b/SourceCode/Bond/BondEq/AlarmMonitor.h
index ecf7cbd..a0b0fac 100644
--- a/SourceCode/Bond/BondEq/AlarmMonitor.h
+++ b/SourceCode/Bond/BondEq/AlarmMonitor.h
@@ -21,8 +21,11 @@
virtual void OnTimer(UINT nTimerid);
const char* getAlarmText(int nID);
virtual void Serialize(CArchive& ar);
- void getAlarmingMap(std::map<int, CAlarm*>& alarms);
+ std::map<int, CAlarm*>& getAlarmingMap();
BOOL isAlarming();
+ CAlarm* getActiveAlarm();
+ void getAlarmRecords(std::list< CAlarm*>& list);
+ std::list< CAlarm*>& getAlarmRecords();
private:
BOOL compareData(const char* pScrData, const char* pTarData, int len);
diff --git a/SourceCode/Bond/BondEq/AlarmPopupDlg.cpp b/SourceCode/Bond/BondEq/AlarmPopupDlg.cpp
new file mode 100644
index 0000000..6df9740
--- /dev/null
+++ b/SourceCode/Bond/BondEq/AlarmPopupDlg.cpp
@@ -0,0 +1,216 @@
+// AlarmPopupDlg.cpp : 实现文件
+//
+
+#include "stdafx.h"
+#include "BondEq.h"
+#include "AlarmPopupDlg.h"
+#include "afxdialogex.h"
+#include "HorizontalLine.h"
+#include "AlarmMonitor.h"
+
+
+// CAlarmPopupDlg 对话框
+
+IMPLEMENT_DYNAMIC(CAlarmPopupDlg, CDialogEx)
+
+CAlarmPopupDlg::CAlarmPopupDlg(CWnd* pParent /*=NULL*/)
+ : CDialogEx(IDD_DIALOG_POPUP_ALARM, pParent)
+{
+ m_crBkgnd = RGB(225, 225, 225);
+ m_hbrBkgnd = nullptr;
+ m_pActiveAlarm = nullptr;
+}
+
+CAlarmPopupDlg::~CAlarmPopupDlg()
+{
+}
+
+void CAlarmPopupDlg::DoDataExchange(CDataExchange* pDX)
+{
+ CDialogEx::DoDataExchange(pDX);
+}
+
+
+BEGIN_MESSAGE_MAP(CAlarmPopupDlg, CDialogEx)
+ ON_WM_CTLCOLOR()
+ ON_WM_DESTROY()
+ ON_WM_SIZE()
+ ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CAlarmPopupDlg::OnBnClickedButtonClose)
+END_MESSAGE_MAP()
+
+
+// CAlarmPopupDlg 消息处理程序
+
+
+BOOL CAlarmPopupDlg::OnInitDialog()
+{
+ CDialogEx::OnInitDialog();
+
+
+ // 字体
+ HFONT hFontDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
+ LOGFONT lf;
+
+ ::GetObject(hFontDefault, sizeof(LOGFONT), &lf);
+ lf.lfHeight -= 8;
+ lf.lfWeight = 700;
+ m_fontTitle.CreateFontIndirect(&lf);
+
+ ::GetObject(hFontDefault, sizeof(LOGFONT), &lf);
+ lf.lfHeight -= 8;
+ m_fontLevel.CreateFontIndirect(&lf);
+
+ ::GetObject(hFontDefault, sizeof(LOGFONT), &lf);
+ lf.lfHeight -= 16;
+ m_fontName.CreateFontIndirect(&lf);
+
+ ::GetObject(hFontDefault, sizeof(LOGFONT), &lf);
+ lf.lfHeight -= 8;
+ m_fontDescription.CreateFontIndirect(&lf);
+
+ GetDlgItem(IDC_LABEL_TITLE)->SetFont(&m_fontTitle);
+ GetDlgItem(IDC_LABEL_LEVEL)->SetFont(&m_fontLevel);
+ GetDlgItem(IDC_LABEL_NAME)->SetFont(&m_fontName);
+ GetDlgItem(IDC_LABEL_DESCRIPTION)->SetFont(&m_fontDescription);
+
+
+ // 图标
+ CString strIcon1;
+ HICON hIcon;
+ CStatic* pStatic;
+
+ strIcon1.Format(_T("%s\\Res\\Alarm_o_24.ico"), theApp.m_strAppDir);
+ pStatic = (CStatic*)GetDlgItem(IDC_ICON_TITLE);
+ hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),
+ strIcon1, IMAGE_ICON, 24, 24,
+ LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
+ pStatic->SetIcon(hIcon);
+
+ strIcon1.Format(_T("%s\\Res\\Alarm_o_64.ico"), theApp.m_strAppDir);
+ pStatic = (CStatic*)GetDlgItem(IDC_ICON_ALARM);
+ hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),
+ strIcon1, IMAGE_ICON, 64, 64,
+ LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
+ pStatic->SetIcon(hIcon);
+
+
+ // 关闭按钮
+ strIcon1.Format(_T("%s\\Res\\close_blcak_24.ico"), theApp.m_strAppDir);
+ pStatic = (CStatic*)GetDlgItem(IDC_ICON_ALARM);
+ hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),
+ strIcon1, IMAGE_ICON, 128, 128,
+ LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
+ m_btnClose.SubclassDlgItem(IDC_BUTTON_CLOSE, this);
+ m_btnClose.SetIcon(hIcon, hIcon, 24);
+
+
+ // 解除警告按钮
+ m_btnAlarmOff.SubclassDlgItem(IDC_BUTTON_ALARM_OFF, this);
+ m_btnAlarmOff.SetFrameColor(BS_NORMAL, BTN_ALARM_OFF_FRAME_NORMAL);
+ m_btnAlarmOff.SetFrameColor(BS_HOVER, BTN_ALARM_OFF_FRAME_HOVER);
+ m_btnAlarmOff.SetFrameColor(BS_PRESS, BTN_ALARM_OFF_FRAME_PRESS);
+ m_btnAlarmOff.SetBkgndColor(BS_NORMAL, BTN_ALARM_OFF_BKGND_NORMAL);
+ m_btnAlarmOff.SetBkgndColor(BS_HOVER, BTN_ALARM_OFF_BKGND_HOVER);
+ m_btnAlarmOff.SetBkgndColor(BS_PRESS, BTN_ALARM_OFF_BKGND_PRESS);
+
+
+ // 静音按钮
+ m_btnSoundOff.SubclassDlgItem(IDC_BUTTON_SOUND_OFF, this);
+ m_btnSoundOff.SetFrameColor(BS_NORMAL, BTN_SOUND_OFF_FRAME_NORMAL);
+ m_btnSoundOff.SetFrameColor(BS_HOVER, BTN_SOUND_OFF_FRAME_HOVER);
+ m_btnSoundOff.SetFrameColor(BS_PRESS, BTN_SOUND_OFF_FRAME_PRESS);
+ m_btnSoundOff.SetBkgndColor(BS_NORMAL, BTN_SOUND_OFF_BKGND_NORMAL);
+ m_btnSoundOff.SetBkgndColor(BS_HOVER, BTN_SOUND_OFF_BKGND_HOVER);
+ m_btnSoundOff.SetBkgndColor(BS_PRESS, BTN_SOUND_OFF_BKGND_PRESS);
+
+
+ // 横线1
+ CHorizontalLine* pLine = CHorizontalLine::Hook(GetDlgItem(IDC_LINE1)->m_hWnd);
+ pLine->SetBkgndColor(RGB(225, 225, 225));
+ pLine->SetLineColor(RGB(168, 168, 168));
+
+ pLine = CHorizontalLine::Hook(GetDlgItem(IDC_LINE2)->m_hWnd);
+ pLine->SetBkgndColor(RGB(225, 225, 225));
+ pLine->SetLineColor(RGB(168, 168, 168));
+
+
+ return TRUE; // return TRUE unless you set the focus to a control
+ // 异常: OCX 属性页应返回 FALSE
+}
+
+
+HBRUSH CAlarmPopupDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+ HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
+
+ if (nCtlColor == CTLCOLOR_STATIC) {
+ pDC->SetBkColor(m_crBkgnd);
+ pDC->SetTextColor(RGB(0, 0, 0));
+ }
+
+ if (m_hbrBkgnd == nullptr) {
+ m_hbrBkgnd = CreateSolidBrush(m_crBkgnd);
+ }
+
+ return m_hbrBkgnd;
+}
+
+
+void CAlarmPopupDlg::OnDestroy()
+{
+ CDialogEx::OnDestroy();
+
+ if (m_hbrBkgnd != nullptr) {
+ ::DeleteObject(m_hbrBkgnd);
+ }
+
+ if (m_pActiveAlarm != nullptr) {
+ m_pActiveAlarm->release();
+ m_pActiveAlarm = nullptr;
+ }
+}
+
+
+void CAlarmPopupDlg::OnSize(UINT nType, int cx, int cy)
+{
+ CDialogEx::OnSize(nType, cx, cy);
+
+ // TODO: 在此处添加消息处理程序代码
+}
+
+void CAlarmPopupDlg::AlarmOn()
+{
+ ShowFirstAlarm();
+}
+
+void CAlarmPopupDlg::AlarmOff()
+{
+ ShowFirstAlarm();
+}
+
+void CAlarmPopupDlg::OnBnClickedButtonClose()
+{
+ // OnCancel();
+ ShowWindow(SW_HIDE);
+}
+
+void CAlarmPopupDlg::ShowFirstAlarm()
+{
+ // 取出警告信息首条并显示
+ if (m_pActiveAlarm != nullptr) {
+ m_pActiveAlarm->release();
+ }
+
+ CString strText;
+ CAlarmMonitor* pAlarmMonitor = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent("警告信息");
+ m_pActiveAlarm = pAlarmMonitor->getActiveAlarm();
+ if (m_pActiveAlarm != nullptr) {
+ m_pActiveAlarm->addRef();
+ SetDlgItemText(IDC_LABEL_NAME, pAlarmMonitor->getAlarmText(m_pActiveAlarm->getId()));
+ strText.Format(_T("ID: %d"), m_pActiveAlarm->getId());
+ SetDlgItemText(IDC_LABEL_LEVEL, strText);
+ }
+ else {
+ ShowWindow(SW_HIDE);
+ }
+}
diff --git a/SourceCode/Bond/BondEq/AlarmPopupDlg.h b/SourceCode/Bond/BondEq/AlarmPopupDlg.h
new file mode 100644
index 0000000..e9437a2
--- /dev/null
+++ b/SourceCode/Bond/BondEq/AlarmPopupDlg.h
@@ -0,0 +1,53 @@
+#pragma once
+#include "BlButton.h"
+#include "Alarm.h"
+
+
+// CAlarmPopupDlg 对话框
+
+class CAlarmPopupDlg : public CDialogEx
+{
+ DECLARE_DYNAMIC(CAlarmPopupDlg)
+
+public:
+ CAlarmPopupDlg(CWnd* pParent = NULL); // 标准构造函数
+ virtual ~CAlarmPopupDlg();
+
+
+public:
+ void AlarmOn();
+ void AlarmOff();
+
+private:
+ void ShowFirstAlarm();
+
+private:
+ COLORREF m_crBkgnd;
+ HBRUSH m_hbrBkgnd;
+ CFont m_fontTitle;
+ CFont m_fontLevel;
+ CFont m_fontName;
+ CFont m_fontDescription;
+
+private:
+ CAlarm* m_pActiveAlarm;
+ CBlButton m_btnClose;
+ CBlButton m_btnSoundOff;
+ CBlButton m_btnAlarmOff;
+
+// 对话框数据
+#ifdef AFX_DESIGN_TIME
+ enum { IDD = IDD_DIALOG_POPUP_ALARM };
+#endif
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
+
+ DECLARE_MESSAGE_MAP()
+public:
+ virtual BOOL OnInitDialog();
+ afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+ afx_msg void OnDestroy();
+ afx_msg void OnSize(UINT nType, int cx, int cy);
+ afx_msg void OnBnClickedButtonClose();
+};
diff --git a/SourceCode/Bond/BondEq/BondEq.rc b/SourceCode/Bond/BondEq/BondEq.rc
index 22fdfef..f3596f0 100644
--- a/SourceCode/Bond/BondEq/BondEq.rc
+++ b/SourceCode/Bond/BondEq/BondEq.rc
Binary files differ
diff --git a/SourceCode/Bond/BondEq/BondEq.vcxproj b/SourceCode/Bond/BondEq/BondEq.vcxproj
index f39bd84..73727f0 100644
--- a/SourceCode/Bond/BondEq/BondEq.vcxproj
+++ b/SourceCode/Bond/BondEq/BondEq.vcxproj
@@ -191,6 +191,7 @@
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
+ <ClInclude Include="AlarmPopupDlg.h" />
<ClInclude Include="CComponentDlg.h" />
<ClInclude Include="CComponentPLCDlg.h" />
<ClInclude Include="CPLC.h" />
@@ -263,6 +264,7 @@
<ClInclude Include="View\UserManagerDlg.h" />
</ItemGroup>
<ItemGroup>
+ <ClCompile Include="AlarmPopupDlg.cpp" />
<ClCompile Include="CComponentDlg.cpp" />
<ClCompile Include="CComponentPLCDlg.cpp" />
<ClCompile Include="CPLC.cpp" />
diff --git a/SourceCode/Bond/BondEq/BondEqDlg.cpp b/SourceCode/Bond/BondEq/BondEqDlg.cpp
index 3f3103b..9aa2398 100644
--- a/SourceCode/Bond/BondEq/BondEqDlg.cpp
+++ b/SourceCode/Bond/BondEq/BondEqDlg.cpp
@@ -72,6 +72,7 @@
m_pHomeDialog = nullptr;
m_pActiveView = nullptr;
m_pActiveComponentDlg = nullptr;
+ m_pAlarmWnd = nullptr;
}
void CBondEqDlg::DoDataExchange(CDataExchange* pDX)
@@ -151,6 +152,12 @@
}
}
}
+ }
+ else if (code == RX_CODE_ALARM_ON) {
+ AlarmOn();
+ }
+ else if (code == RX_CODE_ALARM_OFF) {
+ AlarmOff();
}
pAny->release();
}, [&]() -> void {
@@ -391,6 +398,11 @@
if (m_hbrBkgnd != nullptr) {
::DeleteObject(m_hbrBkgnd);
+ }
+
+ if (m_pAlarmWnd != nullptr) {
+ m_pAlarmWnd->DestroyWindow();
+ delete m_pAlarmWnd;
}
ASSERT(m_pObserver != NULL);
@@ -785,3 +797,23 @@
return pDlg;
}
+void CBondEqDlg::AlarmOn()
+{
+ if (m_pAlarmWnd == nullptr) {
+ m_pAlarmWnd = new CAlarmPopupDlg();
+ m_pAlarmWnd->Create(IDD_DIALOG_POPUP_ALARM, this);
+ m_pAlarmWnd->CenterWindow();
+ }
+ m_pAlarmWnd->ShowWindow(SW_SHOW);
+ m_pAlarmWnd->AlarmOn();
+}
+
+void CBondEqDlg::AlarmOff()
+{
+ if (m_pAlarmWnd == nullptr) {
+ m_pAlarmWnd = new CAlarmPopupDlg();
+ m_pAlarmWnd->Create(IDD_DIALOG_POPUP_ALARM, this);
+ m_pAlarmWnd->CenterWindow();
+ }
+ m_pAlarmWnd->AlarmOff();
+}
diff --git a/SourceCode/Bond/BondEq/BondEqDlg.h b/SourceCode/Bond/BondEq/BondEqDlg.h
index d7827a3..19f50e1 100644
--- a/SourceCode/Bond/BondEq/BondEqDlg.h
+++ b/SourceCode/Bond/BondEq/BondEqDlg.h
@@ -10,6 +10,7 @@
#include "CRemoteEqView.h"
#include "TopToolbar.h"
#include "CComponentPLCDlg.h"
+#include "AlarmPopupDlg.h"
// CBondEqDlg 对话框
@@ -28,6 +29,8 @@
CBaseView* CreateRemoteEqView(BEQ::IRemoteEquipment* pEquipment);
CComponentPLCDlg* CreateComponentPLCDlg(CComponent* pComponent);
void UpdateLoginStatus();
+ void AlarmOn();
+ void AlarmOff();
private:
COLORREF m_crBkgnd;
@@ -39,6 +42,7 @@
CHomeDialog* m_pHomeDialog;
CBaseView* m_pActiveView;
CComponentDlg* m_pActiveComponentDlg;
+ CAlarmPopupDlg* m_pAlarmWnd;
// 对话框数据
#ifdef AFX_DESIGN_TIME
diff --git a/SourceCode/Bond/BondEq/CBonder.cpp b/SourceCode/Bond/BondEq/CBonder.cpp
index 4ebcf7a..c4196dd 100644
--- a/SourceCode/Bond/BondEq/CBonder.cpp
+++ b/SourceCode/Bond/BondEq/CBonder.cpp
@@ -185,7 +185,7 @@
pPlc->addMonitor(1, 4400, 4499, MC::SOFT_COMPONENT::D, m_pPlcData);
pPlc->addMonitor(2, 4500, 4599, MC::SOFT_COMPONENT::D, &m_pPlcData[200]);
pPlc->addMonitor(3, 4700, 4791, MC::SOFT_COMPONENT::D, &m_pPlcData[400]);
- pPlc->addMonitor(MONITOR_ID_ALARM, 1001, 1064, MC::SOFT_COMPONENT::M, &m_pPlcData[600]);
+ pPlc->addMonitor(MONITOR_ID_ALARM, 10001, 10064, MC::SOFT_COMPONENT::M, &m_pPlcData[600]);
pPlc->setName("PLC(1)");
pPlc->setDescription("PLC");
@@ -429,6 +429,27 @@
if (iii % 5 == 0) {
save();
}
+
+
+ // 测试
+ BOOL bTest = FALSE;
+ if (bTest) {
+ static int xx = 0;
+ xx++;
+ memset(&m_pPlcData[600], 0, 260);
+ if (xx == 12) {
+ m_pPlcData[600] = 0x01;
+ for (auto c : m_components) {
+ c->onData(MONITOR_ID_ALARM, &m_pPlcData[600], 260);
+ }
+ }
+ else if (xx == 20) {
+ m_pPlcData[600] = 0x00;
+ for (auto c : m_components) {
+ c->onData(MONITOR_ID_ALARM, &m_pPlcData[600], 260);
+ }
+ }
+ }
}
void CBonder::AddComponent(CComponent* pComponent)
diff --git a/SourceCode/Bond/BondEq/CPageAlarm.cpp b/SourceCode/Bond/BondEq/CPageAlarm.cpp
index 5533d1e..0d76752 100644
--- a/SourceCode/Bond/BondEq/CPageAlarm.cpp
+++ b/SourceCode/Bond/BondEq/CPageAlarm.cpp
@@ -6,6 +6,7 @@
#include "CPageAlarm.h"
#include "afxdialogex.h"
#include "Common.h"
+#include "ToolUnits.h"
// CPageAlarm 对话框
@@ -50,8 +51,17 @@
// onNext
pAny->addRef();
int code = pAny->getCode();
- if (RX_CODE_LOG == code && ::IsWindow(m_hWnd)) {
-
+ if (RX_CODE_ALARM_ON == code) {
+ CAlarm* pAlarm;
+ if (pAny->getObject("obj", (IRxObject*&)pAlarm)) {
+ AddAlarm(nullptr, pAlarm);
+ }
+ }
+ else if (RX_CODE_ALARM_OFF == code) {
+ CAlarm* pAlarm;
+ if (pAny->getObject("obj", (IRxObject*&)pAlarm)) {
+ UpdateAlarm(nullptr, pAlarm);
+ }
}
pAny->release();
@@ -71,6 +81,26 @@
{
CDialogEx::OnInitDialog();
InitRxWindow();
+
+
+ // 报表控件
+ CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM);
+ DWORD dwStyle = pListCtrl->GetExtendedStyle();
+ dwStyle |= LVS_EX_FULLROWSELECT;
+ dwStyle |= LVS_EX_GRIDLINES;
+ pListCtrl->SetExtendedStyle(dwStyle);
+
+ HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1);
+ ListView_SetImageList(pListCtrl->GetSafeHwnd(), imageList, LVSIL_SMALL);
+ pListCtrl->InsertColumn(0, _T(""), LVCFMT_RIGHT, 0);
+ pListCtrl->InsertColumn(2, _T("警告ID"), LVCFMT_LEFT, 100);
+ pListCtrl->InsertColumn(3, _T("描述"), LVCFMT_LEFT, 580);
+ pListCtrl->InsertColumn(4, _T("发生时间"), LVCFMT_LEFT, 180);
+ pListCtrl->InsertColumn(5, _T("解除时间"), LVCFMT_LEFT, 180);
+
+
+ Resize();
+ LoadAlarms();
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
@@ -92,7 +122,6 @@
return m_hbrBkgnd;
}
-
void CPageAlarm::OnDestroy()
{
CDialogEx::OnDestroy();
@@ -107,10 +136,80 @@
}
}
-
void CPageAlarm::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
+ if (GetDlgItem(IDC_LIST_ALARM) == nullptr) return;
+ Resize();
+}
- // TODO: 在此处添加消息处理程序代码
+void CPageAlarm::Resize()
+{
+ CWnd* pItem;
+ CRect rcClient;
+ GetClientRect(&rcClient);
+
+ pItem = GetDlgItem(IDC_LIST_ALARM);
+ pItem->MoveWindow(12, 12, rcClient.Width() - 24, rcClient.Height() - 24);
+}
+
+void CPageAlarm::LoadAlarms()
+{
+ CAlarmMonitor* pMonitor = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent("警告信息");
+
+ pMonitor->Lock();
+ std::map<int, CAlarm*>& alarmings = pMonitor->getAlarmingMap();
+ std::list< CAlarm*>& alarms = pMonitor->getAlarmRecords();
+
+ for (auto item : alarmings) {
+ AddAlarm(pMonitor, item.second);
+ }
+ for (auto item : alarms) {
+ AddAlarm(pMonitor, item);
+ }
+
+ pMonitor->Unlock();
+}
+
+void CPageAlarm::AddAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm)
+{
+ if (pMonitor == nullptr) {
+ pMonitor = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent("警告信息");
+ }
+ CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM);
+ pListCtrl->InsertItem(0, _T(""));
+ pListCtrl->SetItemData(0, (DWORD_PTR)pAlarm);
+ pAlarm->addRef();
+ pListCtrl->SetItemText(0, 1, std::to_string(pAlarm->getId()).c_str());
+ pListCtrl->SetItemText(0, 2, pMonitor->getAlarmText(pAlarm->getId()));
+ pListCtrl->SetItemText(0, 3, CToolUnits::timeToString2(pAlarm->getOnTime()).c_str());
+ if (pAlarm->getOffTime() > 0) {
+ pListCtrl->SetItemText(0, 4, CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
+ }
+}
+
+void CPageAlarm::UpdateAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm)
+{
+ if (pMonitor == nullptr) {
+ pMonitor = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent("警告信息");
+ }
+ CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM);
+ for (int i = 0; i < pListCtrl->GetItemCount(); i++) {
+ if (pListCtrl->GetItemData(i) == (DWORD_PTR)pAlarm) {
+ if (pAlarm->getOffTime() > 0) {
+ pListCtrl->SetItemText(i, 4, CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
+ }
+ }
+ }
+}
+
+BOOL CPageAlarm::DestroyWindow()
+{
+ CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM);
+ for (int i = 0; i < pListCtrl->GetItemCount(); i++) {
+ CAlarm* pAlarm = (CAlarm*)pListCtrl->GetItemData(i);
+ pAlarm->release();
+ }
+
+ return CDialogEx::DestroyWindow();
}
diff --git a/SourceCode/Bond/BondEq/CPageAlarm.h b/SourceCode/Bond/BondEq/CPageAlarm.h
index 2fdbcb7..583a6b2 100644
--- a/SourceCode/Bond/BondEq/CPageAlarm.h
+++ b/SourceCode/Bond/BondEq/CPageAlarm.h
@@ -1,4 +1,5 @@
#pragma once
+#include "AlarmMonitor.h"
// CPageAlarm 对话框
@@ -13,6 +14,10 @@
private:
void InitRxWindow();
+ void Resize();
+ void LoadAlarms();
+ void AddAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm);
+ void UpdateAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm);
private:
COLORREF m_crBkgnd;
@@ -34,4 +39,5 @@
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg void OnDestroy();
afx_msg void OnSize(UINT nType, int cx, int cy);
+ virtual BOOL DestroyWindow();
};
diff --git a/SourceCode/Bond/BondEq/Common.h b/SourceCode/Bond/BondEq/Common.h
index d52651b..5a559d2 100644
--- a/SourceCode/Bond/BondEq/Common.h
+++ b/SourceCode/Bond/BondEq/Common.h
@@ -145,6 +145,24 @@
#define BTN_POINT_BKGND_PRESS RGB(0, 232, 0)
+/* 解除警告 按钮 */
+#define BTN_ALARM_OFF_FRAME_NORMAL RGB(88, 88, 88)
+#define BTN_ALARM_OFF_FRAME_HOVER RGB(88, 88, 88)
+#define BTN_ALARM_OFF_FRAME_PRESS RGB(88, 88, 88)
+#define BTN_ALARM_OFF_BKGND_NORMAL RGB(255, 127, 39)
+#define BTN_ALARM_OFF_BKGND_HOVER RGB(255, 157, 59)
+#define BTN_ALARM_OFF_BKGND_PRESS RGB(255, 100, 29)
+
+
+/* 静音按钮 */
+#define BTN_SOUND_OFF_FRAME_NORMAL RGB(88, 88, 88)
+#define BTN_SOUND_OFF_FRAME_HOVER RGB(88, 88, 88)
+#define BTN_SOUND_OFF_FRAME_PRESS RGB(88, 88, 88)
+#define BTN_SOUND_OFF_BKGND_NORMAL RGB(255, 127, 39)
+#define BTN_SOUND_OFF_BKGND_HOVER RGB(255, 157, 59)
+#define BTN_SOUND_OFF_BKGND_PRESS RGB(255, 100, 29)
+
+
/* 按钮id */
#define VIEW_TOOL_BTN_CLOSE 0x1016
diff --git a/SourceCode/Bond/BondEq/Component.h b/SourceCode/Bond/BondEq/Component.h
index 46e43c3..8b239a3 100644
--- a/SourceCode/Bond/BondEq/Component.h
+++ b/SourceCode/Bond/BondEq/Component.h
@@ -38,9 +38,11 @@
int WriteData(MC::SOFT_COMPONENT softComponent, unsigned int addr,
const char* pszData, unsigned int length, ONWRITE funOnWrite);
-protected:
+public:
inline void Lock() { EnterCriticalSection(&m_criticalSection); }
inline void Unlock() { LeaveCriticalSection(&m_criticalSection); }
+
+protected:
void SendBroadcast(CIntent* pIntent);
protected:
diff --git a/SourceCode/Bond/BondEq/HorizontalLine.cpp b/SourceCode/Bond/BondEq/HorizontalLine.cpp
index e306993..fc48b76 100644
--- a/SourceCode/Bond/BondEq/HorizontalLine.cpp
+++ b/SourceCode/Bond/BondEq/HorizontalLine.cpp
@@ -201,3 +201,9 @@
m_crBkgnd = cr;
}
+void CHorizontalLine::SetLineColor(COLORREF cr)
+{
+ m_crLineColor = cr;
+}
+
+
diff --git a/SourceCode/Bond/BondEq/HorizontalLine.h b/SourceCode/Bond/BondEq/HorizontalLine.h
index 14d4b62..f5b3647 100644
--- a/SourceCode/Bond/BondEq/HorizontalLine.h
+++ b/SourceCode/Bond/BondEq/HorizontalLine.h
@@ -71,6 +71,7 @@
void Notify(int nCode, int dwData, int dwData1 = 0, int dwData2 = 0);
void Release();
void SetBkgndColor(COLORREF cr);
+ void SetLineColor(COLORREF cr);
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static LRESULT OnNcCreate(HWND hWnd, WPARAM wParam, LPARAM lParam);
LRESULT OnDestroy(WPARAM wParam, LPARAM lParam);
diff --git a/SourceCode/Bond/BondEq/InputDialog.cpp b/SourceCode/Bond/BondEq/InputDialog.cpp
index 86252f9..ac0301d 100644
--- a/SourceCode/Bond/BondEq/InputDialog.cpp
+++ b/SourceCode/Bond/BondEq/InputDialog.cpp
@@ -50,6 +50,7 @@
SetWindowText(m_strTitle);
m_staticPrompt.SetWindowText(m_strPrompt);
m_editInput.SetFocus();
+ m_editInput.SetWindowText("1");
return TRUE; // return TRUE unless you set the focus to a control
// 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
diff --git a/SourceCode/Bond/BondEq/Resource.h b/SourceCode/Bond/BondEq/Resource.h
index d27a070..0e92991 100644
--- a/SourceCode/Bond/BondEq/Resource.h
+++ b/SourceCode/Bond/BondEq/Resource.h
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/Res/Alarm_o_24.ico b/SourceCode/Bond/x64/Debug/Res/Alarm_o_24.ico
new file mode 100644
index 0000000..1f40dee
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/Alarm_o_24.ico
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/Res/Alarm_o_64.ico b/SourceCode/Bond/x64/Debug/Res/Alarm_o_64.ico
new file mode 100644
index 0000000..bd6014d
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/Alarm_o_64.ico
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/Res/Alarm_red_128.ico b/SourceCode/Bond/x64/Debug/Res/Alarm_red_128.ico
new file mode 100644
index 0000000..8584f70
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/Alarm_red_128.ico
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/Res/Alarm_white_128.ico b/SourceCode/Bond/x64/Debug/Res/Alarm_white_128.ico
new file mode 100644
index 0000000..3fa0d49
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/Alarm_white_128.ico
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/Res/Alarm_white_24.ico b/SourceCode/Bond/x64/Debug/Res/Alarm_white_24.ico
new file mode 100644
index 0000000..d22fa68
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/Alarm_white_24.ico
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/Res/close_blcak_24.ico b/SourceCode/Bond/x64/Debug/Res/close_blcak_24.ico
new file mode 100644
index 0000000..163976d
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/close_blcak_24.ico
Binary files differ
--
Gitblit v1.9.3