From c3f30f69f3da4e4ed018ba0307e64e327915d4ca Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 22 七月 2025 13:41:24 +0800
Subject: [PATCH] 1. PPID配方绑定界面优化,动态控件获取窗口画笔

---
 SourceCode/Bond/Servo/CRobotTaskDlg.cpp |  112 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 90 insertions(+), 22 deletions(-)

diff --git a/SourceCode/Bond/Servo/CRobotTaskDlg.cpp b/SourceCode/Bond/Servo/CRobotTaskDlg.cpp
index 5bfdfaa..58b6010 100644
--- a/SourceCode/Bond/Servo/CRobotTaskDlg.cpp
+++ b/SourceCode/Bond/Servo/CRobotTaskDlg.cpp
@@ -33,6 +33,7 @@
 	ON_WM_SIZE()
 	ON_WM_ACTIVATE()
 	ON_BN_CLICKED(IDC_BUTTON_ABORT_TASK, &CRobotTaskDlg::OnBnClickedAbortTask)
+	ON_BN_CLICKED(IDC_BUTTON_RESTORE, &CRobotTaskDlg::OnBnClickedRestore)
 END_MESSAGE_MAP()
 
 
@@ -51,15 +52,47 @@
 	if (m_btnAbortTask.m_hWnd) {
 		m_btnAbortTask.ShowWindow(m_pRobotTask ? SW_SHOW : SW_HIDE);
 	}
-
+	if (m_btnRestore.m_hWnd) {
+		m_btnRestore.ShowWindow(m_pRobotTask ? SW_SHOW : SW_HIDE);
+	}
+	
 	if (m_pRobotTask != nullptr) {
-		SERVO::CEquipment* pEq1, * pEq2;
-		pEq1 = theApp.m_model.getMaster().getEquipment(m_pRobotTask->getSrcPosition());
-		pEq2 = theApp.m_model.getMaster().getEquipment(m_pRobotTask->getTarPosition());
+		using namespace SERVO;
 
-		CString strText;
-		strText.Format(_T("%s --> %s"), pEq1->getName().c_str(), pEq2->getName().c_str());
-		SetDlgItemText(IDC_LABEL_GET_PUT, strText);
+		CEquipment* pSrcEq = theApp.m_model.getMaster().getEquipment(pRobotTask->getSrcPosition());
+		CEquipment* pDstEq = theApp.m_model.getMaster().getEquipment(pRobotTask->getTarPosition());
+
+		ROBOT_CMD_PARAM& param = pRobotTask->getRobotCmdParam(ACTION_TRANSFER);
+
+		auto format_time = [](time_t t) -> CString {
+			if (t == 0) {
+				return _T("-");
+			}
+			CTime time(t);
+			return time.Format(_T("%Y-%m-%d %H:%M:%S"));
+		};
+
+		CString strDetail;
+		strDetail.Format(
+			_T("浠诲姟 ID: %s\r\n婧愪綅缃�: %s (P%d)\r\n鐩爣浣嶇疆: %s (P%d)\r\n")
+			_T("婧愭Ы浣�: Slot %d\r\n鐩爣妲戒綅: Slot %d\r\n鎵嬭噦缂栧彿: Arm %d\r\n浠诲姟鐘舵��: %s\r\n")
+			_T("鍒涘缓鏃堕棿: %s\r\n鍙栫墖鏃堕棿: %s\r\n鏀剧墖鏃堕棿: %s\r\n缁撴潫鏃堕棿: %s"),
+			pRobotTask->getId().c_str(),
+			pSrcEq ? pSrcEq->getName().c_str() : _T("鏈煡"),
+			param.getPosition,
+			pDstEq ? pDstEq->getName().c_str() : _T("鏈煡"),
+			param.putPosition,
+			param.getSlotNo,
+			param.putSlotNo,
+			param.armNo,
+			pRobotTask->getStateString(),
+			format_time(pRobotTask->getCreateTime()),
+			format_time(pRobotTask->getFetchoutTime()),
+			format_time(pRobotTask->getStoredTime()),
+			format_time(pRobotTask->getFinishTime())
+		);
+
+		SetDlgItemText(IDC_LABEL_GET_PUT, strDetail);
 	}
 }
 
@@ -68,14 +101,22 @@
 	CDialogEx::OnInitDialog();
 
 	// TODO:  鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
-	// 鍒涘缓鈥滃仠姝换鍔♀�濇寜閽�
+	// 鍒涘缓鈥滃仠姝换鍔♀�濇寜閽拰鈥滄挙鍥炩�濇寜閽�
 	m_btnAbortTask.Create(_T("鍋滄浠诲姟"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 100, 30), this, IDC_BUTTON_ABORT_TASK);
