From 3e91a18f75a75fbe8f646d73e4e68ba107b6750b Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期四, 08 一月 2026 21:04:26 +0800
Subject: [PATCH] 1.增加状态是否远程禁等逻辑;

---
 SourceCode/Bond/Servo/CPageCtrlState.cpp |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 157 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/Servo/CPageCtrlState.cpp b/SourceCode/Bond/Servo/CPageCtrlState.cpp
new file mode 100644
index 0000000..de9972c
--- /dev/null
+++ b/SourceCode/Bond/Servo/CPageCtrlState.cpp
@@ -0,0 +1,157 @@
+锘�// CPageCtrlState.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "CPageCtrlState.h"
+#include "afxdialogex.h"
+#include "Common.h"
+#include "Model.h"
+#include "ColorTransfer.h"
+
+
+// CPageCtrlState 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CPageCtrlState, CDialogEx)
+
+CPageCtrlState::CPageCtrlState(CWnd* pParent /*=nullptr*/)
+	: CDialogEx(IDD_PROD_CTRL_STATE, pParent)
+{
+
+}
+
+CPageCtrlState::~CPageCtrlState()
+{
+}
+
+void CPageCtrlState::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_BUTTON_OFFLINE, m_btnOffline);
+	DDX_Control(pDX, IDC_BUTTON_ONLINE_LOCAL, m_btnOnlineLocal);
+	DDX_Control(pDX, IDC_BUTTON_ONLINE_REMOTE, m_btnOnlineRemote);
+}
+
+
+BEGIN_MESSAGE_MAP(CPageCtrlState, CDialogEx)
+	ON_WM_CTLCOLOR()
+	ON_WM_SIZE()
+	ON_WM_DESTROY()
+	ON_BN_CLICKED(IDC_BUTTON_OFFLINE, &CPageCtrlState::OnBnClickedOffline)
+	ON_BN_CLICKED(IDC_BUTTON_ONLINE_LOCAL, &CPageCtrlState::OnBnClickedOnlineLocal)
+	ON_BN_CLICKED(IDC_BUTTON_ONLINE_REMOTE, &CPageCtrlState::OnBnClickedOnlineRemote)
+END_MESSAGE_MAP()
+
+
+// CPageCtrlState 娑堟伅澶勭悊绋嬪簭
+
+void CPageCtrlState::InitRxWindows()
+{
+	IRxWindows* pRxWindows = RX_GetRxWindows();
+	if (m_pObserver == nullptr) {
+		m_pObserver = pRxWindows->allocObserver([this](IAny* pAny) -> void {
+			pAny->addRef();
+			const int code = pAny->getCode();
+			if (code == RX_CODE_CONTROL_STATE_CHANGED && ::IsWindow(m_hWnd)) {
+				UpdateButtonStyles();
+			}
+			pAny->release();
+			}, [&]() -> void {
+				// onComplete
+			}, [&](IThrowable* pThrowable) -> void {
+				// onError
+				pThrowable->printf();
+			});
+
+		theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())
+			->subscribe(m_pObserver);
+	}
+}
+
+void CPageCtrlState::ApplyButtonTheme(CBlButton& btn, bool active)
+{
+	const COLORREF text = active ? RGB(255, 255, 255) : RGB(0, 0, 0);
+	const COLORREF normal = active ? RGB(34, 177, 76) : RGB(222, 222, 222);
+	const COLORREF hover = CColorTransfer::ApproximateColor(normal, active ? 0.08 : 0.05);
+	const COLORREF press = CColorTransfer::ApproximateColor(normal, active ? -0.10 : -0.12);
+	const COLORREF frame = active ? CColorTransfer::ApproximateColor(normal, -0.18) : RGB(168, 168, 168);
+
+	btn.SetRoundWidth(6);
+	btn.SetTextColor(BS_NORMAL, text);
+	btn.SetTextColor(BS_HOVER, text);
+	btn.SetTextColor(BS_PRESS, text);
+	btn.SetTextColor(BS_DISABLE, RGB(120, 120, 120));
+
+	btn.SetBkgndColor(BS_NORMAL, normal);
+	btn.SetBkgndColor(BS_HOVER, hover);
+	btn.SetBkgndColor(BS_PRESS, press);
+	btn.SetBkgndColor(BS_DISABLE, RGB(210, 210, 210));
+
+	btn.SetFrameColor(BS_NORMAL, frame);
+	btn.SetFrameColor(BS_HOVER, frame);
+	btn.SetFrameColor(BS_PRESS, frame);
+	btn.SetFrameColor(BS_DISABLE, RGB(180, 180, 180));
+}
+
+void CPageCtrlState::UpdateButtonStyles()
+{
+	const auto state = theApp.m_model.getControlState();
+	ApplyButtonTheme(m_btnOffline, state == ControlState::OfflineEquipment || state == ControlState::OfflineHost);
+	ApplyButtonTheme(m_btnOnlineLocal, state == ControlState::OnlineLocal);
+	ApplyButtonTheme(m_btnOnlineRemote, state == ControlState::OnlineRemote);
+
+	Invalidate();
+	UpdateWindow();
+}
+
+BOOL CPageCtrlState::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	// TODO:  鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+	InitRxWindows();
+	UpdateButtonStyles();
+
+	return TRUE;  // return TRUE unless you set the focus to a control
+				  // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+
+HBRUSH CPageCtrlState::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
+
+	// TODO:  鍦ㄦ鏇存敼 DC 鐨勪换浣曠壒鎬�
+
+	// TODO:  濡傛灉榛樿鐨勪笉鏄墍闇�鐢荤瑪锛屽垯杩斿洖鍙︿竴涓敾绗�
+	return hbr;
+}
+
+void CPageCtrlState::OnSize(UINT nType, int cx, int cy)
+{
+	CDialogEx::OnSize(nType, cx, cy);
+
+	// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+}
+
+void CPageCtrlState::OnDestroy()
+{
+	CDialogEx::OnDestroy();
+
+	// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+}
+
+void CPageCtrlState::OnBnClickedOffline()
+{
+	theApp.m_model.setControlState(ControlState::OfflineEquipment);
+}
+
+void CPageCtrlState::OnBnClickedOnlineLocal()
+{
+	theApp.m_model.setControlState(ControlState::OnlineLocal);
+}
+
+void CPageCtrlState::OnBnClickedOnlineRemote()
+{
+	theApp.m_model.setControlState(ControlState::OnlineRemote);
+}

--
Gitblit v1.9.3