LAPTOP-SNT8I5JK\Boounion
2025-02-10 02c39baf5375f1588e9c20dc06d89a0605077672
SourceCode/Bond/Servo/ServoDlg.cpp
@@ -9,6 +9,7 @@
#include "Common.h"
#include "Log.h"
#include "SecsTestDlg.h"
#include "AlarmManager.h"
#include <chrono>
#include <thread>
#include <cmath>
@@ -34,6 +35,10 @@
#define INDICATE_VACUUM_BAKE   11
#define INDICATE_BAKE_COOLING   12
#define INDICATE_MEASUREMENT   13
/* 创建终端的定时器 */
#define TIMER_ID_CREATE_TERMINAL      1
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
@@ -82,6 +87,8 @@
   m_bShowLogWnd = FALSE;
   m_bIsRobotMoving = FALSE;
   m_pLogDlg = nullptr;
   m_pTerminalDisplayDlg = nullptr;
   m_pObserver = nullptr;
}
void CServoDlg::DoDataExchange(CDataExchange* pDX)
@@ -114,11 +121,42 @@
   ON_UPDATE_COMMAND_UI(ID_MENU_WND_LOG, &CServoDlg::OnUpdateMenuWndLog)
   ON_COMMAND(ID_MENU_HELP_ABOUT, &CServoDlg::OnMenuHelpAbout)
   ON_WM_INITMENUPOPUP()
   ON_WM_TIMER()
   ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
// CServoDlg 消息处理程序
void CServoDlg::InitRxWindows()
{
   /* code */
   // 订阅数据
   IRxWindows* pRxWindows = RX_GetRxWindows();
   pRxWindows->enableLog(5);
   if (m_pObserver == NULL) {
      m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void {
         // onNext
         pAny->addRef();
         int code = pAny->getCode();
         if (RX_HSMS_TERMINAL_TEXT == code) {
            const char* pszText;
            if (pAny->getStringValue("text", pszText)) {
               ShowTerminalText(pszText);
            }
         }
         pAny->release();
      }, [&]() -> void {
         // onComplete
      }, [&](IThrowable* pThrowable) -> void {
         // onErrorm
         pThrowable->printf();
      });
      theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())
         ->subscribe(m_pObserver);
   }
}
BOOL CServoDlg::OnInitDialog()
{
@@ -251,6 +289,8 @@
   theApp.m_model.init();
   SetTimer(TIMER_ID_CREATE_TERMINAL, 3000, nullptr);
   InitRxWindows();
   UpdateLogBtn();
   Resize();
   return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
@@ -461,10 +501,21 @@
      delete m_pLogDlg;
      m_pLogDlg = nullptr;
   }
   if (m_pTerminalDisplayDlg != nullptr) {
      m_pTerminalDisplayDlg->DestroyWindow();
      delete m_pTerminalDisplayDlg;
      m_pTerminalDisplayDlg = nullptr;
   }
   if (m_hbrBkgnd != nullptr) {
      ::DeleteObject(m_hbrBkgnd);
   }
   if (m_pObserver != nullptr) {
      m_pObserver->unsubscribe();
      m_pObserver = NULL;
   }
}
void CServoDlg::OnBnClickedButtonLog()
@@ -654,6 +705,27 @@
   CDialogEx::OnMove(x, y);
}
void CServoDlg::ShowTerminalText(const char* pszText, unsigned int duration/* = -1*/)
{
   ASSERT(m_pTerminalDisplayDlg);
   m_pTerminalDisplayDlg->ShowText(pszText, duration);
}
void CServoDlg::OnTimer(UINT_PTR nIDEvent)
{
   if (TIMER_ID_CREATE_TERMINAL == nIDEvent) {
      // 预先创建终端窗口
      KillTimer(TIMER_ID_CREATE_TERMINAL);
      char szBuffer[MAX_PATH];
      sprintf_s(szBuffer, MAX_PATH, "%s\\RES\\TeminalMsg.html", (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
      m_pTerminalDisplayDlg = new CTerminalDisplayDlg();
      m_pTerminalDisplayDlg->SetTemplateHtml(szBuffer);
      m_pTerminalDisplayDlg->Create(IDD_DIALOG_TERMINAL_DISPLAY, this);
   }
   CDialogEx::OnTimer(nIDEvent);
}
BOOL CServoDlg::OnEraseBkgnd(CDC* pDC)
{