From 2f0684bf01209b9ddfdc53da44fb85f4db6db326 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 06 六月 2025 15:56:02 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/Servo/CEquipmentPage1.cpp |   91 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 90 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEquipmentPage1.cpp b/SourceCode/Bond/Servo/CEquipmentPage1.cpp
index a6a80f4..2012b34 100644
--- a/SourceCode/Bond/Servo/CEquipmentPage1.cpp
+++ b/SourceCode/Bond/Servo/CEquipmentPage1.cpp
@@ -9,6 +9,10 @@
 
 // CEquipmentPage1 瀵硅瘽妗�
 
+#define SIGNAL_GRID_ROWS 8
+#define SIGNAL_GRID_COLS 8
+#define SIGNAL_GRID_SIZE (SIGNAL_GRID_ROWS * SIGNAL_GRID_COLS)
+
 IMPLEMENT_DYNAMIC(CEquipmentPage1, CHMPropertyPage)
 
 CEquipmentPage1::CEquipmentPage1(CWnd* pParent /*=nullptr*/)
@@ -28,6 +32,9 @@
 
 
 BEGIN_MESSAGE_MAP(CEquipmentPage1, CHMPropertyPage)
+	ON_WM_CTLCOLOR()
+	ON_WM_DESTROY()
+	ON_WM_SIZE()
 END_MESSAGE_MAP()
 
 
@@ -35,7 +42,6 @@
 void CEquipmentPage1::OnApply()
 {
 	__super::OnApply();
-	AfxMessageBox("CEquipmentPage1::OnApply()");
 }
 
 void CEquipmentPage1::setEquipment(SERVO::CEquipment* pEquipment)
@@ -43,12 +49,95 @@
 	m_pEquipment = pEquipment;
 }
 
+void CEquipmentPage1::InitSignalList()
+{
+	m_vSignalList.clear();
+
+	// 鍐欏叆璁惧鐨勪俊鍙峰悕绉帮紝榛樿鐘舵�佷负 false锛岄粯璁ら兘鍙偣鍑伙紙杈撳嚭锛�
+	m_vSignalList.push_back({ _T("Upstream\r\nInline"), false, true });
+	m_vSignalList.push_back({ _T("Upstream\r\nTrouble"), false, true });
+	m_vSignalList.push_back({ _T("Interlock"), false, false });
+	m_vSignalList.push_back({ _T("Send\r\nAble"), false, true });
+	m_vSignalList.push_back({ _T("Receive\r\nStart"), false, false });
+	m_vSignalList.push_back({ _T("Job\r\nTransfer"), false, false });
+	m_vSignalList.push_back({ _T("Receive\r\nComplete"), false, false });
+	m_vSignalList.push_back({ _T("Shutter\r\nState"), false, false });
+	// TODO: 娣诲姞鏇村淇″彿锛屾渶澶� 64 涓�
+
+	// 琛ラ綈鑷� SIGNAL_GRID_SIZE 椤�
+	while (m_vSignalList.size() < SIGNAL_GRID_SIZE) {
+		m_vSignalList.push_back({ _T(""), false, false });
+	}
+}
+
+void CEquipmentPage1::LoadDeviceSignals()
+{
+	m_ctrlSignalPanel.SetGridSize(SIGNAL_GRID_ROWS, SIGNAL_GRID_COLS);
+
+	for (int i = 0; i < SIGNAL_GRID_SIZE; ++i) {
+		int row = i / SIGNAL_GRID_COLS;
+		int col = i % SIGNAL_GRID_COLS;
+
+		const auto& signal = m_vSignalList[i];
+
+		// 鏄剧ず鐘舵�侊紙鐢ㄩ鑹茶〃绀� ON/OFF锛�
+		m_ctrlSignalPanel.SetSlotText(row, col, signal.strName);
+		m_ctrlSignalPanel.SetSlotStatus(row, col, signal.bCurrentState);
+		m_ctrlSignalPanel.SetSlotClickable(row, col, signal.bClickable);
+		m_ctrlSignalPanel.SetTextFont(_T("Microsoft YaHei"), 10);
+	}
+
+	m_ctrlSignalPanel.SetSlotClickCallback([this](int nRow, int nCol) {
+		int index = nRow * SIGNAL_GRID_COLS + nCol;
+		if (index >= 0 && index < (int)m_vSignalList.size() && m_vSignalList[index].bClickable) {
+			CString strMsg;
+			strMsg.Format(_T("鐐瑰嚮淇″彿锛�%s"), m_vSignalList[index].strName);
+			AfxMessageBox(strMsg);
+		}
+	});
+}
+
 BOOL CEquipmentPage1::OnInitDialog()
 {
 	CHMPropertyPage::OnInitDialog();
 
 	// TODO:  鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+	m_ctrlSignalPanel.Create(AfxRegisterWndClass(0), _T("SignalGrid"), WS_CHILD | WS_VISIBLE, CRect(0, 0, 100, 100), this, 1002);
+	m_ctrlSignalPanel.SetColors(RGB(0, 200, 0), RGB(220, 220, 220));
+
+	InitSignalList();
+	LoadDeviceSignals();
 
 	return TRUE;  // return TRUE unless you set the focus to a control
 				  // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
 }
+
+HBRUSH CEquipmentPage1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	HBRUSH hbr = CHMPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);
+
+	// TODO:  鍦ㄦ鏇存敼 DC 鐨勪换浣曠壒鎬�
+
+	// TODO:  濡傛灉榛樿鐨勪笉鏄墍闇�鐢荤瑪锛屽垯杩斿洖鍙︿竴涓敾绗�
+	return hbr;
+}
+
+void CEquipmentPage1::OnDestroy()
+{
+	CHMPropertyPage::OnDestroy();
+
+	// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+}
+
+void CEquipmentPage1::OnSize(UINT nType, int cx, int cy)
+{
+	CHMPropertyPage::OnSize(nType, cx, cy);
+
+	// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+	if (::IsWindow(m_ctrlSignalPanel.GetSafeHwnd())) {
+		CRect rc;
+		GetClientRect(&rc);
+		rc.DeflateRect(10, 10);
+		m_ctrlSignalPanel.MoveWindow(rc);
+	}
+}

--
Gitblit v1.9.3