// 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); } 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() { 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)); 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 } 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; 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); } 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(); 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(); }