From 0393d1ff2ebc378b3c4cff9b45f72ebc8a4ea516 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 03 六月 2025 15:13:42 +0800
Subject: [PATCH] Merge branch 'master' into liuyang

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

diff --git a/SourceCode/Bond/Servo/CMyStatusbar.cpp b/SourceCode/Bond/Servo/CMyStatusbar.cpp
new file mode 100644
index 0000000..d0ab4fe
--- /dev/null
+++ b/SourceCode/Bond/Servo/CMyStatusbar.cpp
@@ -0,0 +1,168 @@
+锘�// CMyStatusbar.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "CMyStatusbar.h"
+#include "afxdialogex.h"
+
+
+// CMyStatusbar 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CMyStatusbar, CDialogEx)
+
+CMyStatusbar::CMyStatusbar(CWnd* pParent /*=nullptr*/)
+	: CDialogEx(IDD_STATUSBAR, pParent)
+{
+	m_crBkgnd = STATUSBAR_BK_NORMAL;
+}
+
+CMyStatusbar::~CMyStatusbar()
+{
+}
+
+void CMyStatusbar::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+}
+
+
+BEGIN_MESSAGE_MAP(CMyStatusbar, CDialogEx)
+	ON_WM_CTLCOLOR()
+	ON_WM_DESTROY()
+	ON_WM_SIZE()
+END_MESSAGE_MAP()
+
+
+// CMyStatusbar 娑堟伅澶勭悊绋嬪簭
+
+
+void CMyStatusbar::setBackgroundColor(COLORREF color)
+{
+	if (m_brBkgnd.GetSafeHandle() != nullptr) {
+		m_brBkgnd.DeleteObject();
+	}
+
+	m_crBkgnd = color;
+	m_brBkgnd.CreateSolidBrush(color);
+	m_btnCurTask.SetFaceColor(m_crBkgnd);
+	m_btnCurTask.SetFrameColor(m_crBkgnd);
+	m_btnCurTask.SetFrameColor(BS_HOVER, CColorTransfer::ApproximateColor(m_crBkgnd, 0.05));
+	m_btnCurTask.SetFrameColor(BS_PRESS, CColorTransfer::ApproximateColor(m_crBkgnd, 0.12));
+	m_btnCurTask.SetBkgndColor(BS_HOVER, CColorTransfer::ApproximateColor(m_crBkgnd, 0.05));
+	m_btnCurTask.SetBkgndColor(BS_PRESS, CColorTransfer::ApproximateColor(m_crBkgnd, 0.12));
+
+	Invalidate(); 
+	UpdateWindow();
+}
+
+void CMyStatusbar::setForegroundColor(COLORREF cr)
+{
+	m_crForeground = cr;
+	m_btnCurTask.SetTextColor(m_crForeground);
+
+	Invalidate();
+	UpdateWindow();
+}
+
+void CMyStatusbar::setRunTimeText(const char* pszText)
+{
+	SetDlgItemText(IDC_LABEL_RUNTIME, pszText);
+}
+
+void CMyStatusbar::setCurTaskBtnText(const char* pszText)
+{
+	SetDlgItemText(IDC_BUTTON_ROBOTTASK, pszText);
+}
+
+BOOL CMyStatusbar::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+
+	m_btnCurTask.SubclassDlgItem(IDC_BUTTON_ROBOTTASK, this);
+	// m_btnCurTask.SetIcon(hIcon1, hIcon1, 24);
+	m_btnCurTask.SetFaceColor(m_crBkgnd);
+	m_btnCurTask.SetFrameColor(m_crBkgnd);
+	m_btnCurTask.SetFrameColor(BS_HOVER, RGB(218, 218, 218));
+	m_btnCurTask.SetFrameColor(BS_PRESS, RGB(168, 168, 168));
+
+
+	return TRUE;  // return TRUE unless you set the focus to a control
+				  // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+HBRUSH CMyStatusbar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
+
+	// TODO:  鍦ㄦ鏇存敼 DC 鐨勪换浣曠壒鎬�
+
+	if (nCtlColor == CTLCOLOR_STATIC) {
+		pDC->SetBkMode(TRANSPARENT);
+		pDC->SetBkColor(m_crBkgnd);
+		pDC->SetTextColor(m_crForeground);
+	}
+
+	if (m_brBkgnd.GetSafeHandle() == nullptr) {
+		m_brBkgnd.CreateSolidBrush(m_crBkgnd);
+	}
+
+	return (HBRUSH)m_brBkgnd;
+}
+
+void CMyStatusbar::OnDestroy()
+{
+	CDialogEx::OnDestroy();
+
+	// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+}
+
+BOOL CMyStatusbar::OnCommand(WPARAM wParam, LPARAM lParam)
+{
+	CWnd* pItem;
+	CRect rcItem;
+
+	switch (LOWORD(wParam)) {
+	case IDC_BUTTON_ROBOTTASK:
+		pItem = GetDlgItem(IDC_BUTTON_ROBOTTASK);
+		pItem->GetWindowRect(rcItem);
+		GetParent()->SendMessage(ID_MSG_STATUSBAR_BTN_CLICKED, rcItem.left, LOWORD(wParam));
+		break;
+	}
+
+	return CDialogEx::OnCommand(wParam, lParam);
+}
+
+void CMyStatusbar::OnSize(UINT nType, int cx, int cy)
+{
+	CDialogEx::OnSize(nType, cx, cy);
+	if (nullptr == GetDlgItem(IDC_LABEL_RUNTIME)) return;
+	Resize();
+}
+
+void CMyStatusbar::Resize()
+{
+	CRect rcClient, rcItem;
+	CWnd* pItem = nullptr;
+	int x;
+	GetClientRect(&rcClient);
+
+	x = 20;
+	pItem = GetDlgItem(IDC_LABEL_RUNTIME);
+	pItem->GetClientRect(rcItem);
+	pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
+	x += rcItem.Width();
+
+	x += 8;
+	pItem = GetDlgItem(IDC_LABEL_CUR_TASK_L);
+	pItem->GetClientRect(rcItem);
+	pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
+	x += rcItem.Width();	
+
+	x += 8;
+	pItem = GetDlgItem(IDC_BUTTON_ROBOTTASK);
+	pItem->GetClientRect(rcItem);
+	pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
+	x += rcItem.Width();
+}
\ No newline at end of file

--
Gitblit v1.9.3