From bfe14e41fa5b07771d78af4511ba18d706bc23cc Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 28 七月 2025 17:07:52 +0800
Subject: [PATCH] 1.Spooling Config功能EAP模拟测试;

---
 SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp |   77 ++++++++++++++++++++++++++------------
 1 files changed, 53 insertions(+), 24 deletions(-)

diff --git a/SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp b/SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp
index ad1e83d..dee2397 100644
--- a/SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp
+++ b/SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp
@@ -25,7 +25,7 @@
 {
 	m_nCurrentPage = 1;
 	m_nTotalPages = 1;
-	m_nRowsPerPage = 10;
+	m_nRowsPerPage = 16;
 	m_nCols = 6;
 }
 
@@ -59,7 +59,7 @@
 
 	// 璁$畻椤垫暟
 	m_nCurrentPage = 1;
-	m_nTotalPages = (m_displayData.size() + m_nRowsPerPage - 1) / m_nRowsPerPage;
+	m_nTotalPages = ((int)m_displayData.size() + m_nRowsPerPage - 1) / m_nRowsPerPage;
 }
 
 void CIOMonitoringDlg::SetPLC(CPLC* pPLC)
@@ -161,7 +161,7 @@
 	ScreenToClient(&nextButtonRect);
 
 	int buttonHeight = prevButtonRect.Height();     // 鎸夐挳鐨勯珮搴�
-	int topMargin = rect.Height() * 0.05;           // 椤堕儴淇濈暀 5% 鐨勯珮搴�
+	int topMargin = int(rect.Height() * 0.05);      // 椤堕儴淇濈暀 5% 鐨勯珮搴�
 	int bottomMargin = buttonHeight + topMargin;    // 搴曢儴淇濈暀鎸夐挳楂樺害鍔犻棿璺�
 	int sideMargin = topMargin;                     // 宸﹀彸闂磋窛涓庨《閮ㄩ棿璺濈浉鍚�
 	int groupSpacing = 20;                          // 涓ょ粍涔嬮棿鐨勯棿璺�
@@ -214,8 +214,8 @@
 	// 鍒涘缓鍔ㄦ�佹帶浠�
 	CBLLabel* pStatic = new CBLLabel();
 	DWORD style = WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE; // 纭繚鍨傜洿灞呬腑
