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)
@@ -276,7 +280,7 @@
               text = _T("ControlJob: None");
            }
            if (m_pMyStatusbar != nullptr) {
               m_pMyStatusbar->setRunTimeText((LPTSTR)(LPCTSTR)text);
               m_pMyStatusbar->setJobText((LPTSTR)(LPCTSTR)text);
               if (cj != nullptr && cj->state() == SERVO::CJState::Paused) {
                  m_pMyStatusbar->setBackgroundColor(STATUSBAR_BK_ALARM);
                  m_pMyStatusbar->setForegroundColor(RGB(0, 0, 0));
@@ -411,6 +415,12 @@
      }
      pBtn->EnableWindow(TRUE);
   }
}
void CServoDlg::AckAlarm(int alarmId)
{
   m_ackAlarms.insert(alarmId);
   RefreshAlarmBadge();
}
void CServoDlg::RaiseTestAlarm()
@@ -582,6 +592,7 @@
   m_pMyStatusbar = new CMyStatusbar();
   m_pMyStatusbar->Create(IDD_STATUSBAR, this);
   m_pMyStatusbar->ShowWindow(SW_SHOW);
   m_pMyStatusbar->setJobText("ControlJob: None");
   LOGI("[BOOT][UI] statusbar created, elapsed=%llu ms", (unsigned long long)(GetTickCount64() - boot_ui_begin));
@@ -615,6 +626,13 @@
         (unsigned long long)(GetTickCount64() - boot_master_begin),
         (unsigned long long)(GetTickCount64() - boot_ui_begin));
      theApp.m_model.loadPortParams();
   }
   // 还原状态栏运行时间显示(避免一直停留在“正在加载历史缓存...”)
   if (m_pMyStatusbar != nullptr) {
      CString strText;
      GetRuntimeFormatText(strText, "");
      m_pMyStatusbar->setRunTimeText((LPTSTR)(LPCTSTR)strText);
   }
@@ -811,6 +829,26 @@
}
void CServoDlg::OnUpdateMenuProjectVarialbleList(CCmdUI* pCmdUI)
{
   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);
}
@@ -1464,18 +1502,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);
}