From 2254c453025136727917601091f14da02af1b548 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期三, 21 一月 2026 15:02:41 +0800
Subject: [PATCH] 1.完善警告,软警告上抛和清除测试;
---
SourceCode/Bond/Servo/resource.h | 4 +
SourceCode/Bond/Servo/Servo.rc | 8 +-
SourceCode/Bond/Servo/AlarmPopupDlg.cpp | 110 ++++++++++++++++++++++++------------
SourceCode/Bond/Servo/ServoDlg.cpp | 36 ++++++++----
SourceCode/Bond/Servo/AlarmPopupDlg.h | 6 ++
SourceCode/Bond/Servo/ServoDlg.h | 4 +
6 files changed, 116 insertions(+), 52 deletions(-)
diff --git a/SourceCode/Bond/Servo/AlarmPopupDlg.cpp b/SourceCode/Bond/Servo/AlarmPopupDlg.cpp
index 5b7bc56..0c64574 100644
--- a/SourceCode/Bond/Servo/AlarmPopupDlg.cpp
+++ b/SourceCode/Bond/Servo/AlarmPopupDlg.cpp
@@ -30,6 +30,8 @@
BEGIN_MESSAGE_MAP(CAlarmPopupDlg, CDialogEx)
ON_BN_CLICKED(IDC_POPUP_BTN_CLOSE, &CAlarmPopupDlg::OnBnClickedClose)
ON_BN_CLICKED(IDC_BUTTON_ALARM_OFF, &CAlarmPopupDlg::OnBnClickedAlarmOff)
+ ON_BN_CLICKED(IDC_BUTTON_PREV, &CAlarmPopupDlg::OnBnClickedPrev)
+ ON_BN_CLICKED(IDC_BUTTON_NEXT, &CAlarmPopupDlg::OnBnClickedNext)
ON_WM_CTLCOLOR()
ON_WM_DESTROY()
END_MESSAGE_MAP()
@@ -151,6 +153,7 @@
void CAlarmPopupDlg::ShowAlarmControls(bool bShow)
{
const int ids[] = {
+ IDC_BUTTON_PREV, IDC_BUTTON_NEXT,
IDC_LABEL_TITLE, IDC_ICON_ALARM, IDC_ICON_TITLE,
IDC_LABEL_LEVEL, IDC_LABEL_NAME,
IDC_LINE1, IDC_BUTTON_SOUND_OFF, IDC_BUTTON_ALARM_OFF,
@@ -165,45 +168,14 @@
void CAlarmPopupDlg::RefreshContent()
{
- auto actives = AlarmManager::getInstance().getActiveAlarms();
- if (!actives.empty()) {
- m_activeAlarm = actives.front();
+ m_activeAlarms = AlarmManager::getInstance().getActiveAlarms();
+ m_activeIndex = 0;
+
+ if (!m_activeAlarms.empty()) {
m_hasActive = true;
-
- AlarmManager& alarmManager = AlarmManager::getInstance();
- const AlarmInfo* info = alarmManager.getAlarmInfoByID(m_activeAlarm.nId);
-
- CString title, level, name, desc;
- level.Format(_T("绛夌骇: %d"), m_activeAlarm.nSeverityLevel);
-
- if (info != nullptr && !info->strAlarmText.empty()) {
- name = CString(info->strAlarmText.c_str());
- }
- else {
- name.Format(_T("ID:%d (%s)"), m_activeAlarm.nId, CString(m_activeAlarm.strDeviceName.c_str()));
- }
-
- if (!m_activeAlarm.strDescription.empty()) {
- desc = CString(m_activeAlarm.strDescription.c_str());
- }
- else if (info != nullptr && !info->strDescription.empty()) {
- desc = CString(info->strDescription.c_str());
- }
- else {
- desc = _T("鏆傛棤鎻忚堪");
- }
-
- title.Format(_T("璁惧:%s 鍗曞厓:%s"),
- CString(m_activeAlarm.strDeviceName.c_str()),
- CString(m_activeAlarm.strUnitName.c_str()));
-
- SetDlgItemText(IDC_LABEL_TITLE, title);
- SetDlgItemText(IDC_LABEL_NAME, name);
- SetDlgItemText(IDC_LABEL_LEVEL, level);
- SetDlgItemText(IDC_LABEL_DESCRIPTION, desc);
+ DisplayActiveAt(m_activeIndex);
ShowAlarmControls(true);
ShowNoAlarmControls(false);
- ShowWindow(SW_SHOW);
}
else {
m_hasActive = false;
@@ -234,6 +206,72 @@
RefreshContent();
}
+void CAlarmPopupDlg::OnBnClickedPrev()
+{
+ if (m_activeIndex > 0) {
+ --m_activeIndex;
+ DisplayActiveAt(m_activeIndex);
+ }
+}
+
+void CAlarmPopupDlg::OnBnClickedNext()
+{
+ if (m_activeIndex + 1 < static_cast<int>(m_activeAlarms.size())) {
+ ++m_activeIndex;
+ DisplayActiveAt(m_activeIndex);
+ }
+}
+
+void CAlarmPopupDlg::DisplayActiveAt(int idx)
+{
+ if (idx < 0 || idx >= static_cast<int>(m_activeAlarms.size())) return;
+
+ m_activeAlarm = m_activeAlarms[idx];
+
+ AlarmManager& alarmManager = AlarmManager::getInstance();
+ const AlarmInfo* info = alarmManager.getAlarmInfoByID(m_activeAlarm.nId);
+
+ CString title, level, name, desc;
+ level.Format(_T("绛夌骇: %d"), m_activeAlarm.nSeverityLevel);
+
+ if (info != nullptr && !info->strAlarmText.empty()) {
+ name = CString(info->strAlarmText.c_str());
+ }
+ else {
+ name.Format(_T("ID:%d (%s)"), m_activeAlarm.nId, CString(m_activeAlarm.strDeviceName.c_str()));
+ }
+
+ if (!m_activeAlarm.strDescription.empty()) {
+ desc = CString(m_activeAlarm.strDescription.c_str());
+ }
+ else if (info != nullptr && !info->strDescription.empty()) {
+ desc = CString(info->strDescription.c_str());
+ }
+ else {
+ desc = _T("鏆傛棤鎻忚堪");
+ }
+
+ title.Format(_T("璁惧:%s 鍗曞厓:%s"),
+ CString(m_activeAlarm.strDeviceName.c_str()),
+ CString(m_activeAlarm.strUnitName.c_str()));
+
+ SetDlgItemText(IDC_LABEL_TITLE, title);
+ SetDlgItemText(IDC_LABEL_NAME, name);
+ SetDlgItemText(IDC_LABEL_LEVEL, level);
+ SetDlgItemText(IDC_LABEL_DESCRIPTION, desc);
+
+ UpdateNavButtons();
+ ShowWindow(SW_SHOW);
+}
+
+void CAlarmPopupDlg::UpdateNavButtons()
+{
+ auto* pPrev = GetDlgItem(IDC_BUTTON_PREV);
+ auto* pNext = GetDlgItem(IDC_BUTTON_NEXT);
+ if (pPrev) pPrev->EnableWindow(m_activeIndex > 0);
+ if (pNext) pNext->EnableWindow(m_activeIndex + 1 < static_cast<int>(m_activeAlarms.size()));
+}
+
HBRUSH CAlarmPopupDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
diff --git a/SourceCode/Bond/Servo/AlarmPopupDlg.h b/SourceCode/Bond/Servo/AlarmPopupDlg.h
index 5ca49a0..9822f18 100644
--- a/SourceCode/Bond/Servo/AlarmPopupDlg.h
+++ b/SourceCode/Bond/Servo/AlarmPopupDlg.h
@@ -43,11 +43,17 @@
afx_msg void OnDestroy();
afx_msg void OnBnClickedClose();
afx_msg void OnBnClickedAlarmOff();
+ afx_msg void OnBnClickedPrev();
+ afx_msg void OnBnClickedNext();
private:
bool m_hasActive;
AlarmData m_activeAlarm;
+ std::vector<AlarmData> m_activeAlarms;
+ int m_activeIndex = 0;
void SetButtonBackgroundColors(bool bMute);
void ShowNoAlarmControls(bool bShow);
void ShowAlarmControls(bool bShow);
+ void UpdateNavButtons();
+ void DisplayActiveAt(int idx);
};
diff --git a/SourceCode/Bond/Servo/Servo.rc b/SourceCode/Bond/Servo/Servo.rc
index 7249afd..e0f3ec0 100644
--- a/SourceCode/Bond/Servo/Servo.rc
+++ b/SourceCode/Bond/Servo/Servo.rc
@@ -841,10 +841,10 @@
BEGIN
PUSHBUTTON "<< 上一条",IDC_BUTTON_PREV,8,224,50,14,NOT WS_VISIBLE
PUSHBUTTON "下一条 >>",IDC_BUTTON_NEXT,62,224,50,14,NOT WS_VISIBLE
- LTEXT "警告",IDC_LABEL_TITLE,27,6,67,17,SS_CENTERIMAGE | NOT WS_VISIBLE
+ LTEXT "警告",IDC_LABEL_TITLE,27,6,212,17,SS_CENTERIMAGE | NOT WS_VISIBLE
ICON "",IDC_ICON_ALARM,29,28,20,20
ICON "",IDC_ICON_TITLE,7,8,20,20,NOT WS_VISIBLE
- LTEXT "等级:--",IDC_LABEL_LEVEL,75,26,118,18
+ LTEXT "等级:--",IDC_LABEL_LEVEL,75,26,161,18
LTEXT "警告名称",IDC_LABEL_NAME,120,45,251,24
PUSHBUTTON "",IDC_POPUP_BTN_CLOSE,354,0,24,22
CONTROL "Custom1",IDC_LINE1,"BYHorizontalLine",WS_TABSTOP,7,78,364,8
@@ -852,7 +852,7 @@
PUSHBUTTON "异常解除",IDC_BUTTON_ALARM_OFF,304,216,68,22,WS_DISABLED
CONTROL "Custom1",IDC_LINE2,"BYHorizontalLine",WS_TABSTOP,7,202,364,8
LTEXT "警告描述:",IDC_LABEL_DESCRIPTION,18,98,329,89
- LTEXT "当前没有警告", IDC_LABEL_NO_ALARM, 18, 98, 329, 89, SS_CENTER | SS_CENTERIMAGE | NOT WS_VISIBLE
+ CTEXT "当前没有警告",IDC_LABEL_NO_ALARM,18,98,329,89,SS_CENTERIMAGE | NOT WS_VISIBLE
END
@@ -1633,6 +1633,8 @@
END
POPUP "测试(&T)"
BEGIN
+ MENUITEM "Test1", ID_MENU_TEST_ALARM_ON
+ MENUITEM "Test2", ID_MENU_TEST_ALARM_OFF
MENUITEM "Message &Set", ID_MENU_TEST_MESSAGE_SET
MENUITEM "Message &Clear", ID_MENU_TEST_MESSAGE_CLEAR
END
diff --git a/SourceCode/Bond/Servo/ServoDlg.cpp b/SourceCode/Bond/Servo/ServoDlg.cpp
index f8a74b8..9d50889 100644
--- a/SourceCode/Bond/Servo/ServoDlg.cpp
+++ b/SourceCode/Bond/Servo/ServoDlg.cpp
@@ -140,6 +140,10 @@
ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SECSTEST, &CServoDlg::OnUpdateMenuFileSecsTest)
ON_COMMAND(ID_MENU_PROJECT_VARIABLE_LIST, &CServoDlg::OnMenuProjectVarialbleList)
ON_UPDATE_COMMAND_UI(ID_MENU_PROJECT_VARIABLE_LIST, &CServoDlg::OnUpdateMenuProjectVarialbleList)
+ ON_COMMAND(ID_MENU_TEST_ALARM_ON, &CServoDlg::OnMenuTestAlarmOn)
+ ON_UPDATE_COMMAND_UI(ID_MENU_TEST_ALARM_ON, &CServoDlg::OnUpdateMenuTestAlarmOn)
+ ON_COMMAND(ID_MENU_TEST_ALARM_OFF, &CServoDlg::OnMenuTestAlarmOff)
+ ON_UPDATE_COMMAND_UI(ID_MENU_TEST_ALARM_OFF, &CServoDlg::OnUpdateMenuTestAlarmOff)
ON_COMMAND(ID_MENU_TEST_MESSAGE_SET, &CServoDlg::OnMenuTestMessageSet)
ON_UPDATE_COMMAND_UI(ID_MENU_TEST_MESSAGE_SET, &CServoDlg::OnUpdateMenuTestMessageSet)
ON_COMMAND(ID_MENU_TEST_MESSAGE_CLEAR, &CServoDlg::OnMenuTestMessageClear)
@@ -815,6 +819,26 @@
pCmdUI->Enable(TRUE);
}
+void CServoDlg::OnMenuTestAlarmOn()
+{
+ RaiseTestAlarm();
+}
+
+void CServoDlg::OnUpdateMenuTestAlarmOn(CCmdUI* pCmdUI)
+{
+ pCmdUI->Enable(TRUE);
+}
+
+void CServoDlg::OnMenuTestAlarmOff()
+{
+ ClearTestAlarm();
+}
+
+void CServoDlg::OnUpdateMenuTestAlarmOff(CCmdUI* pCmdUI)
+{
+ pCmdUI->Enable(TRUE);
+}
+
void CServoDlg::OnMenuTestMessageSet()
{
SERVO::CEquipment* pEquipment = m_pPanelMaster->GetActiveEquipment();
@@ -1464,18 +1488,6 @@
BOOL CServoDlg::PreTranslateMessage(MSG* pMsg)
{
- if (pMsg->message == WM_KEYDOWN) {
- const bool ctrl = (GetKeyState(VK_CONTROL) & 0x8000) != 0;
- const bool alt = (GetKeyState(VK_MENU) & 0x8000) != 0;
- if (ctrl && alt && pMsg->wParam == 'T') {
- RaiseTestAlarm();
- return TRUE;
- }
- if (ctrl && alt && pMsg->wParam == 'Y') {
- ClearTestAlarm();
- return TRUE;
- }
- }
return CDialogEx::PreTranslateMessage(pMsg);
}
diff --git a/SourceCode/Bond/Servo/ServoDlg.h b/SourceCode/Bond/Servo/ServoDlg.h
index ec0cba7..aa16b76 100644
--- a/SourceCode/Bond/Servo/ServoDlg.h
+++ b/SourceCode/Bond/Servo/ServoDlg.h
@@ -113,6 +113,10 @@
afx_msg void OnUpdateMenuFileExit(CCmdUI* pCmdUI);
afx_msg void OnMenuProjectVarialbleList();
afx_msg void OnUpdateMenuProjectVarialbleList(CCmdUI* pCmdUI);
+ afx_msg void OnMenuTestAlarmOn();
+ afx_msg void OnUpdateMenuTestAlarmOn(CCmdUI* pCmdUI);
+ afx_msg void OnMenuTestAlarmOff();
+ afx_msg void OnUpdateMenuTestAlarmOff(CCmdUI* pCmdUI);
afx_msg void OnMenuTestMessageSet();
afx_msg void OnUpdateMenuTestMessageSet(CCmdUI* pCmdUI);
afx_msg void OnMenuTestMessageClear();
diff --git a/SourceCode/Bond/Servo/resource.h b/SourceCode/Bond/Servo/resource.h
index 5eacbaf..9cfbdd4 100644
--- a/SourceCode/Bond/Servo/resource.h
+++ b/SourceCode/Bond/Servo/resource.h
@@ -381,13 +381,15 @@
#define ID_MENU_TOOLS_CLIENT_LIST 32801
#define ID_MENU_WND_TEST_PANEL 32802
#define ID_MENU_WND_PRO_PANEL 32803
+#define ID_MENU_TEST_ALARM_ON 32804
+#define ID_MENU_TEST_ALARM_OFF 32805
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 192
-#define _APS_NEXT_COMMAND_VALUE 32804
+#define _APS_NEXT_COMMAND_VALUE 32806
#define _APS_NEXT_CONTROL_VALUE 1273
#define _APS_NEXT_SYMED_VALUE 101
#endif
--
Gitblit v1.9.3