chenluhua1980
2026-01-19 44360bc2cdeee16be72f9cc4bfb42e0ac26b5b44
SourceCode/Bond/Servo/CPagePortProperty.cpp
@@ -9,6 +9,9 @@
#include "MsgDlg.h"
#define DELAY_CLOSE      2000
// CPagePortProperty 对话框
IMPLEMENT_DYNAMIC(CPagePortProperty, CHMPropertyPage)
@@ -57,7 +60,7 @@
   CComboBox* pComboBox;
   std::string strTemp;
   ((CButton*)GetDlgItem(IDC_CHECK_ENABLE))->SetCheck(m_pPort->isEnable() ? BST_CHECKED : BST_UNCHECKED);
   pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_PORT_TYPE);
   for (int i = 1; i <= 7; i++) {
      pComboBox->InsertString(i - 1, SERVO::CLoadPort::getPortTypeDescription((SERVO::PortType)i, strTemp).c_str());
@@ -69,7 +72,7 @@
   pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_PORT_MODE);
   for (int i = 0; i <= 5; i++) {
      pComboBox->InsertString(i - 1, SERVO::CLoadPort::getPortModeDescription((SERVO::PortMode)i, strTemp).c_str());
      pComboBox->InsertString(i, SERVO::CLoadPort::getPortModeDescription((SERVO::PortMode)i, strTemp).c_str());
   }
   int portMode = (int)m_pPort->getPortMode();
   if (0 <= portMode && portMode <= 5) {
@@ -130,44 +133,50 @@
   // TODO: 在此处添加消息处理程序代码
}
int g_nMsgDlgShow = 0;
void CPagePortProperty::OnBnClickedCheckEnable()
{
   BOOL bCheck = ((CButton*)GetDlgItem(IDC_CHECK_ENABLE))->GetCheck() == BST_CHECKED;
   EnableCtrls(bCheck);
#ifdef _LOCAL
   ASSERT(m_pPort != nullptr);
   theApp.m_model.setPortEnable(m_pPort->getIndex(), bCheck);
#else
   // enable port
   g_nMsgDlgShow = 0;
   CMsgDlg msgDlg("请等待", "正在操作,请等待...");
   ASSERT(m_pPort != nullptr);
   m_pPort->eablePort(bCheck, [&](int code) -> int {
      Sleep(100);
      CString strMsg;
      if (code == WOK) {
         LOGI("%s Port 成功.", bCheck ? _T("enable") : _T("disable"));
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("%s Port 成功."), bCheck ? _T("enable") : _T("disable"));
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_SUCCEED);
         msgDlg.SetTitle(_T("操作成功"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(0);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("%s Port 成功."), bCheck ? _T("enable") : _T("disable"));
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_SUCCEED);
            msgDlg.SetTitle(_T("操作成功"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(0);
         }
      }
      else {
         LOGI("%s Port 失败,code:%d", bCheck ? _T("enable") : _T("disable"), code);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("%s Port 失败,code:%d"), bCheck ? _T("enable") : _T("disable"), code);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_ERROR);
         msgDlg.SetTitle(_T("操作失败"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(-1);
         
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("%s Port 失败,code:%d"), bCheck ? _T("enable") : _T("disable"), code);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_ERROR);
            msgDlg.SetTitle(_T("操作失败"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(-1);
         }
         // 还原控件状态
         EnableCtrls(!bCheck);
         ((CButton*)GetDlgItem(IDC_CHECK_ENABLE))->SetCheck(!bCheck ? BST_CHECKED : BST_UNCHECKED);
@@ -177,15 +186,22 @@
      });
   msgDlg.DoModal();
   g_nMsgDlgShow = 1;
