From d7c88780e1df54f34563d60bd7fa01011d2eef03 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期一, 26 一月 2026 23:17:17 +0800
Subject: [PATCH] 1.CSVData.cpp 里 unserialize 用了 8*2、125*2,但 serialize 只写 8 + 125 字节。 m_svRawData.insert 的 end 指针是 pszBuffer + 125*2,没有用 index 计算,可能把无效区域一起拷进去。 一旦 size 实际是 133(不是 266),就会直接越界,堆会被破坏,m_svDatas.clear() 在销毁元素时崩。

---
 SourceCode/Bond/Servo/CMyStatusbar.cpp |   62 ++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMyStatusbar.cpp b/SourceCode/Bond/Servo/CMyStatusbar.cpp
index d0ab4fe..7aa389a 100644
--- a/SourceCode/Bond/Servo/CMyStatusbar.cpp
+++ b/SourceCode/Bond/Servo/CMyStatusbar.cpp
@@ -70,9 +70,37 @@
 	SetDlgItemText(IDC_LABEL_RUNTIME, pszText);
 }
 
+void CMyStatusbar::setJobText(const char* pszText)
+{
+	SetDlgItemText(IDC_LABEL_JOBSTATE, pszText);
+}
+
 void CMyStatusbar::setCurTaskBtnText(const char* pszText)
 {
 	SetDlgItemText(IDC_BUTTON_ROBOTTASK, pszText);
+}
+
+void CMyStatusbar::setCimBtnText(const char* pszText)
+{
+	SetDlgItemText(IDC_BUTTON_CIM, pszText);
+}
+
+void CMyStatusbar::setCurTaskBtnColors(COLORREF face, COLORREF frame, COLORREF text)
+{
+	m_btnCurTask.SetFaceColor(face);
+	m_btnCurTask.SetFrameColor(frame);
+	m_btnCurTask.SetTextColor(text);
+	Invalidate();
+	UpdateWindow();
+}
+
+void CMyStatusbar::setCimBtnColors(COLORREF face, COLORREF frame, COLORREF text)
+{
+	m_btnCim.SetFaceColor(face);
+	m_btnCim.SetFrameColor(frame);
+	m_btnCim.SetTextColor(text);
+	Invalidate();
+	UpdateWindow();
 }
 
 BOOL CMyStatusbar::OnInitDialog()
@@ -86,7 +114,14 @@
 	m_btnCurTask.SetFrameColor(m_crBkgnd);
 	m_btnCurTask.SetFrameColor(BS_HOVER, RGB(218, 218, 218));
 	m_btnCurTask.SetFrameColor(BS_PRESS, RGB(168, 168, 168));
+	m_btnCurTask.SetTextColor(m_crForeground);
 
+	m_btnCim.SubclassDlgItem(IDC_BUTTON_CIM, this);
+	m_btnCim.SetFaceColor(m_crBkgnd);
+	m_btnCim.SetFrameColor(m_crBkgnd);
+	m_btnCim.SetFrameColor(BS_HOVER, RGB(218, 218, 218));
+	m_btnCim.SetFrameColor(BS_PRESS, RGB(168, 168, 168));
+	m_btnCim.SetTextColor(m_crForeground);
 
 	return TRUE;  // return TRUE unless you set the focus to a control
 				  // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
@@ -129,6 +164,11 @@
 		pItem->GetWindowRect(rcItem);
 		GetParent()->SendMessage(ID_MSG_STATUSBAR_BTN_CLICKED, rcItem.left, LOWORD(wParam));
 		break;
+	case IDC_BUTTON_CIM:
+		pItem = GetDlgItem(IDC_BUTTON_CIM);
+		pItem->GetWindowRect(rcItem);
+		GetParent()->SendMessage(ID_MSG_STATUSBAR_BTN_CLICKED, rcItem.left, LOWORD(wParam));
+		break;
 	}
 
 	return CDialogEx::OnCommand(wParam, lParam);
@@ -165,4 +205,24 @@
 	pItem->GetClientRect(rcItem);
 	pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
 	x += rcItem.Width();
-}
\ No newline at end of file
+
+	x += 8;
+	pItem = GetDlgItem(IDC_LABEL_CIM);
+	pItem->GetClientRect(rcItem);
+	pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
+	x += rcItem.Width();
+
+	x += 8;
+	pItem = GetDlgItem(IDC_BUTTON_CIM);
+	pItem->GetClientRect(rcItem);
+	pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
+	x += rcItem.Width();
+
+	x += 8;
+	pItem = GetDlgItem(IDC_LABEL_JOBSTATE);
+	if (pItem != nullptr) {
+		pItem->GetClientRect(rcItem);
+		pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
+		x += rcItem.Width();
+	}
+}

--
Gitblit v1.9.3