From 302b2045dcde4687485c28eaa3bde3aaa2203bc7 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 30 五月 2025 16:44:36 +0800
Subject: [PATCH] 1.修复合并后的RC文件问题;

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

diff --git a/SourceCode/Bond/Servo/TopToolbar.cpp b/SourceCode/Bond/Servo/TopToolbar.cpp
new file mode 100644
index 0000000..32c9d8a
--- /dev/null
+++ b/SourceCode/Bond/Servo/TopToolbar.cpp
@@ -0,0 +1,218 @@
+// TopToolbar.cpp : 实现文件
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "TopToolbar.h"
+#include "afxdialogex.h"
+#include "Common.h"
+
+
+// CTopToolbar 对话框
+
+IMPLEMENT_DYNAMIC(CTopToolbar, CDialogEx)
+
+CTopToolbar::CTopToolbar(CWnd* pParent /*=NULL*/)
+	: CDialogEx(IDD_TOP_TOOLBAR, pParent)
+{
+	m_crBkgnd = TOP_TOOLBAR_BACKGROUND;
+	m_hbrBkgnd = nullptr;
+}
+
+CTopToolbar::~CTopToolbar()
+{
+}
+
+void CTopToolbar::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_BUTTON_RUN, m_btnRun);
+	DDX_Control(pDX, IDC_BUTTON_STOP, m_btnStop);
+	DDX_Control(pDX, IDC_BUTTON_ALARM, m_btnAlarm);
+	DDX_Control(pDX, IDC_BUTTON_SETTINGS, m_btnSettings);
+	DDX_Control(pDX, IDC_BUTTON_ROBOT, m_btnRobot);
+	DDX_Control(pDX, IDC_BUTTON_OPERATOR, m_btnOperator);
+}
+
+
+BEGIN_MESSAGE_MAP(CTopToolbar, CDialogEx)
+	ON_WM_CTLCOLOR()
+	ON_WM_DESTROY()
+	ON_WM_SIZE()
+	ON_NOTIFY(BLBUTTON_MENU_ITEM_CLICKED, IDC_BUTTON_OPERATOR, &CTopToolbar::OnButtonOperatorMenuClicked)
+END_MESSAGE_MAP()
+
+
+// CTopToolbar 消息处理程序
+
+
+BOOL CTopToolbar::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	InitBtn(m_btnRun, "Run_High_32.ico", "Run_Gray_32.ico");
+	InitBtn(m_btnStop, "Stop_High_32.ico", "Stop_Gray_32.ico");
+	InitBtn(m_btnAlarm, "Alarm_o_32.ico", "Alarm_gray_32.ico");
+	InitBtn(m_btnSettings, "Settings_High_32.ico", "Settings_Gray_32.ico");
+	InitBtn(m_btnRobot, "Robot_High_32.ico", "Robot_Gray_32.ico");
+	InitBtn(m_btnOperator, "Operator_High_32.ico", "Operator_Gray_32.ico");
+	HMENU hMenu = LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCEA(IDR_MENU_OPEATOR));
+	m_btnOperator.SetMenu(hMenu);
+
+
+	return TRUE;  // return TRUE unless you set the focus to a control
+				  // 异常: OCX 属性页应返回 FALSE
+}
+
+
+HBRUSH CTopToolbar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
+
+	if (nCtlColor == CTLCOLOR_STATIC) {
+		pDC->SetBkColor(m_crBkgnd);
+	}
+
+	if (m_hbrBkgnd == nullptr) {
+		m_hbrBkgnd = CreateSolidBrush(m_crBkgnd);
+	}
+
+	return m_hbrBkgnd;
+}
+
+
+void CTopToolbar::OnDestroy()
+{
+	CDialogEx::OnDestroy();
+
+	if (m_hbrBkgnd != nullptr) {
+		::DeleteObject(m_hbrBkgnd);
+		m_hbrBkgnd = nullptr;
+	}
+}
+
+
+void CTopToolbar::OnSize(UINT nType, int cx, int cy)
+{
+	CDialogEx::OnSize(nType, cx, cy);
+	if (GetDlgItem(IDC_BUTTON_RUN) == nullptr) return;
+	Resize();
+}
+
+#define BTN_WIDTH		60
+#define BTN_HEIGHT		30
+void CTopToolbar::Resize()
+{
+	CWnd* pItem;
+	CRect rcClient, rcItem;
+	GetClientRect(&rcClient);
+	int nBthHeight = (rcClient.Height() - 10);
+	int x = 2, y = 3;
+
+	pItem = GetDlgItem(IDC_BUTTON_RUN);
+	pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight);
+	x += BTN_WIDTH;
+	x += 2;
+
+	pItem = GetDlgItem(IDC_BUTTON_STOP);
+	pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight);
+	x += BTN_WIDTH;
+	x += 2;
+
+	pItem = GetDlgItem(IDC_BUTTON_ALARM);
+	pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight);
+	x += BTN_WIDTH;
+	x += 2;
+
+	pItem = GetDlgItem(IDC_TOOLBAR_LINE1);
+	pItem->MoveWindow(x, y + 6, 2, nBthHeight - 12);
+	x += 4;
+
+	pItem = GetDlgItem(IDC_BUTTON_SETTINGS);
+	pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight);
+	x += BTN_WIDTH;
+	x += 2;
+
+	pItem = GetDlgItem(IDC_BUTTON_ROBOT);
+	pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight);
+	x += BTN_WIDTH;
+	x += 2;
+
+	x = rcClient.right - 5 - BTN_WIDTH - 20;
+	pItem = GetDlgItem(IDC_BUTTON_OPERATOR);
+	pItem->MoveWindow(x, y, BTN_WIDTH + 20, nBthHeight);
+
+
+	CWnd* pLine = GetDlgItem(IDC_LINE1);
+	pLine->MoveWindow(0, rcClient.bottom - 2, rcClient.Width(), 2);
+}
+
+void CTopToolbar::InitBtn(CBlButton& btn, const char* pszIcon1, const char* pszIcon2)
+{
+	CString strIcon1, strIcon2;
+	HICON hIcon1, hIcon2;
+	strIcon1.Format(_T("%s\\Res\\%s"), theApp.m_strAppDir, pszIcon1);
+	strIcon2.Format(_T("%s\\Res\\%s"), theApp.m_strAppDir, pszIcon2);
+	hIcon1 = (HICON)::LoadImage(AfxGetInstanceHandle(),
+		strIcon1, IMAGE_ICON, 32, 32,
+		LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
+	hIcon2 = (HICON)::LoadImage(AfxGetInstanceHandle(),
+		strIcon2, IMAGE_ICON, 32, 32,
+		LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
+	btn.SetBkgndColor(BS_NORMAL, TOP_TOOLBAR_BACKGROUND);
+	btn.SetBkgndColor(BS_PRESS, RGB(185, 209, 234));
+	btn.SetBkgndColor(BS_DISABLE, TOP_TOOLBAR_BACKGROUND);
+	btn.SetFrameColor(BS_NORMAL, TOP_TOOLBAR_BACKGROUND);
+	btn.SetFrameColor(BS_PRESS, RGB(185, 209, 234));
+	btn.SetFrameColor(BS_HOVER, RGB(185, 209, 234));
+	btn.SetFrameColor(BS_DISABLE, TOP_TOOLBAR_BACKGROUND);
+	btn.SetIcon(hIcon1, hIcon2, 32);
+}
+
+CWnd* CTopToolbar::GetBtn(UINT nId)
+{
+	return GetDlgItem(nId);
+}
+
+void CTopToolbar::SetOperatorBtnText(const char* pszText)
+{
+	m_btnOperator.SetWindowText(pszText);
+}
+
+BOOL CTopToolbar::OnCommand(WPARAM wParam, LPARAM lParam)
+{
+	switch (LOWORD(wParam)) {
+	case IDC_BUTTON_RUN:
+	case IDC_BUTTON_STOP:
+	case IDC_BUTTON_ALARM:
+	case IDC_BUTTON_SETTINGS:
+	case IDC_BUTTON_ROBOT:
+		GetParent()->SendMessage(ID_MSG_TOOLBAR_BTN_CLICKED, 0, LOWORD(wParam));
+		break;
+	}
+
+	return CDialogEx::OnCommand(wParam, lParam);
+}
+
+void CTopToolbar::OnButtonOperatorMenuClicked(NMHDR* pNMHDR, LRESULT* pResult)
+{
+	BLBUTTON_NMHDR* pblbNmhdr = reinterpret_cast<BLBUTTON_NMHDR*>(pNMHDR);
+	GetParent()->SendMessage(ID_MSG_TOOLBAR_BTN_CLICKED, (int)pblbNmhdr->dwData, IDC_BUTTON_OPERATOR);
+
+
+	*pResult = 0;
+}
+
+HMENU CTopToolbar::GetOperatorMenu()
+{
+	return m_btnOperator.GetMenu();
+}
+
+BOOL CTopToolbar::PreTranslateMessage(MSG* pMsg)
+{
+	if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
+		return TRUE;
+	}
+
+	return CDialogEx::PreTranslateMessage(pMsg);
+}

--
Gitblit v1.9.3