+	m_btnRestore.Create(_T("鎾ゅ洖"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 100, 30), this, IDC_BUTTON_RESTORE);
 
 	// 鍔ㄦ�佹寜閽垱寤哄悗璁剧疆瀛椾綋
 	if (m_fontButton.GetSafeHandle() == nullptr) {
 		m_fontButton.CreatePointFont(110, _T("寰蒋闆呴粦")); // 鎴� "Segoe UI"
 	}
 	m_btnAbortTask.SetFont(&m_fontButton);
+	m_btnRestore.SetFont(&m_fontButton);
+
+	// 璁剧疆 LABEL 鎺т欢鐨勫瓧浣�
+	if (m_fontDetail.GetSafeHandle() == nullptr) {
+		m_fontDetail.CreatePointFont(100, _T("寰蒋闆呴粦"));
+	}
+	GetDlgItem(IDC_LABEL_GET_PUT)->SetFont(&m_fontDetail);
 
 	return TRUE;  // return TRUE unless you set the focus to a control
 				  // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
@@ -99,7 +140,11 @@
 
 	// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
 	if (m_fontButton.GetSafeHandle()) {
-		::DeleteObject(m_fontButton.Detach());
+		m_fontButton.DeleteObject();
+	}
+
+	if (m_fontDetail.GetSafeHandle()) {
+		m_fontDetail.DeleteObject();
 	}
 }
 
@@ -131,27 +176,50 @@
 		(rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
 
 	pItem = GetDlgItem(IDC_LABEL_GET_PUT);
-	pItem->GetClientRect(&rcItem);
-	pItem->MoveWindow(12, 
-		12, rcItem.Width(), rcItem.Height());
+	if (pItem && pItem->m_hWnd) {
+		const int nLabelX = 12;
+		const int nLabelY = 12;
+		const int nLabelWidth = rcClient.Width() - 24;
+		const int nLabelHeight = rcClient.Height() - 24;
+
+		pItem->MoveWindow(nLabelX, nLabelY, nLabelWidth, nLabelHeight);
+	}
 
 	// 璁剧疆鈥滃仠姝换鍔♀�濇寜閽綅缃紙鍙充笅瑙掞級
+	const int nBtnWidth = 100;
+	const int nBtnHeight = 28;
+	const int nMargin = 12;
+	const int nMargin2 = 8;
+	const int x = rcClient.right - nBtnWidth - nMargin;
+	int y = rcClient.bottom - nMargin;
 	if (m_btnAbortTask.m_hWnd != nullptr) {
-		const int nBtnWidth = 100;
-		const int nBtnHeight = 28;
-		const int nMargin = 12;
+		m_btnAbortTask.MoveWindow(x, y - nBtnHeight, nBtnWidth, nBtnHeight);
+		y -= nBtnHeight;
+		y -= nMargin2;
+	}
 
-		const int nPosX = rcClient.right - nBtnWidth - nMargin;
-		const int nPosY = rcClient.bottom - nBtnHeight - nMargin;
-
-		m_btnAbortTask.MoveWindow(nPosX, nPosY, nBtnWidth, nBtnHeight);
+	// 璁剧疆鈥滃仠姝换鍔♀�濇寜閽綅缃紙鍙充笅瑙掞級
+	if (m_btnRestore.m_hWnd != nullptr) {
+		m_btnRestore.MoveWindow(x, y - nBtnHeight, nBtnWidth, nBtnHeight);
 	}
 }
 
 void CRobotTaskDlg::OnBnClickedAbortTask()
 {
-	if (m_pRobotTask) {
-		m_pRobotTask->abort();
-		AfxMessageBox(_T("浠诲姟宸插仠姝€��"));
+	int ret = AfxMessageBox(_T("纭瑕佺粓姝㈠綋鍓嶆惉閫佷换鍔″悧?闄ら潪鍙戠敓浜嗗紓甯革紝鍚﹀垯璇蜂笉瑕佹墜鍔ㄧ粓姝换鍔★紒"), MB_OKCANCEL | MB_ICONEXCLAMATION);
+	if (ret != IDOK) {
+		return;
 	}
+
+	theApp.m_model.getMaster().abortCurrentTask();
+}
+
+void CRobotTaskDlg::OnBnClickedRestore()
+{
+	int ret = AfxMessageBox(_T("鐗╂枡灏嗕細琚惉杩愬洖鍘熶綅缃紝纭瑕佸洖鎾ゅ綋鍓嶄换鍔″悧锛熼櫎闈炲彂鐢熶簡寮傚父锛屽惁鍒欒涓嶈鍥炴挙浠诲姟锛�"), MB_OKCANCEL | MB_ICONEXCLAMATION);
+	if (ret != IDOK) {
+		return;
+	}
+
+	theApp.m_model.getMaster().restoreCurrentTask();
 }
\ No newline at end of file

--
Gitblit v1.9.3