mrDarker
2025-06-03 0393d1ff2ebc378b3c4cff9b45f72ebc8a4ea516
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();
}