From c96ec4c44d31e4df6da3ce904fd3c6d8f3548c2d Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 11 七月 2025 08:33:21 +0800
Subject: [PATCH] 1.终端信息显示模拟测试;

---
 SourceCode/Bond/Servo/EqsGraphWnd.cpp |   53 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 44 insertions(+), 9 deletions(-)

diff --git a/SourceCode/Bond/Servo/EqsGraphWnd.cpp b/SourceCode/Bond/Servo/EqsGraphWnd.cpp
index 9c0af84..9aa534d 100644
--- a/SourceCode/Bond/Servo/EqsGraphWnd.cpp
+++ b/SourceCode/Bond/Servo/EqsGraphWnd.cpp
@@ -35,13 +35,7 @@
 	m_hWnd = NULL;
 	m_crFrame = GetSysColor(COLOR_WINDOWFRAME);
 	m_crBkgnd = RGB(255, 255, 255);
-	m_listener.onConnectPin = nullptr;
-	m_listener.onCheckConnectPin = nullptr;
-	m_listener.onDisconnectPin = nullptr;
-	m_listener.onDeleteEqItem = nullptr;
-	m_listener.onEqItemPosChanged = nullptr;
-	m_listener.onDblckEqItem = nullptr;
-	m_listener.onRclickEqItem = nullptr;
+	m_listener = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr };
 	m_crItemBackground[0] = RGB(218, 218, 218);
 	m_crItemBackground[1] = RGB(193, 208, 227);
 	m_crItemFrame[0] = RGB(128, 128, 128);
@@ -492,6 +486,7 @@
 	m_listener.onEqItemPosChanged = listener.onEqItemPosChanged;
 	m_listener.onDblckEqItem = listener.onDblckEqItem;
 	m_listener.onRclickEqItem = listener.onRclickEqItem;
+	m_listener.onSelectEqItem = listener.onSelectEqItem;
 }
 
 BOOL CEqsGraphWnd::SetCurSel(int nSel)
@@ -1286,6 +1281,7 @@
 	PIN *pLastPin = m_pCurPin;
 	PIN *pLastSelLineOutPin = m_pSelLineOutPin;
 	BOOL bChanged = FALSE;
+	BOOL bSelectChanged = FALSE;
 	EQITEM* pHitItem = NULL;
 	PIN *pHitPin = NULL;
 	PIN *pPin2 = NULL;
@@ -1309,8 +1305,11 @@
 	}
 
 	if (nRet == HT_ITEM) {
-		m_pCurItem = pHitItem;
-		m_pCurItem->bHighlight = TRUE;
+		if (m_pCurItem != pHitItem) {
+			m_pCurItem = pHitItem;
+			m_pCurItem->bHighlight = TRUE;
+			bSelectChanged = TRUE;
+		}
 	}
 	else if (nRet == HT_PIN) {
 		m_pCurPin = pHitPin;
@@ -1394,6 +1393,8 @@
 
 			ReleaseCapture();
 		ExitLoop:
+			m_nMagneticLinHoz = 0;
+			m_nMagneticLinVer = 0;
 			AfxUnlockTempMaps(FALSE);
 		}
 	}
@@ -1552,6 +1553,13 @@
 			ReleaseCapture();
 		ExitLoop3:
 			AfxUnlockTempMaps(FALSE);
+		}
+	}
+
+
+	if (bSelectChanged) {
+		if (m_listener.onSelectEqItem != nullptr) {
+			m_listener.onSelectEqItem(m_pCurItem);
 		}
 	}
 
@@ -1903,10 +1911,12 @@
 	HBRUSH hbrItemBackground[2];
 	HBRUSH hbrItemFrame[2];
 	HBRUSH hbrPinBackground[3];
+	HBRUSH hbrIndicator;
 	hbrItemBackground[0] = CreateSolidBrush(m_crItemBackground[0]);
 	hbrItemBackground[1] = CreateSolidBrush(m_crItemBackground[1]);
 	hbrItemFrame[0] = CreateSolidBrush(m_crItemFrame[0]);
 	hbrItemFrame[1] = CreateSolidBrush(m_crItemFrame[1]);
+	hbrIndicator = CreateSolidBrush(RGB(34, 177, 76));
 	for (int i = 0; i < 3; i++) {
 		hbrPinBackground[i] = CreateSolidBrush(m_crPinBkgnd[i]);
 	}
@@ -1952,6 +1962,21 @@
 			HFONT hFontOld = (HFONT)::SelectObject(hMemDC, m_hFontName);
 			::SetTextColor(hMemDC, pItem->bHighlight ? m_crItemNameText[1] : m_crItemNameText[0]);
 			::DrawText(hMemDC, pItem->text, (int)strlen(pItem->text), &rcItem, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS);
+
+			
+			// 添加一个小绿点指示器
+			if(pItem->bShowIndicator[0]){
+				RECT rcIndicator;
+				rcIndicator.left = rcItem.left + 5;
+				rcIndicator.top = rcItem.top + 5;
+				rcIndicator.right = rcIndicator.left + 12;
+				rcIndicator.bottom = rcIndicator.top + 12;
+				HRGN hRgn = CreateRoundRectRgn(rcIndicator.left, rcIndicator.top, rcIndicator.right, rcIndicator.bottom, 2, 2);
+				::FillRgn(hMemDC, hRgn, hbrIndicator);
+				::FrameRgn(hMemDC, hRgn, hbrItemFrame[0], 1, 1);
+				::DeleteObject(hRgn);
+			}
+
 
 			if (pItem->nShowType != ITEM_SMALL) {
 				RECT rcId = rcItem;
@@ -2066,6 +2091,7 @@
 		::DeleteObject(hbrItemBackground[1]);
 		::DeleteObject(hbrItemFrame[0]);
 		::DeleteObject(hbrItemFrame[1]);
+		::DeleteObject(hbrIndicator);		
 	}
 
 
@@ -2382,6 +2408,15 @@
 	SetTimer(m_hWnd, TIMER_ANIMATION_RECT, uElpase, NULL);
 }
 
+void CEqsGraphWnd::ShowItemIndicator(DWORD_PTR dwItemData, BOOL bShow)
+{
+	EQITEM* pItem = GetItem(dwItemData);
+	if (pItem != nullptr) {
+		pItem->bShowIndicator[0] = bShow;
+		::InvalidateRect(m_hWnd, nullptr, TRUE);
+	}
+}
+
 double CEqsGraphWnd::PointToSegDist(double x, double y, double x1, double y1, double x2, double y2)
 {
 	double cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);

--
Gitblit v1.9.3