chenluhua1980
2026-01-21 2254c453025136727917601091f14da02af1b548
1.完善警告,软警告上抛和清除测试;
已修改6个文件
168 ■■■■■ 文件已修改
SourceCode/Bond/Servo/AlarmPopupDlg.cpp 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/AlarmPopupDlg.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.rc 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.cpp 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/resource.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
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);
};
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
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);
}
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();
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