From f6b143d9a6f62875e62dae61a0af061139d7a156 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期一, 21 七月 2025 17:23:17 +0800
Subject: [PATCH] 1. 添加新建配方和部分编辑配方绑定的功能
---
SourceCode/Bond/Servo/RecipeDeviceBindDlg.cpp | 146 ++++++++++++++++++++++++++++++++++++++----------
1 files changed, 114 insertions(+), 32 deletions(-)
diff --git a/SourceCode/Bond/Servo/RecipeDeviceBindDlg.cpp b/SourceCode/Bond/Servo/RecipeDeviceBindDlg.cpp
index 60555a8..4d3440d 100644
--- a/SourceCode/Bond/Servo/RecipeDeviceBindDlg.cpp
+++ b/SourceCode/Bond/Servo/RecipeDeviceBindDlg.cpp
@@ -28,6 +28,8 @@
CRecipeDeviceBindDlg::CRecipeDeviceBindDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_RECIPE_DEVICE_BIND, pParent)
+ , m_strPPID(_T(""))
+ , m_strDesc(_T(""))
{
}
@@ -36,15 +38,26 @@
{
}
-void CRecipeDeviceBindDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialogEx::DoDataExchange(pDX);
+const RecipeInfo& CRecipeDeviceBindDlg::GetRecipeInfo() const {
+ return m_recipe;
}
+void CRecipeDeviceBindDlg::SetRecipeInfo(const RecipeInfo& info)
+{
+ m_recipe = info;
+}
+
+void CRecipeDeviceBindDlg::DoDataExchange(CDataExchange* pDX)
+{
+ CDialogEx::DoDataExchange(pDX);
+ DDX_Text(pDX, IDC_EDIT_PPID, m_strPPID);
+ DDX_Text(pDX, IDC_EDIT_DESC, m_strDesc);
+}
BEGIN_MESSAGE_MAP(CRecipeDeviceBindDlg, CDialogEx)
ON_WM_CLOSE()
ON_WM_SIZE()
+ ON_BN_CLICKED(IDOK, &CRecipeDeviceBindDlg::OnBnClickedOk)
END_MESSAGE_MAP()
@@ -54,42 +67,74 @@
{
CDialogEx::OnInitDialog();
- // TODO: 鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
- // 璁剧疆鍥哄畾澶у皬锛堜緥濡� 600x400锛�
- SetWindowPos(nullptr, 0, 0, 600, 400, SWP_NOMOVE | SWP_NOZORDER);
+ // TODO: 鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+ if (m_recipe.vecDeviceList.empty()) {
+ SetWindowText(_T("鏂板缓閰嶆柟"));
- // 鍒涘缓鎺т欢
- const int totalControlWidth = 340;
- CRect clientRect;
- GetClientRect(&clientRect);
- int xStart = (clientRect.Width() - totalControlWidth) / 2;
+ // 璁剧疆鍥哄畾澶у皬锛堜緥濡� 600x400锛�
+ SetWindowPos(nullptr, 0, 0, 600, 400, SWP_NOMOVE | SWP_NOZORDER);
- const int nRowHeight = 30;
- const int yStart = 30; // 椤堕儴璧峰楂樺害
+ // 鍒涘缓鎺т欢
+ const int totalControlWidth = 340;
+ CRect clientRect;
+ GetClientRect(&clientRect);
+ int xStart = (clientRect.Width() - totalControlWidth) / 2;
- const int nRowCount = static_cast<int>(g_vecBindDevices.size());
- for (int i = 0; i < nRowCount; ++i) {
- int y = yStart + i * nRowHeight;
- const auto& meta = g_vecBindDevices[i];
+ const int nRowHeight = 30;
+ const int yStart = 30; // 椤堕儴璧峰楂樺害
- CEdit* pEditID = new CEdit();
- pEditID->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(xStart, y, xStart + 100, y + 25), this, IDC_EDIT_DEVICEID_BASE + i);
+ const int nRowCount = static_cast<int>(g_vecBindDevices.size());
+ for (int i = 0; i < nRowCount; ++i) {
+ int y = yStart + i * nRowHeight;
+ const auto& meta = g_vecBindDevices[i];
- CString strID;
- strID.Format(_T("%d"), meta.nDeviceID);
- pEditID->SetWindowText(strID);
- pEditID->SetReadOnly(TRUE); // 璁惧ID鍙
+ CEdit* pEditID = new CEdit();
+ pEditID->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(xStart, y, xStart + 100, y + 25), this, IDC_EDIT_DEVICEID_BASE + i);
- CEdit* pEditName = new CEdit();
- pEditName->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(xStart + 110, y, xStart + 210, y + 25), this, IDC_EDIT_DEVICENAME_BASE + i);
- pEditName->SetWindowText(CA2T(meta.strDeviceName));
- pEditName->SetReadOnly(TRUE); // 璁惧鍚嶇О鍙
+ CString strID;
+ strID.Format(_T("%d"), meta.nDeviceID);
+ pEditID->SetWindowText(strID);
+ pEditID->SetReadOnly(TRUE); // 璁惧ID鍙
- CComboBox* pCombo = new CComboBox();
- pCombo->Create(WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, CRect(xStart + 220, y, xStart + 340, y + 300), this, IDC_COMBO_RECIPEID_BASE + i);
+ CEdit* pEditName = new CEdit();
+ pEditName->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(xStart + 110, y, xStart + 210, y + 25), this, IDC_EDIT_DEVICENAME_BASE + i);
+ pEditName->SetWindowText(CA2T(meta.strDeviceName));
+ pEditName->SetReadOnly(TRUE); // 璁惧鍚嶇О鍙
- // 娣诲姞閫夐」鍒� ComboBox
- m_vecDevices.push_back({ pEditID, pEditName, pCombo });
+ CComboBox* pCombo = new CComboBox();
+ pCombo->Create(WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, CRect(xStart + 220, y, xStart + 340, y + 300), this, IDC_COMBO_RECIPEID_BASE + i);
+
+ // 娣诲姞閫夐」鍒� ComboBox
+ m_vecDevices.push_back({ pEditID, pEditName, pCombo });
+ }
+ }
+ else {
+ SetWindowText(_T("缂栬緫閰嶆柟"));
+
+ m_strPPID = CA2T(m_recipe.strPPID.c_str());
+ m_strDesc = CA2T(m_recipe.strDescription.c_str());
+ UpdateData(FALSE);
+
+ // 璁剧疆璁惧琛屾暟鎹�
+ for (size_t i = 0; i < m_recipe.vecDeviceList.size() && i < m_vecDevices.size(); ++i) {
+ const DeviceRecipe& d = m_recipe.vecDeviceList[i];
+ CString str;
+ // 璁剧疆璁惧ID鍜屽悕绉�
+ str.Format(_T("%d"), d.nDeviceID);
+ m_vecDevices[i].editDeviceID->SetWindowText(str);
+
+ str.Format(_T("%s"), d.strDeviceName.c_str());
+ m_vecDevices[i].editDeviceName->SetWindowText(str);
+
+ /*ComboBox閫夋嫨閰嶆柟ID锛屽悗闈㈤渶瑕佷慨鏀�****/
+ //int nCount = m_vecDevices[i].comboRecipeID->GetCount();
+ //for (int idx = 0; idx < nCount; ++idx) {
+ // if ((int)m_vecDevices[i].comboRecipeID->GetItemData(idx) == d.nRecipeID) {
+ // m_vecDevices[i].comboRecipeID->SetCurSel(idx);
+ // break;
+ // }
+ //}
+ }
}
return TRUE; // return TRUE unless you set the focus to a control
@@ -124,4 +169,41 @@
CDialogEx::OnSize(nType, cx, cy);
// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
-}
\ No newline at end of file
+}
+
+void CRecipeDeviceBindDlg::OnBnClickedOk()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ UpdateData(TRUE);
+
+ // 鏀堕泦鎵�鏈夎澶囨槧灏�
+ m_recipe.vecDeviceList.clear();
+ for (const auto& dev : m_vecDevices) {
+ DeviceRecipe info;
+ CString strID, strName;
+ dev.editDeviceID->GetWindowText(strID);
+ dev.editDeviceName->GetWindowText(strName);
+
+ int sel = dev.comboRecipeID->GetCurSel();
+ info.nRecipeID = -1;
+ if (sel != CB_ERR) {
+ info.nRecipeID = (int)dev.comboRecipeID->GetItemData(sel);
+ }
+ info.nDeviceID = _ttoi(strID);
+ info.strDeviceName = CT2A(strName);
+
+ m_recipe.vecDeviceList.push_back(info);
+ }
+
+ // 妫�鏌� PPID 鏄惁涓虹┖
+ if (m_strPPID.IsEmpty()) {
+ AfxMessageBox(_T("閰嶆柟 PPID 涓嶈兘涓虹┖"));
+ return;
+ }
+
+ // PPID鍜屾弿杩�
+ m_recipe.strPPID = CT2A(m_strPPID);
+ m_recipe.strDescription = CT2A(m_strDesc);
+
+ CDialogEx::OnOK();
+}
--
Gitblit v1.9.3