#endif
}
void CPagePortProperty::OnCbnSelchangeComboPortType()
{
   g_nMsgDlgShow = 0;
   CMsgDlg msgDlg("请等待", "正在操作,请等待...");
   msgDlg.SetData((DWORD_PTR)this);
   // 修改为只保存在本地配置
   ASSERT(m_pPort != nullptr);
   int index = ((CComboBox*)GetDlgItem(IDC_COMBO_PORT_TYPE))->GetCurSel();
   theApp.m_model.setPortType(m_pPort->getIndex(), SERVO::PortType(index + 1));
   /*
   m_pPort->setPortType(SERVO::PortType(index + 1), [&](int code) -> int {
      Sleep(100);
      CString strMsg;
@@ -193,36 +209,41 @@
      if (code == WOK) {
         LOGI("设置Port Type(%d)成功.", index + 1);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("设置Port Type(%d)成功"), index + 1);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_SUCCEED);
         msgDlg.SetTitle(_T("操作成功"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(0);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("设置Port Type(%d)成功"), index + 1);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_SUCCEED);
            msgDlg.SetTitle(_T("操作成功"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(0);
         }
      }
      else {
         LOGI("设置Port Type(%d)失败,code:%d", index + 1, code);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("设置Port Type(%d)失败,code:%d"), index + 1, code);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_ERROR);
         msgDlg.SetTitle(_T("操作失败"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(-1);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("设置Port Type(%d)失败,code:%d"), index + 1, code);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_ERROR);
            msgDlg.SetTitle(_T("操作失败"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(-1);
         }
      }
      return 0;
   });
   msgDlg.DoModal();
   g_nMsgDlgShow = 1;
   */
}
void CPagePortProperty::OnCbnSelchangeComboPortMode()
{
   g_nMsgDlgShow = 0;
   CMsgDlg msgDlg("请等待", "正在操作,请等待...");
   msgDlg.SetData((DWORD_PTR)this);
@@ -235,126 +256,142 @@
      if (code == WOK) {
         LOGI("设置Port Mode(%d)成功.", index);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("设置Port Mode(%d)成功"), index);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_SUCCEED);
         msgDlg.SetTitle(_T("操作成功"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(0);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("设置Port Mode(%d)成功"), index);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_SUCCEED);
            msgDlg.SetTitle(_T("操作成功"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(0);
         }
      }
      else {
         LOGI("设置Port Mode(%d)失败,code:%d", index, code);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("设置Port Mode(%d)失败,code:%d"), index, code);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_ERROR);
         msgDlg.SetTitle(_T("操作失败"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(-1);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("设置Port Mode(%d)失败,code:%d"), index, code);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_ERROR);
            msgDlg.SetTitle(_T("操作失败"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(-1);
         }
      }
      return 0;
      });
   msgDlg.DoModal();
   g_nMsgDlgShow = 1;
}
void CPagePortProperty::OnCbnSelchangeComboPortCassertType()
{
   // 由原来的更新到EFEM, 修改为保存到本地ini文件
   ASSERT(m_pPort != nullptr);
   int index = ((CComboBox*)GetDlgItem(IDC_COMBO_PORT_CASSERT_TYPE))->GetCurSel();
   theApp.m_model.setPortCassetteType(m_pPort->getIndex(), SERVO::CassetteType(index + 1));
   g_nMsgDlgShow = 0;
   CMsgDlg msgDlg("请等待", "正在操作,请等待...");
   msgDlg.SetData((DWORD_PTR)this);
   ASSERT(m_pPort != nullptr);
   int index = ((CComboBox*)GetDlgItem(IDC_COMBO_PORT_CASSERT_TYPE))->GetCurSel();
   m_pPort->setPortMode(SERVO::PortMode(index + 1), [&](int code) -> int {
   m_pPort->setCassetteType(SERVO::CassetteType(index + 1), [&](int code) -> int {
      Sleep(100);
      CString strMsg;
      if (code == WOK) {
         LOGI("设置Cassette type(%d)成功.", index + 1);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("设置Cassette type(%d)成功"), index + 1);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_SUCCEED);
         msgDlg.SetTitle(_T("操作成功"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(0);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("设置Cassette type(%d)成功"), index + 1);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_SUCCEED);
            msgDlg.SetTitle(_T("操作成功"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(0);
         }
      }
      else {
         LOGI("设置Cassette type(%d)失败,code:%d", index + 1, code);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("设置Cassette type(%d)失败,code:%d"), index + 1, code);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_ERROR);
         msgDlg.SetTitle(_T("操作失败"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(-1);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("设置Cassette type(%d)失败,code:%d"), index + 1, code);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_ERROR);
            msgDlg.SetTitle(_T("操作失败"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(-1);
         }
      }
      return 0;
      });
   msgDlg.DoModal();
   g_nMsgDlgShow = 1;
}
void CPagePortProperty::OnCbnSelchangeComboPortTransferMode()
{
   // TODO: 在此添加控件通知处理程序代码
   g_nMsgDlgShow = 0;
   CMsgDlg msgDlg("请等待", "正在操作,请等待...");
   msgDlg.SetData((DWORD_PTR)this);
   ASSERT(m_pPort != nullptr);
   int index = ((CComboBox*)GetDlgItem(IDC_COMBO_PORT_TRANSFER_MODE))->GetCurSel();
   m_pPort->setPortMode(SERVO::PortMode(index + 1), [&](int code) -> int {
   m_pPort->setTransferMode(SERVO::TransferMode(index + 1), [&](int code) -> int {
      Sleep(100);
      CString strMsg;
      if (code == WOK) {
         LOGI("设置Transfer mode(%d)成功.", index + 1);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("设置Transfer mode(%d)成功"), index + 1);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_SUCCEED);
         msgDlg.SetTitle(_T("操作成功"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(0);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("设置Transfer mode(%d)成功"), index + 1);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_SUCCEED);
            msgDlg.SetTitle(_T("操作成功"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(0);
         }
      }
      else {
         LOGI("设置Transfer mode(%d)失败,code:%d", index + 1, code);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("设置Transfer mode(%d)失败,code:%d"), index + 1, code);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_ERROR);
         msgDlg.SetTitle(_T("操作失败"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(-1);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("设置Transfer mode(%d)失败,code:%d"), index + 1, code);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_ERROR);
            msgDlg.SetTitle(_T("操作失败"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(-1);
         }
      }
      return 0;
      });
   msgDlg.DoModal();
   g_nMsgDlgShow = 1;
}
void CPagePortProperty::OnBnClickedCheckAutoChange()
{
   BOOL bCheck = ((CButton*)GetDlgItem(IDC_CHECK_AUTO_CHANGE))->GetCheck() == BST_CHECKED;
   EnableCtrls(bCheck);
   // enable port
   g_nMsgDlgShow = 0;
   CMsgDlg msgDlg("请等待", "正在操作,请等待...");
   ASSERT(m_pPort != nullptr);
@@ -365,26 +402,28 @@
      if (code == WOK) {
         LOGI("%s Auto Change 成功.", bCheck ? _T("enable") : _T("disable"));
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("%s Auto Change 成功."), bCheck ? _T("enable") : _T("disable"));
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_SUCCEED);
         msgDlg.SetTitle(_T("操作成功"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(0);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("%s Auto Change 成功."), bCheck ? _T("enable") : _T("disable"));
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_SUCCEED);
            msgDlg.SetTitle(_T("操作成功"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(0);
         }
      }
      else {
         LOGI("%s Auto Change 失败,code:%d", bCheck ? _T("enable") : _T("disable"), code);
         msgDlg.DelayClose(3000);
         strMsg.Format(_T("%s Auto Change 失败,code:%d"), bCheck ? _T("enable") : _T("disable"), code);
         msgDlg.DelayClose(3000);
         msgDlg.SetIcon(MSG_BOX_ERROR);
         msgDlg.SetTitle(_T("操作失败"));
         msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
         msgDlg.SetMarquee(FALSE, 0);
         msgDlg.SetCompleteCode(-1);
         if (g_nMsgDlgShow == 0 && ::IsWindow(msgDlg.GetSafeHwnd())) {
            strMsg.Format(_T("%s Auto Change 失败,code:%d"), bCheck ? _T("enable") : _T("disable"), code);
            msgDlg.DelayClose(DELAY_CLOSE);
            msgDlg.SetIcon(MSG_BOX_ERROR);
            msgDlg.SetTitle(_T("操作失败"));
            msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg);
            msgDlg.SetMarquee(FALSE, 0);
            msgDlg.SetCompleteCode(-1);
         }
         // 还原控件状态
         ((CButton*)GetDlgItem(IDC_CHECK_AUTO_CHANGE))->SetCheck(!bCheck ? BST_CHECKED : BST_UNCHECKED);
@@ -394,14 +433,12 @@
      });
   msgDlg.DoModal();
   g_nMsgDlgShow = 1;
}
void CPagePortProperty::EnableCtrls(BOOL bEnable)
{
   GetDlgItem(IDC_COMBO_PORT_TYPE)->EnableWindow(bEnable);
   GetDlgItem(IDC_COMBO_PORT_MODE)->EnableWindow(bEnable);
   GetDlgItem(IDC_COMBO_PORT_CASSERT_TYPE)->EnableWindow(bEnable);
   GetDlgItem(IDC_COMBO_PORT_TRANSFER_MODE)->EnableWindow(bEnable);
   GetDlgItem(IDC_CHECK_AUTO_CHANGE)->EnableWindow(bEnable);
}