-	if (hasBorder) {
-		style |= WS_BORDER; // 娣诲姞杈规
+	if (!hasBorder) {
+		pStatic->DisableBorder();
 	}
 	pStatic->Create(text, style, CRect(x, y, x + width, y + height), this, id);
 
@@ -230,8 +230,12 @@
 	pStatic->SetDynamicFont(TRUE);
 
 	// 璁剧疆鍥炶皟
-	if (clickCallback) {
+	UserManager& userManager = UserManager::getInstance();
+	UserRole enRole = userManager.getCurrentUserRole();
+	if (clickCallback && (enRole == UserRole::SuperAdmin || enRole == UserRole::Operator)) {
 		pStatic->SetClickCallback(clickCallback);
+		pStatic->SetRoundedCorners(TRUE, 5);
+		pStatic->DisableBorder();
 	}
 
 	// 瀛樺偍鎺т欢鎸囬拡
@@ -270,6 +274,8 @@
 	int startIndex = (m_nCurrentPage - 1) * m_nRowsPerPage;
 	int endIndex = min(startIndex + m_nRowsPerPage, static_cast<int>(m_displayData.size()));
 
+	m_inputStates.clear();
+	m_outputStates.clear();
 	m_inputPLCAddresses.clear();
 	m_outputPLCAddresses.clear();
 
@@ -278,6 +284,10 @@
 
 		if (startIndex + i < endIndex) {
 			const auto& data = m_displayData[startIndex + i];
+
+			// 娣诲姞鐘舵�佸埌瀹瑰櫒涓�
+			m_inputStates.push_back(FALSE);		// 0 鍒�
+			m_outputStates.push_back(FALSE);	// 3 鍒�
 
 			// 娣诲姞 PLC 鍦板潃鍒板鍣ㄤ腑
 			m_inputPLCAddresses.push_back(CString(data.inputAddress.c_str()));		// 1 鍒�
@@ -469,19 +479,20 @@
 	auto startData = m_displayData.front();
 	auto endData = m_displayData.back();
 	MC::SOFT_COMPONENT startSoftComponent, endSoftComponent;
-	int startAddr, endAddr;
-	ParsePLCAddress(CString(startData.inputAddress.c_str()), startSoftComponent, startAddr);
-	ParsePLCAddress(CString(endData.inputAddress.c_str()), endSoftComponent, endAddr);
+	int inputStartAddr, inputEndAddr;
+	ParsePLCAddress(CString(startData.inputAddress.c_str()), startSoftComponent, inputStartAddr);
+	ParsePLCAddress(CString(endData.inputAddress.c_str()), endSoftComponent, inputEndAddr);
 	ASSERT(startSoftComponent == endSoftComponent);
 
 	// 璇诲彇杈撳叆鏁版嵁
-	ReadPLCData(startSoftComponent, startAddr, endAddr, [this, startAddr](IMcChannel* pChannel, int addr, char* pData, unsigned int nDataSize, int flag) {
+	ReadPLCData(startSoftComponent, inputStartAddr, inputEndAddr, [this, inputStartAddr](IMcChannel* pChannel, int addr, char* pData, unsigned int nDataSize, int flag) {
+		if (!::IsWindow(m_hWnd)) return;
 		for (auto& data : m_displayData) {
 			int nAddress;
 			MC::SOFT_COMPONENT enComponent;
 			if (ParsePLCAddress(CString(data.inputAddress.c_str()), enComponent, nAddress)) {
-				int nOffset = nAddress - startAddr;
-				if (nOffset >= 0 && nOffset < nDataSize) {
+				int nOffset = nAddress - inputStartAddr;
+				if (nOffset >= 0 && nOffset < (int)nDataSize) {
 					int byteIndex = nOffset / 8;
 					int bitIndex = nOffset % 8;
 					data.bInputStates = CToolUnits::getBit(pData[byteIndex], bitIndex);
@@ -491,17 +502,18 @@
 	});
 
 	// 璇诲彇杈撳嚭鏁版嵁
-	int startAddr2, endAddr2;
-	ParsePLCAddress(CString(startData.outputAddress.c_str()), startSoftComponent, startAddr2);
-	ParsePLCAddress(CString(endData.outputAddress.c_str()), endSoftComponent, endAddr2);
+	int outputStartAddr, outputEndAddr;
+	ParsePLCAddress(CString(startData.outputAddress.c_str()), startSoftComponent, outputStartAddr);
+	ParsePLCAddress(CString(endData.outputAddress.c_str()), endSoftComponent, outputEndAddr);
 	ASSERT(startSoftComponent == endSoftComponent);
-	ReadPLCData(startSoftComponent, startAddr2, endAddr2, [this, startAddr2](IMcChannel* pChannel, int addr, char* pData, unsigned int nDataSize, int flag) {
+	ReadPLCData(startSoftComponent, outputStartAddr, outputEndAddr, [this, outputStartAddr](IMcChannel* pChannel, int addr, char* pData, unsigned int nDataSize, int flag) {
+		if (!::IsWindow(m_hWnd)) return;
 		for (auto& data : m_displayData) {
 			int nAddress;
 			MC::SOFT_COMPONENT enComponent;
 			if (ParsePLCAddress(CString(data.outputAddress.c_str()), enComponent, nAddress)) {
-				int nOffset = nAddress - startAddr2;
-				if (nOffset >= 0 && nOffset < nDataSize) {
+				int nOffset = nAddress - outputStartAddr;
+				if (nOffset >= 0 && nOffset < (int)nDataSize) {
 					int byteIndex = nOffset / 8;
 					int bitIndex = nOffset % 8;
 					data.bOutputStates = CToolUnits::getBit(pData[byteIndex], bitIndex);
@@ -523,11 +535,19 @@
 		if (startIndex + i < endIndex) {
 			const auto& data = m_displayData[startIndex + i];
 			// 璁剧疆鍐呭鍜岃儗鏅鑹�
-			m_staticControls[row * m_nCols + 0]->SetText(data.bInputStates ? _T("ON") : _T("OFF"));
-			m_staticControls[row * m_nCols + 0]->SetBkColor(data.bInputStates ? RGB(0, 255, 0) : RGB(255, 0, 0));
+			if (m_inputStates[i] != data.bInputStates)
+			{
+				m_staticControls[row * m_nCols + 0]->SetText(data.bInputStates ? _T("ON") : _T("OFF"));
+				m_staticControls[row * m_nCols + 0]->SetBkColor(data.bInputStates ? RGB(0, 255, 0) : RGB(255, 0, 0));
+				m_inputStates[i] = data.bInputStates;
+			}
 
-			m_staticControls[row * m_nCols + 3]->SetText(data.bOutputStates ? _T("ON") : _T("OFF"));
-			m_staticControls[row * m_nCols + 3]->SetBkColor(data.bOutputStates ? RGB(0, 255, 0) : RGB(255, 0, 0));
+			if (m_outputStates[i] != data.bOutputStates)
+			{
+				m_staticControls[row * m_nCols + 3]->SetText(data.bOutputStates ? _T("ON") : _T("OFF"));
+				m_staticControls[row * m_nCols + 3]->SetBkColor(data.bOutputStates ? RGB(0, 255, 0) : RGB(255, 0, 0));
+				m_outputStates[i] = data.bOutputStates;
+			}
 		}
 	}
 }
@@ -586,8 +606,8 @@
 	}
 
 	GetWindowRect(&dlgRect);
-	int dlgWidth = dlgRect.Width() * 2;
-	int dlgHeight = dlgRect.Height() * 2;
+	int dlgWidth = dlgRect.Width() * 3;
+	int dlgHeight = dlgRect.Height() * 3;
 
 	if (dlgWidth > screenRect.Width()) {
 		dlgWidth = screenRect.Width();
@@ -602,6 +622,9 @@
 
 	CreateDynamicControls();
 	DisplayCurrentPage();
+
+	GetDlgItem(IDC_BUTTON_PREV_PAGE)->EnableWindow(m_nCurrentPage > 1);
+	GetDlgItem(IDC_BUTTON_NEXT_PAGE)->EnableWindow(m_nCurrentPage < m_nTotalPages);
 
 	SetTimer(TIMER_READ_PLC_DATA, 500, nullptr);
 	SetTimer(TIMER_READ_UPDATE, 200, nullptr);
@@ -636,6 +659,9 @@
 	else {
 		AfxMessageBox(_T("宸茬粡鏄涓�椤碉紒"));
 	}
+
+	GetDlgItem(IDC_BUTTON_PREV_PAGE)->EnableWindow(m_nCurrentPage > 1);
+	GetDlgItem(IDC_BUTTON_NEXT_PAGE)->EnableWindow(m_nCurrentPage < m_nTotalPages);
 }
 
 void CIOMonitoringDlg::OnBnClickedButtonNextPage()
@@ -648,6 +674,9 @@
 	else {
 		AfxMessageBox(_T("宸茬粡鏄渶鍚庝竴椤碉紒"));
 	}
+	
+	GetDlgItem(IDC_BUTTON_PREV_PAGE)->EnableWindow(m_nCurrentPage > 1);
+	GetDlgItem(IDC_BUTTON_NEXT_PAGE)->EnableWindow(m_nCurrentPage < m_nTotalPages);
 }
 
 LRESULT CIOMonitoringDlg::OnIoClicked(WPARAM wParam, LPARAM lParam)

--
Gitblit v1.9.3